해시 함수

해시 함수

임의 크기 입력 → 고정 길이 출력, 단방향 함수 — 무결성 검증

해시 함수 요구사항

요구사항 설명
임의 크기 입력 어떤 크기의 데이터 블록에도 적용 가능
고정 길이 출력 항상 동일한 길이의 해시값
단방향 (역상저항성) H(x)=h에서 x 역산 불가
제2역상저항성 (약한 충돌 방지) H(y)=H(x)인 y 찾기 불가
충돌저항성 (강한 충돌 방지) H(x)=H(y)인 (x,y) 쌍 찾기 불가

SHA 파라미터 비교

SHA-1 SHA-256 SHA-384 SHA-512
해시 크기 160bit 256bit 384bit 512bit
메시지 최대 크기 2^64 2^64 2^128 2^128
블록 크기 512bit 512bit 1024bit 1024bit
워드 크기 32bit 32bit 64bit 64bit
라운드 수 80 64 80 80
보안 강도 80 128 192 256

보안 강도 n = 생일 공격 시 충돌 발생 작업량 ≈ 2^(n/2)


SHA-512 처리 과정

1. 비트 패딩
   - 메시지 길이 mod 1024 = 896이 되도록 패딩
   - 패딩: 1비트 + 0비트들 (100...0)

2. 길이 정보 추가
   - 원본 메시지 길이 (128bit) 추가
   - 최종 길이: N × 1024bit

3. 해시 버퍼 초기화
   - 8개의 64bit 레지스터 (총 512bit)

4. 라운드 함수 80회
   - 1024bit 블록을 16개 64bit 워드로 분할
   - 80라운드를 위해 16→80 워드로 메시지 확장

SHA-3


HMAC (Hash-based MAC)

암호화 해시 함수로 MAC(메시지 인증 코드) 구현

설계 목적

HMAC 공식

HMAC(K, M) = H[(K⁺ ⊕ opad) || H(K⁺ ⊕ ipad || M)]

K⁺  : 비밀키를 b비트로 패딩한 값
ipad : 0x36 반복 (내부 패딩)
opad : 0x5C 반복 (외부 패딩)

사용처: TLS, SET 등 인터넷 프로토콜


메시지 인증 방식

단방향 해시함수를 이용한 인증

(a) 대칭키 사용:
    송신: H(M) → 암호화(K) → MAC 전송 + M
    수신: H(수신M) vs 복호화(MAC)

(b) 공개키 사용:
    송신: H(M) → 개인키 서명
    수신: H(수신M) vs 공개키로 검증

해시 vs MAC vs 전자서명

구분 키 필요 목적
해시 X 무결성 검증
MAC (HMAC) 대칭키 무결성 + 인증
전자서명 비대칭키 무결성 + 인증 + 부인방지

관련 개념