HMAC

HMAC-SHA1 생성

암호학에서 HMAC(keyed-hash message authentication code, hash-based message authentication code)는 암호화 해시 함수와 기밀 암호화 키를 수반하는 특정한 유형의 메시지 인증 코드(MAC)이다. 여느 MAC처럼 메시지의 데이터 무결성과 진본 확인을 동시에 수행하기 위해 사용할 수 있다.

상세 설명

SHA-2, SHA-3 등의 암호화 해시 함수는 HMAC 연산을 위해 사용할 수 있다. 그 결과가 되는 MAC 알고리즘은 HMAC-X이며 여기서 X는 사용이 되는 해시 함수(예: HMAC-SHA256 또는 HMAC-SHA3-256)를 의미한다. HMAC의 암호화 등급은 그 기반이 되는 해시 함수의 암호화 등급, 해시 출력의 크기, 키의 크기와 품질에 따라 달라진다.

HMAC는 메시지를 암호화하지 않는다. 그 대신, 메시지의 암호화 여부에 관계 없이 메시지는 HMAC 해시와 함께 송신되어야 한다. 기밀 키를 가진 쌍방은 스스로가 다시 메시지를 해싱하게 되며 진본인 경우 수신 후 연산되는 해시가 일치하게 된다.

HMAC 구성의 정의와 분석은 1996년 Mihir Bellare, Ran Canetti, and Hugo Krawczyk의 논문에 처음 출간되었으며[1] 이들은 1997년 RFC 2104를 작성하기도 했다. 또, 1996년 논문은 NMAC라는 내포형(nested) 변종을 정의하였다. FIPS PUB 198은 HMAC의 이용을 일반화하고 표준화한다. HMAC는 IPsec, SSH, TLS 프로토콜, 그리고 JSON 웹 토큰에 사용된다.

정의

이 정의는 RFC 2104에서 발췌한 것이다:

HMAC ( K , m ) = H ( ( K o p a d ) H ( ( K i p a d ) m ) ) K = { H ( K ) K  is larger than block size K otherwise {\displaystyle {\begin{aligned}\operatorname {HMAC} (K,m)&=\operatorname {H} {\Bigl (}{\bigl (}K'\oplus opad{\bigr )}\parallel \operatorname {H} {\bigl (}\left(K'\oplus ipad\right)\parallel m{\bigr )}{\Bigr )}\\K'&={\begin{cases}\operatorname {H} \left(K\right)&K{\text{ is larger than block size}}\\K&{\text{otherwise}}\end{cases}}\end{aligned}}}

여기서

H는 암호화 해시 함수이다
m은 인증 대상 메시지이다
K는 기밀 키이다
K'는 기밀 키 K에서 파생된 블록 크기 키이다
||는 문자열 연결을 의미한다
⊕는 비트 배타적 논리합(XOR)을 의미한다
opad는 블록 크기의 외부 패딩으로서, 반복되는 0x5c 값 바이트로 구성된다
ipad는 블록 크기의 내부 패딩으로서 반복되는 0x36 값 바이트로 구성된다

구현

다음 의사코드는 HMAC가 어떻게 구현될 수 있는지를 증명한다. 다음 해시 함수 중 하나를 사용할 때 블록크기는 64바이트이다: SHA-1, MD5, RIPEMD-128/160.[2]

function hmac is
    input:
        key:        Bytes    // Array of bytes
        message:    Bytes    // Array of bytes to be hashed
        hash:       Function // The hash function to use (e.g. SHA-1)
        blockSize:  Integer  // The block size of the hash function (e.g. 64 bytes for SHA-1)
        outputSize: Integer  // The output size of the hash function (e.g. 20 bytes for SHA-1)
    // Keys longer than blockSize are shortened by hashing them
    if (length(key) > blockSize) then
        key ← hash(key) // key is outputSize bytes long
    // Keys shorter than blockSize are padded to blockSize by padding with zeros on the right
    if (length(key) < blockSize) then
        key ← Pad(key, blockSize) // Pad key with zeros to make it blockSize bytes long
    o_key_pad ← key xor [0x5c * blockSize]   // Outer padded key
    i_key_pad ← key xor [0x36 * blockSize]   // Inner padded key
    return hash(o_key_pad ∥ hash(i_key_pad ∥ message))

예시

다음은 8비트 ASCII 또는 UTF-8 인코딩 사용을 상정한, 일부 비어있지 않은 HMAC 값이다:

HMAC_MD5("key", "The quick brown fox jumps over the lazy dog")    = 80070713463e7749b90c2dc24911e275
HMAC_SHA1("key", "The quick brown fox jumps over the lazy dog")   = de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9
HMAC_SHA256("key", "The quick brown fox jumps over the lazy dog") = f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8

각주

  1. Bellare, Mihir; Canetti, Ran; Krawczyk, Hugo (1996). “Keying Hash Functions for Message Authentication”: 1–15. CiteSeerX 10.1.1.134.8430. 
  2. "Definition of HMAC". HMAC: Keyed-Hashing for Message Authentication. sec. 2. RFC 2104. https://tools.ietf.org/html/rfc2104#section-2. 
참고 자료
  • Mihir Bellare, Ran Canetti and Hugo Krawczyk, Keying Hash Functions for Message Authentication, en:CRYPTO 1996, pp. 1–15 (PS or PDF) Archived 2009년 5월 9일 - 웨이백 머신.
  • Mihir Bellare, Ran Canetti and Hugo Krawczyk, Message authentication using hash functions: The HMAC construction, CryptoBytes 2(1), Spring 1996 (PS or PDF) Archived 2009년 5월 9일 - 웨이백 머신.

외부 링크

  • RFC2104
  • Online HMAC Generator / Tester Tool
  • FIPS PUB 198-1, The Keyed-Hash Message Authentication Code (HMAC)
  • C HMAC implementation
  • Python HMAC implementation
  • Java implementation
  • v
  • t
  • e
  • 목록
  • 비교
  • 알려진 공격
공통 함수
SHA-3 결승전 출전자
기타 함수
  • 큐브해시
  • ECOH
  • FSB
  • GOST
  • HAS-160
  • HAVAL
  • Kupyna
  • LM 해시
  • LSH
  • MD2
  • MD4
  • MD6
  • MDC-2
  • N-Hash
  • RIPEMD
  • RadioGatún
  • SWIFFT
  • Snefru
  • Streebog
  • 타이거
  • VSH
  • 월풀
키 유도 함수
MAC 함수
  • DAA
  • CBC-MAC
  • GMAC
  • HMAC
  • NMAC
  • OMAC/CMAC
  • PMAC
  • VMAC
  • UMAC
  • Poly1305
  • SipHash
인증 암호화 방식
  • CCM
  • CWC
  • EAX
  • GCM
  • IAPM
  • OCB
공격설계
표준화
  • CRYPTREC
  • NESSIE
  • NIST 해시 함수 대회
활용