HMAC

HMAC
HMAC-SHA1 세대

암호학에서 HMAC(키 해시 메시지 인증 코드 또는 해시 기반 메시지 인증 코드로 확장되는 경우도 있음)는 암호화 해시 함수와 비밀 암호 키를 포함하는 특정 유형의 메시지 인증 코드(MAC)입니다.다른 MAC와 마찬가지로 메시지의 데이터 무결성과 신뢰성을 동시에 확인하기 위해 사용할 수 있습니다.

HMAC는 비대칭 암호 방식을 사용하는 디지털 서명을 사용하는 대신 공유 암호를 사용하여 인증을 제공할 수 있습니다.복잡한 공개인프라스트럭처에 대한 필요성을 해소하기 위해 키 교환을 통신 당사자에게 위임합니다.통신 당사자는 신뢰할 수 있는 채널을 확립하고 사용해야 하며 통신 전에 키에 대해 합의할 책임이 있습니다.

세부 사항

HMAC 계산에는 SHA-2SHA-3 등의 암호화 해시 함수를 사용할 수 있습니다.그 결과 생성되는 MAC 알고리즘은 HMAC-X라고 불립니다.여기서 X는 사용되는 해시 함수(HMAC-SHA256 또는 HMAC-SHA3-512 등)입니다.HMAC의 암호화 강도는 기본 해시 함수의 암호화 강도, 해시 출력 크기 및 키의 크기와 품질에 따라 달라집니다.

HMAC는 해시 계산의 2패스를 사용합니다.개인 키는 먼저 inner와 outer의 두 가지 키를 도출하기 위해 사용됩니다.알고리즘의 첫 번째 패스는 메시지와 내부 키에서 파생된 내부 해시를 생성합니다.두 번째 패스는 내부 해시 결과와 외부 키에서 파생된 최종 HMAC 코드를 생성합니다.따라서 알고리즘은 길이 확장 공격에 대한 내성을 강화합니다.

반복 해시 함수는 메시지를 고정 크기의 블록으로 분할하고 압축 함수로 반복한다.예를 들어 SHA-256은 512비트블록으로 동작합니다.HMAC의 출력 크기는 기본 해시 함수와 동일하지만(예를 들어 SHA-256 및 SHA3-512의 경우 각각 256 및 512비트), 필요에 따라 잘라낼 수 있습니다.

HMAC는 메시지를 암호화하지 않습니다.대신 메시지(암호화 여부)는 HMAC 해시 옆에 전송해야 합니다.개인 키를 가진 당사자는 메시지를 다시 해시하고 메시지가 인증되면 수신된 해시와 계산된 해시가 일치합니다.

HMAC 구조의 정의와 분석은 1996년 Mihir Bellare, Ran Canetti,[1] Hugo Krawczyk의 논문에서 처음 발표되었으며, 그들은 또한 1997년에 RFC 2104를 썼다.1996년 문서에서는 NMAC라고 불리는 네스트된 변종도 정의했습니다.FIPS PUB 198은 HMAC 사용을 일반화하고 표준화합니다.HMAC는 IPsec, SSH TLS 프로토콜 내에서 및 JSON Web 토큰에 사용됩니다.

정의.

이 정의는 RFC 2104에서 발췌한 것입니다.

어디에

H는 암호화 해시 함수입니다.
m은 인증되는 메시지입니다.
K는 비밀키입니다.
K'는 개인 키 K에서 파생된 블록 크기 키입니다. 블록 크기까지 0으로 오른쪽으로 채우거나 먼저 블록 크기 이하로 해시한 다음 0으로 오른쪽으로 채웁니다.
denotes는 연결을 나타냅니다.
denotes는 비트 배타적 또는 (XOR)을 나타냅니다.
opad는 블록 크기의 외부 패딩으로, 0x5c의 값이 매겨진 반복 바이트로 구성됩니다.
ipad는 0x36의 반복 바이트로 구성된 블록 크기의 내부 패딩입니다.
해시함수 H b, 바이트 L, 바이트
MD5 64 16
SHA-1 64 20
SHA-224 64 28
SHA-256 64 32
SHA-512/224 128 28
SHA-512/256 128 32
SHA-384 128 48
SHA-512 128 64
SHA3-224 144 28
SHA3-256 136 32
SHA3-384 104 48
SHA3-512 72 64
out = H( in )
L = length( out )
b = H's internal block length

실행

다음의 의사 코드는, HMAC 의 실장 방법을 나타내고 있습니다.SHA-1, MD5, RIPEMD-128 [2]중 하나의 해시함수를 사용하는 경우 블록사이즈는 512비트(64바이트)가 됩니다.

함수 hmac 입력됨: 키: 바이트 // 바이트 배열 메시지:바이트 // 해시할 바이트 배열:함수 // 사용할 해시 함수(예: SHA-1) blockSize: Integer // 해시 함수의 블록 크기(예: SHA-1의 경우 64바이트) 출력 크기:정수 // 해시 함수의 출력 크기(예: SHA-1의 경우 20바이트) // 블록 크기 키 block_size_key = computeBlockSizeKey(키, 해시, blockSize) o_key_pad ← block_size [0x5c blockSize] // 외부 패딩 키 i_key_pad ← block[x]를 계산합니다.sh(i_key_pad) 함수 computeBlockSizeKey 입력됩니다.key : : Bytes // 바이트 배열:함수 // 사용할 해시 함수(예: SHA-1) blockSize: Integer // 해시 함수의 블록 크기(예: SHA-1의 경우 64바이트) // blockSize보다 긴 는 (길이(키) > blockSize)의 해시의해 단축되며, 키 = 해시(키)보다 짧은 키는 0으로 채워집니다. 오른쪽 if ( length ( key )< block Size ) 후 Pad ( key , block Size ) // 키를 0으로 패드로 하여 block Size 바이트 길이 반환 키

설계 원리

HMAC 사양의 설계는 키를 해시 함수와 결합하기 위한 보다 간단한 메커니즘에 대한 공격이 존재하기 때문입니다.예를 들어 HMAC가 제공하는 것과 동일한 보안을 MAC = H(메시지)로 달성할 수 있다고 가정할 수 있습니다.그러나 이 방법에는 심각한 결함이 있습니다.대부분의 해시함수에서는 키를 몰라도 메시지에 데이터를 추가하여 다른 유효한 MAC(length-extension 공격)를 얻기 쉽습니다.MAC = H(메시지 key키)를 사용하여 키를 추가하는 경우, (키 없이) 해시함수에서 충돌을 검출할 수 있는 공격자가 MAC에서 충돌을 일으키는 문제가 발생합니다(같은 해시를 생성하는2개의 메시지 m1과 m2가 부가된 키가 해시함수에 동일한 시작 조건을 제공하므로 최종적인 문제가 발생합니다).해시는 동일합니다).MAC = H(key key message keykey)를 사용하는 것이 더 낫지만, 다양한 보안 문서에서는 두 개의 다른 키를 사용하는 [1][3][4]경우에도 이 접근 방식의 취약성을 제안하고 있습니다.

현재 HMAC 사양에 대해 알려진 확장 공격은 발견되지 않았습니다.HMAC 사양은 H(key " H(key " H(key " message))로 정의되어 있습니다.이는 해시함수의 외부 어플리케이션이 내부 해시의 중간 결과를 마스킹하기 때문입니다.ipad 및 opad 은 알고리즘의 보안에는 중요하지 않지만 서로 해밍 거리가 커지도록 정의되어 있으므로 내부 키와 외부 키의 공통 비트가 줄어듭니다.HMAC의 보안을 줄이려면 적어도 1비트 [citation needed]내에서 서로 달라야 합니다.

NIST에 의해 SHA-3 경합 우승자로 선정된 Keccak 해시 함수는 이러한 중첩된 접근법이 필요하지 않으며, 길이 확장 [5]공격에 취약하지 않기 때문에 메시지에 키를 추가하는 것만으로 MAC를 생성할 수 있습니다.

보안.

HMAC의 암호화 강도는 사용되는 개인 키의 크기에 따라 달라집니다.HMAC에 대한 가장 일반적인 공격은 비밀키를 폭로하기 위한 무차별적인 공격입니다.HMAC는 기본 해시 알고리즘에 [6][7]비해 충돌의 영향을 크게 받지 않습니다.특히, Mihir Bellare는 압축 함수가 [8]PRF라는 단독 가정 하에 HMAC가 PRF임을 입증했다.따라서 HMAC-MD5는 MD5에서 발견된 것과 같은 취약성에 시달리지 않습니다.

RFC 2104에서는 "B바이트보다 긴 키는 H를 사용하여 최초로 해시된다"고 규정하고 있으며, 이는 혼란스러운 의사 충돌로 이어집니다.키가 해시 블록 크기(SHA-1의 경우 64바이트 등)보다 길면 다음과 같습니다.HMAC(k, m)로 계산된다.HMAC(H(k), m).이 속성은 암호 해시 시나리오에서 HMAC의 약점으로 제기될 수 있습니다. 긴 ASCII 문자열과 ASCII 문자열이 되는 랜덤 값을 찾을 수 있으며 두 값 모두 동일한 HMAC [9][10][11]출력을 생성합니다.

2006년 김종성, 알렉스 비류코프, 바트 프레넬, 석히 홍은 MD5와 SHA-1의 축소판 또는 HAVAL, MD4SHA-0의 풀버전으로 HMAC를 랜덤함수 또는 랜덤함수의 HMAC와 구별하는 방법을 보여 주었다.공격자는 차동 식별자를 사용하여 HMAC에 대한 위조 공격을 계획할 수 있습니다.또, 차분 식별자와 직사각형 식별자는 제2의 프리이미지 공격을 일으킬 수 있습니다.풀버전의 MD4를 탑재한HMAC는 이 지식을 바탕으로 구축될 수 있습니다.이러한 공격은 HMAC의 보안 증명과 모순되지 않지만 기존 암호화 해시 [12]함수를 기반으로 HMAC에 대한 통찰력을 제공합니다.

2009년 왕샤오윤 등은 관련 키를 사용하지 않고 HMAC-MD5에 대한 구별되는 공격을 제시했다.MD5를 사용한HMAC 인스턴스화와 확률 0.[13]87의 2개의 쿼리를 사용하여 랜덤97 함수를 사용한 인스턴스화를 구별할 수 있습니다.

2011년 안내 RFC6151[14]MD5와 HMAC-MD5에 보안 고려 사항들을 요약해 줄. HMAC-MD5을 위해 RFC는 MD5해시 기능 자체의 보안 심각하게 – HMAC-MD5에 현재 알려진 "공격 메시지 authent로 사용 실용적인 취약성을 나타내는 것처럼 보이지 않으면 제대로 발휘되지 못하고 있는 –을 요약 발표되었다.icat그러나 "새로운 프로토콜 설계의 경우 HMAC-MD5를 사용하는 암호 스위트는 포함되지 않아야 한다"고 덧붙였습니다.

2011년 5월에는 SHA 기반의 HMAC에 관한 추상 이론과 소스 코드를 상술한 RFC 6234가 발행되었습니다.

8비트 ASCII 또는 UTF-8 인코딩을 전제로 한HMAC 값은 다음과 같습니다.

HMAC_MD5("key", "빠른 갈색 여우가 게으른 개를 뛰어넘는다") = 80070713463e7749b90c2dc24911e275 HMAC_SHA1("key", "빠른 갈색 여우가 게으른 개를 뛰어넘는다") = de7c985b878a8a8bc8bc8bc8a1a770a770aA256("빠른 갈색 여우는 게으른 개를 뛰어넘는다.빠른 갈색 여우는 게으른 개를 뛰어넘는다", "메시지")= 5597b93a2843078cbb0c920ae41dfe20fe2085e10c67e423cab91adfc319d12

레퍼런스

  1. ^ a b Bellare, Mihir; Canetti, Ran; Krawczyk, Hugo (1996). "Keying Hash Functions for Message Authentication": 1–15. CiteSeerX 10.1.1.134.8430. {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)
  2. ^ "Definition of HMAC". HMAC: Keyed-Hashing for Message Authentication. sec. 2. doi:10.17487/RFC2104. RFC 2104.
  3. ^ Preneel, Bart; van Oorschot, Paul C. (1995). "MDx-MAC and Building Fast MACs from Hash Functions". CiteSeerX 10.1.1.34.3855. {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)
  4. ^ Preneel, Bart; van Oorschot, Paul C. (1995). "On the Security of Two MAC Algorithms". CiteSeerX 10.1.1.42.8908. {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)
  5. ^ Keccak team. "Keccak Team – Design and security". Retrieved 31 October 2019. Unlike SHA-1 and SHA-2, Keccak does not have the length-extension weakness, hence does not need the HMAC nested construction. Instead, MAC computation can be performed by simply prepending the message with the key.
  6. ^ Bruce Schneier (August 2005). "SHA-1 Broken". Retrieved 9 January 2009. although it doesn't affect applications such as HMAC where collisions aren't important
  7. ^ IETF (February 1997). "Security". HMAC: Keyed-Hashing for Message Authentication. sec. 6. doi:10.17487/RFC2104. RFC 2104. Retrieved 3 December 2009. The strongest attack known against HMAC is based on the frequency of collisions for the hash function H ("birthday attack") [PV,BCK2], and is totally impractical for minimally reasonable hash functions.
  8. ^ Bellare, Mihir. "New Proofs for NMAC and HMAC: Security without Collision-Resistance" (PDF). Journal of Cryptology. Retrieved 15 December 2021. This paper proves that HMAC is a PRF under the sole assumption that the compression function is a PRF. This recovers a proof based guarantee since no known attacks compromise the pseudorandomness of the compression function, and it also helps explain the resistance-to-attack that HMAC has shown even when implemented with hash functions whose (weak) collision resistance is compromised.
  9. ^ "PBKDF2+HMAC hash collisions explained · Mathias Bynens". mathiasbynens.be. Retrieved 7 August 2019.
  10. ^ "Aaron Toponce : Breaking HMAC". Retrieved 7 August 2019.
  11. ^ "RFC 2104 Errata Held for Document Update · Erdem Memisyazici". www.rfc-editor.org. Retrieved 23 September 2016.
  12. ^ Jongsung, Kim; Biryukov, Alex; Preneel, Bart; Hong, Seokhie (2006). "On the Security of HMAC and NMAC Based on HAVAL, MD4, MD5, SHA-0 and SHA-1" (PDF). {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)
  13. ^ Wang, Xiaoyun; Yu, Hongbo; Wang, Wei; Zhang, Haina; Zhan, Tao (2009). "Cryptanalysis on HMAC/NMAC-MD5 and MD5-MAC" (PDF). Retrieved 15 June 2015. {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)
  14. ^ "RFC 6151 – Updated Security Considerations for the MD5 Message-Digest and the HMAC-MD5 Algorithms". Internet Engineering Task Force. March 2011. Retrieved 15 June 2015.
메모들
  • Mihir Bellare, Ran Canetti 및 Hugo Krawczyk, 메시지 인증을 위한 키잉 해시 함수, CRYO 1996, 페이지 1~15 (PS 또는 PDF)
  • Mihir Bellare, Ran Canetti 및 Hugo Krawczyk, 해시 함수를 사용한 메시지 인증:HMAC 구성, CryptoBytes 2 (1) 및 1996년 봄(PS 또는 PDF).

외부 링크