HMAC란?

해시 함수와 대칭 키를 사용하는 메시지 인증 코드 방식. 키로부터 만든 두 값 K ⊕ ipad와 K ⊕ opad를 사용하여, HMAC(K, m) = H((K ⊕ opad) ‖ H((K ⊕ ipad) ‖ m))으로 해시 함수를 2회 사용해 계산한다. 단순히 키와 메시지를 이어서 해시하는 방식과 달리, SHA-256 같은 Merkle–Damgård 구조의 해시 함수를 사용해도 길이 확장 공격을 받지 않는다. RFC 2104로 규정되었으며, TLS, IPsec, JWT, 키 유도 함수 HKDF 등에서 널리 사용된다.

일본어 명칭: HMAC

HMAC은(는) 암호 기술의 기초와 응용, 정보 보안 기초 등 2개 분야의 연습 문제 4개에 나와요.

분야: 암호 기술의 기초와 응용

도전해 보기: HMAC 관련 문제

메시지 인증 코드(MAC)와 디지털 서명을 비교한 설명으로 올바른 것은?

  1. AMAC은 공개 키로 누구나 검증할 수 있으므로 부인 방지 효과가 디지털 서명보다 강하다
  2. BMAC은 송신자와 수신자가 공유하는 대칭 키로 만들므로 변조 검출은 할 수 있지만, 수신자도 같은 MAC을 만들 수 있어 제3자에게 송신자가 만들었음을 증명하는 부인 방지에는 사용할 수 없다
  3. CMAC은 키를 사용하지 않고 해시값을 계산할 뿐이므로, 공격자가 메시지를 바꾼 뒤 MAC을 다시 계산해도 수신자는 알아챌 수 있다
정답과 해설 보기

정답: B. MAC은 송신자와 수신자가 공유하는 대칭 키로 만들므로 변조 검출은 할 수 있지만, 수신자도 같은 MAC을 만들 수 있어 제3자에게 송신자가 만들었음을 증명하는 부인 방지에는 사용할 수 없다

메시지 인증 코드(MAC)는 메시지와 대칭 키로 계산하는 짧은 값으로, 해시 함수를 사용하는 HMAC이 자주 쓰입니다. 수신자는 같은 키로 다시 계산하여 비교하고, 일치하면 키를 아는 상대가 보냈으며 도중에 변조되지 않았음을 알 수 있습니다. 키를 모르는 공격자는 바꾼 메시지에 맞는 올바른 MAC을 만들 수 없습니다. 다만 같은 키를 수신자도 가지고 있으므로 수신자도 MAC을 만들 수 있습니다. 그래서 수신자가 제3자에게 '이것은 송신자가 만든 것이다'라고 증명할 수 없으며, 부인 방지가 되지 않습니다. 디지털 서명은 송신자의 개인 키로만 만들 수 있고 공개 키로 누구나 검증할 수 있으므로 부인 방지에 사용할 수 있습니다. 한편 MAC은 계산이 가벼워 통신의 패킷 하나하나의 변조 검출 등 당사자끼리의 확인에 널리 사용됩니다. 키를 사용하지 않는 단순한 해시값은 공격자가 메시지와 함께 다시 계산할 수 있으므로 의도적인 변조의 검출에는 사용할 수 없습니다.

비밀 키 K와 메시지 m을 이은 값의 해시값 SHA-256(K ‖ m)을 변조 검출용 태그로 사용하는 것은 위험하다고 여겨진다. 그 이유로 올바른 것은?

  1. A태그와 입력의 길이를 알면, K를 모르더라도 m 뒤에 데이터를 덧붙인 메시지의 태그를 계산할 수 있기 때문에
  2. BSHA-256의 출력으로부터 입력의 앞에 둔 키 K 부분만을 역산하는 효율적인 방법이 발견되었기 때문에
  3. C키 K를 메시지 앞에 두면 입력이 길어져, SHA-256에서는 충돌이 발견되기 쉬워지기 때문에
정답과 해설 보기

정답: A. 태그와 입력의 길이를 알면, K를 모르더라도 m 뒤에 데이터를 덧붙인 메시지의 태그를 계산할 수 있기 때문에

SHA-256 같은 Merkle–Damgård 구조의 해시 함수에서는 출력되는 해시값이 마지막 블록을 처리한 후의 내부 상태 그 자체입니다. 그래서 공격자는 태그를 내부 상태로 삼아 계산을 이어 가, K ‖ m에 정해진 형태의 패딩과 임의의 데이터를 붙인 메시지의 해시값을 K를 모른 채 계산할 수 있습니다(길이 확장 공격). HMAC은 키로부터 만든 두 값을 사용하여, 안쪽 해시값을 한 번 더 키와 함께 해시하는 구조로 이 공격을 막습니다. SHA-3은 구조상 이 공격을 받지 않으므로, 키를 앞에 붙이기만 하는 KMAC이라는 방식도 표준화되어 있습니다.

해설 속 HMAC

HMAC이(가) 나오는 문제 (4)

  1. 메시지 인증 코드(MAC)와 디지털 서명을 비교한 설명으로 올바른 것은?
  2. 비밀 키 K와 메시지 m을 이은 값의 해시값 SHA-256(K ‖ m)을 변조 검출용 태그로 사용하는 것은 위험하다고 여겨진다. 그 이유로 올바른 것은?
  3. TLS 1.3 등의 프로토콜에서 ECDHE 키 교환으로 얻은 공유 비밀을 그대로 암호 키로 사용하지 않고, HKDF 같은 키 유도 함수(KDF)를 거쳐 키를 만드는 이유로 적절한 것은?
  4. TLS 1.3의 암호 스위트 TLS_AES_128_GCM_SHA256이 지정하는 것의 조합으로 올바른 것은?

관련 용어

해시 함수(Hash Function) TLS 디피-헬먼 키 교환(Diffie-Hellman Key Exchange) 메시지 인증 코드(Message Authentication Code) 디지털 서명(Digital Signature) 정보 엔트로피(Information Entropy) AES 인증 암호화(AEAD) RSA 암호(RSA Cryptosystem) 논스(Nonce)

용어집으로 돌아가기