암호학적 해시 함수(Cryptographic Hash Function), MAC(Message Authentication Code) - HMAC, CMAC
해시 함수
- 가변 길이 입력 -> 고정 길이 출력
- 적은 입력 값 변화 -> 완전히 다른 출력값
- 단방향 함수 (One-way function)
빠른 검색을 위한 인덱싱으로 사용
- 충돌 가능성 있음
- Chaining 기법으로 보완
파일 무결성 검증에 사용
암호학적 해시 함수
h(M) = y
- 암호학적 해시 함수 h에 M을 입력하면 해시 값 y 출력
- 부분적 병렬 처리 가능
특성
- 역상 저항성
- 해시 값 y를 이용해 입력 값 M 계산 불가
- == h(M) = y인 y가 주어졌을 때 M을 도출하기 어려움
- 제2 역상 저항성
- 입력값 M, 해시값 y를 이용해 동일한 해시값 y를 출력하는 입력값 M'을 계산할 수 없음
- == h(M) = y일때 동일한 해시값 y를 갖는 M'을 도출하기 어려움
- 충돌 저항성
- 동일한 해시값 y를 갖는 서로 다른 입력 값 2개(M, M')를 계산할 수 없음
- == 동일한 해시 값을 갖는 임의의 서로 다른 입력값을 도출하기 어려움
범위
역상 저항성 > 제2 역상 저항성 > 충돌 저항성
암호학적 해시함수 용도
패스워드 저장
- 솔트값 더해서 해시 돌려서 저장하기
메시지(데이터) 무결성
- MDC(Modification Detection Code), 메시지 해시 돌리고 변조에 강한 채널로 전송.. * 키 안 씀
MAC (Message Authentication Code)
- 메시지에 대한 무결성 강화(변조확인)
- 비밀키와 메시지 M을 이용하여 고정 길이 인증값을 출력
- 수신자와 송신자가 소유한 비밀키를 사용
- 메시지 인증 -> 송신자 확인 가능
HMAC(Hash based MAC)
- 암호학적 해시 함수 기반의 MAC
- 2번의 해시 연산 수행
* n: HMAC의 크기
1. 비밀키 준비
- 최소 n비트 이상 (해시함수 출력 길이)
- 키가 해시 블록 크기(b비트)보다 짧으면 패딩
2. ipad, opad
ipad = 00110110 시퀀스 (0x36을 b 바이트만큼 반복)
opad = 01011100 시퀀스 (0x5C를 b 바이트만큼 반복)
3. 연산
1. 내부 해시
Inner = H( (K ⊕ ipad) || M )
- b비트 패딩된 키랑 ipad XOR하고, 메시지 앞에다가 붙이고, 해시
2. 외부 해시
HMAC(K, M) = H( (K ⊕ opad) || Inner )
- inner 결과(intermediate HMAC)를 b비트로 패딩
- b비트 패딩된 키랑 opad XOR, inner결과 이어붙이고, 해시
- n비트짜리 해시 결과
CMAC (Ciper based MAC)
- 블록 암호 기반의 MAC
- 블록암호 CBC와 유사
- 각 메시지 블록마다 이전 암호문 XOR하고 키를 써서 인크립션
- 왼쪽부터 n비트 선택 -> n-bit CMAC