HMAC

HMAC(K, m) = H((K′ ⊕ opad) ‖ H((K′ ⊕ ipad) ‖ m)) · H = SHA-256

키 K
메시지 m길이 제한 없음
HMAC
SHA-256
태그32바이트
96ccdc669ce3944c1f8869c2cd0970ce174480d064fc46e7501b73f21e90ae34

HMAC 안에서 K와 m이 태그가 되기까지

  1. 1

    키를 바이트로 바꾸기

    K
    우리끼리-비밀키
    K 바이트22바이트
    ec9ab0eba6aceb81bceba6ac2debb984ebb080ed82a4
  2. 2

    키를 64바이트로 맞추기

    K 바이트22바이트↑ 1단계 결과
    ec9ab0eba6aceb81bceba6ac2debb984ebb080ed82a4
    64바이트로 맞춤
    길면 SHA-256, 짧으면 0 채움
    K′64바이트
    ec9ab0eba6aceb81bceba6ac2debb984ebb080ed82a4000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  3. 3

    내부 키 만들기

    ipad64바이트
    36363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636
    K′64바이트↑ 2단계 결과
    ec9ab0eba6aceb81bceba6ac2debb984ebb080ed82a4000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    K′ ⊕ ipad64바이트
    daac86dd909addb78add909a1bdd8fb2dd86b6dbb492363636363636363636363636363636363636363636363636363636363636363636363636363636363636
  4. 4

    외부 키 만들기

    opad64바이트
    5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c
    K′64바이트↑ 2단계 결과
    ec9ab0eba6aceb81bceba6ac2debb984ebb080ed82a4000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    K′ ⊕ opad64바이트
    b0c6ecb7faf0b7dde0b7faf071b7e5d8b7ecdcb1def85c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c
  5. 5

    내부 해시: 내부 키 뒤에 메시지를 붙여 해시

    K′ ⊕ ipad64바이트↑ 3단계 결과
    daac86dd909addb78add909a1bdd8fb2dd86b6dbb492363636363636363636363636363636363636363636363636363636363636363636363636363636363636
    m길이 제한 없음
    철수에게 10,000원 송금
    이어 붙여 해시
    내부 해시32바이트
    e8099387030917db8553032a91944b5d26dcc6c5be903d8c7d03b0b70003a80f
  6. 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바이트)