HMAC
HMAC(K, m) = H((K′ ⊕ opad) ‖ H((K′ ⊕ ipad) ‖ m)) · H = SHA-256
키 K
메시지 m길이 제한 없음
HMAC
SHA-256
태그32바이트
96ccdc669ce3944c1f8869c2cd0970ce174480d064fc46e7501b73f21e90ae34HMAC 안에서 K와 m이 태그가 되기까지
- 1
키를 바이트로 바꾸기
- 2
키를 64바이트로 맞추기
K 바이트22바이트↑ 1단계 결과ec9ab0eba6aceb81bceba6ac2debb984ebb080ed82a464바이트로 맞춤길면 SHA-256, 짧으면 0 채움K′64바이트ec9ab0eba6aceb81bceba6ac2debb984ebb080ed82a4000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - 3
내부 키 만들기
ipad64바이트36363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636K′64바이트↑ 2단계 결과ec9ab0eba6aceb81bceba6ac2debb984ebb080ed82a4000000000000000000000000000000000000000000000000000000000000000000000000000000000000K′ ⊕ ipad64바이트daac86dd909addb78add909a1bdd8fb2dd86b6dbb492363636363636363636363636363636363636363636363636363636363636363636363636363636363636 - 4
외부 키 만들기
opad64바이트5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5cK′64바이트↑ 2단계 결과ec9ab0eba6aceb81bceba6ac2debb984ebb080ed82a4000000000000000000000000000000000000000000000000000000000000000000000000000000000000K′ ⊕ opad64바이트b0c6ecb7faf0b7dde0b7faf071b7e5d8b7ecdcb1def85c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c - 5
내부 해시: 내부 키 뒤에 메시지를 붙여 해시
K′ ⊕ ipad64바이트↑ 3단계 결과daac86dd909addb78add909a1bdd8fb2dd86b6dbb492363636363636363636363636363636363636363636363636363636363636363636363636363636363636m길이 제한 없음철수에게 10,000원 송금이어 붙여 해시내부 해시32바이트e8099387030917db8553032a91944b5d26dcc6c5be903d8c7d03b0b70003a80f - 6
외부 해시: 외부 키 뒤에 내부 해시를 붙여 해시
K′ ⊕ opad64바이트↑ 4단계 결과b0c6ecb7faf0b7dde0b7faf071b7e5d8b7ecdcb1def85c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c내부 해시32바이트↑ 5단계 결과e8099387030917db8553032a91944b5d26dcc6c5be903d8c7d03b0b70003a80f이어 붙여 해시태그32바이트96ccdc669ce3944c1f8869c2cd0970ce174480d064fc46e7501b73f21e90ae34
보내는 내용
철수에게 10,000원 송금‖96ccdc669ce3944c1f8869c2cd0970ce174480d064fc46e7501b73f21e90ae34
받는 쪽
키 K
우리끼리-비밀키받은 메시지길이 제한 없음
HMAC
SHA-256
다시 계산한 태그32바이트
96ccdc669ce3944c1f8869c2cd0970ce174480d064fc46e7501b73f21e90ae34✓ 태그가 같음
상수 · 표준이 정해 두어 누구나 같은 값
HMAC-SHA256RFC 2104 · FIPS 198-1
| 기호 | 이름 | 정의 · 출처 | 값 |
|---|---|---|---|
| B | 블록 크기 | SHA-256의 블록 크기 | 64바이트 |
| L | 출력 길이 | SHA-256의 출력 길이 | 32바이트 |
| ipad | 내부 패드 | 0x36을 B번 반복 | 36363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636 |
| opad | 외부 패드 | 0x5c를 B번 반복 | 5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c |
SHA-256FIPS 180-4
| 기호 | 이름 | 정의 · 출처 | 값 |
|---|---|---|---|
| H⁽⁰⁾ | 초기 해시값 (IV) | 처음 8개 소수 2 … 19의 제곱근 소수부 앞 32비트 | 6a09e667bb67ae853c6ef372a54ff53a510e527f9b05688c1f83d9ab5be0cd19 |
| K₀ … K₆₃ | 라운드 상수 | 처음 64개 소수 2 … 311의 세제곱근 소수부 앞 32비트 | 428a2f9871374491b5c0fbcfe9b5dba53956c25b59f111f1923f82a4ab1c5ed5d807aa9812835b01243185be550c7dc372be5d7480deb1fe9bdc06a7c19bf174e49b69c1efbe47860fc19dc6240ca1cc2de92c6f4a7484aa5cb0a9dc76f988da983e5152a831c66db00327c8bf597fc7c6e00bf3d5a7914706ca63511429296727b70a852e1b21384d2c6dfc53380d13650a7354766a0abb81c2c92e92722c85a2bfe8a1a81a664bc24b8b70c76c51a3d192e819d6990624f40e3585106aa07019a4c1161e376c082748774c34b0bcb5391c0cb34ed8aa4a5b9cca4f682e6ff3748f82ee78a5636f84c878148cc7020890befffaa4506cebbef9a3f7c67178f2 |
| 블록 크기 | 압축 함수 한 번에 넣는 크기 | 512비트 (64바이트) | |
| 워드 크기 | 모든 연산의 단위, mod 2³² | 32비트 (4바이트) | |
| 라운드 수 | 블록 하나당 (= K의 개수) | 64 | |
| 출력 길이 | H⁽ᴺ⁾의 8워드 | 256비트 (32바이트) |