HMAC
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
HMAC는 암호학적 해시 함수를 사용하여 MAC(Message Authentication Code) 값을 생성하는 알고리즘이다. HMAC는 메시지의 무결성을 확인하고 인증하는 데 사용되며, SHA-2, SHA-3과 같은 다양한 해시 함수를 기반으로 구현될 수 있다. HMAC는 키와 메시지를 입력으로 받아 해시 함수를 두 번 적용하여 MAC 값을 생성하며, IPsec, SSH, TLS, JSON 웹 토큰 등 다양한 프로토콜에서 사용된다. HMAC의 보안은 사용되는 해시 함수의 강도와 비밀 키의 크기에 따라 달라지며, 길이 연장 공격에 대한 방어 기능을 제공한다.
더 읽어볼만한 페이지
- 메시지 인증 코드 - Poly1305
Poly1305는 16바이트 비밀 키와 메시지를 입력으로 받아 16바이트 해시값을 출력하는 메시지 인증 코드 알고리즘으로, 카터-웨그만 구조에 기반하여 OpenSSH, 구글 Chrome, 안드로이드 등에서 메시지 인증 및 암호화에 활용되며 빠른 계산 속도와 효율적인 작동이 특징이다. - 메시지 인증 코드 - 갈루와/카운터 모드
갈루아/카운터 모드(GCM)는 유한체 산술을 이용해 인증 태그를 생성하는 블록 암호 운용 모드로, 카운터 모드 기반 암호화 방식과 유한체 연산을 결합하여 데이터 기밀성과 변조 방지를 제공하며 GHASH 함수로 인증 태그를 생성하고 하드웨어 가속이 가능하지만, 특정 환경에서 성능 저하나 보안 취약점 문제가 발생할 수 있다. - 해싱 - 해시 충돌
해시 충돌은 해시 함수에서 서로 다른 입력값이 동일한 해시값을 생성하는 현상으로, 데이터 수와 해시 값 범위에 따라 발생 가능성이 높아지며 데이터 무결성 및 보안 상의 문제점을 야기하여 해결 방법이 연구되고 있다. - 해싱 - 유니버설 해싱
유니버설 해싱은 해싱 시 해시 함수를 무작위로 선택하여 해시 충돌 확률을 줄이는 방법으로, 해시 테이블 구현 및 암호학 등에서 활용된다.
| HMAC | |
|---|---|
| 기본 정보 | |
![]() | |
| 종류 | 메시지 인증 코드 |
| 고안자 | 휴고 크라브치크 란 칸티 라피엘 오스트로프스키 |
| 발표 | 1996년 |
| RFC | 2104 |
| 보안 속성 | |
| 보안 유형 | 암호 해시 함수 비밀 키 암호 |
| 기반 | 메시지 인증 코드 |
| 변종 | |
| 변종 종류 | HMAC-MD5 HMAC-SHA1 HMAC-SHA224 HMAC-SHA256 HMAC-SHA384 HMAC-SHA512 |
2. 상세 설명
SHA-2, SHA-3 등의 암호화 해시 함수는 HMAC 연산을 위해 사용할 수 있다. 그 결과로 나타나는 MAC 알고리즘은 HMAC-X이며, 여기서 X는 사용되는 해시 함수를 의미한다(예: HMAC-SHA256 또는 HMAC-SHA3-256). HMAC의 암호화 등급은 기반이 되는 해시 함수의 암호화 등급, 해시 출력의 크기, 키의 크기와 품질에 따라 달라진다.[5]
HMAC는 메시지를 암호화하지 않는다. 대신, 메시지의 암호화 여부에 관계없이 메시지는 HMAC 해시와 함께 전송되어야 한다. 기밀 키를 가진 양측은 스스로 메시지를 다시 해싱하며, 진본일 경우 수신 후 연산되는 해시가 일치하게 된다.
HMAC 구성의 정의와 분석은 1996년 미히르 벨라레(Mihir Bellare), 란 카네티(Ran Canetti), 휴고 크라프치크(Hugo Krawczyk)의 논문에 처음 출간되었으며,[18][1] 이들은 1997년 RFC 2104를 작성하기도 했다. 1996년 논문은 NMAC라는 내포형(nested) 변종도 정의하였다. 연방 정보 처리 표준(FIPS) PUB 198은 HMAC의 이용을 일반화하고 표준화한다.[2] HMAC는 IPsec,[1] SSH, 전송 계층 보안(TLS) 프로토콜, 그리고 JSON 웹 토큰에 사용된다.
MAC는 인증 및 변조 감지 기술의 핵심 알고리즘이다. HMAC 알고리즘은 MAC 값(태그)을 산출할 때 암호학적 해시 함수를 사용한다. 해시 함수로는 SHA-2나 SHA-3 등 임의의 반복형 해시 함수를 적용할 수 있으며, 해시 함수 X를 사용하는 HMAC는 HMAC-X라고 불린다. 예를 들어, SHA256을 사용한 경우에는 HMAC-SHA256이 된다. HMAC의 MAC 값(태그) 길이는 사용되는 해시 함수의 출력 길이와 같다. 예를 들어 HMAC-SHA256의 경우 태그는 256비트이다.
다른 MAC와 마찬가지로 HMAC는 암호화 기능을 갖지 않는다. 태그는 메시지(또는 암호화된 메시지여도 좋다)와 함께 전송된다. 비밀 키를 공유하는 수신자는 받은 메시지와 비밀 키로부터 HMAC 알고리즘을 사용하여 MAC 값을 다시 계산하고, 전송된 태그와 같은지 확인함으로써, 받은 메시지가 같은 키를 공유하는 사람으로부터 전송되었음을 확인할 수 있다.
HMAC는 두 번의 해시 계산을 수행한다. 비밀 키를 사용하여 내부 키와 외부 키, 두 개의 키를 파생시킨다. 첫 번째 해시 알고리즘 수행은 메시지와 내부 키에서 파생된 내부 해시를 생성한다. 두 번째 수행은 내부 해시 결과와 외부 키에서 파생된 최종 HMAC 코드를 생성한다. 따라서 이 알고리즘은 길이 연장 공격에 대해 더 나은 면역력을 제공한다.
반복 해시 함수(예: 메르클-담고르트 구조)는 메시지를 고정 크기의 블록으로 분할하고 이를 압축 함수로 반복한다. 예를 들어, SHA-256은 512비트 블록에서 작동한다. HMAC의 출력 크기는 기본 해시 함수의 출력 크기와 동일하다(예: SHA-256 및 SHA3-512의 경우 각각 256비트 및 512비트).
HMAC는 다음과 같이 정의된다.
:
여기서,
- 는 반복형 해시 함수,
- 는 비밀 키,
- 은 인증 대상 메시지,
- 와 는 상수 패딩(구체적으로는 16진수로 ),
- ""는 비트열의 연결,
- ""는 배타적 논리합을 나타낸다.
반복형 해시 함수는 임의 길이의 입력을 고정 길이 블록으로 분할한 다음 블록마다 압축 함수로 처리하여 해시 값을 구한다. 예를 들어, SHA-256에서는 1블록이 512비트이다. HMAC에서는, 와 가 정확히 1블록이 되도록 비밀 키와 상수 패딩의 길이가 조정된다. 만약 비밀 키 가 1블록보다 짧은 경우에는, 를 맨 앞에 두고 맨 뒤에 0x00을 필요한 만큼 추가하여 블록 길이를 맞춘다. 또한, 상수 패딩은 정확히 1블록이 되도록 0x5c 또는 0x36을 반복한다. 예를 들어, 해시 함수의 블록 길이가 512비트(64옥텟[17])라면, ipad와 opad는 각각 64옥텟의 0x36 또는 0x5c의 연속이다.
3. 정의
SHA-2, SHA-3 등의 암호화 해시 함수는 HMAC 연산을 위해 사용할 수 있다. 그 결과 MAC 알고리즘은 HMAC-X이며, 여기서 X는 사용된 해시 함수를 의미한다(예: HMAC-SHA256, HMAC-SHA3-256). HMAC의 암호화 등급은 기반 해시 함수의 암호화 등급, 해시 출력 크기, 키의 크기와 품질에 따라 달라진다.[5]
HMAC는 메시지를 암호화하지 않는다. 대신 메시지는 암호화 여부에 관계없이 HMAC 해시와 함께 전송되어야 한다. 기밀 키를 가진 당사자는 메시지를 직접 해싱하며, 원본일 경우 수신 후 연산된 해시가 일치하게 된다.
HMAC 구성의 정의와 분석은 1996년 미히르 벨라레(Mihir Bellare), 란 카네티(Ran Canetti), 휴고 크라프치크(Hugo Krawczyk)의 논문에 처음 출간되었으며,[18][1] 이들은 1997년 RFC 2104를 작성하기도 했다. 1996년 논문은 NMAC라는 내포형(nested) 변종도 정의했다. FIPS PUB 198은 HMAC의 이용을 일반화하고 표준화한다.[2] HMAC는 IPsec,[1] SSH, TLS 프로토콜, JSON 웹 토큰에 사용된다.
RFC 2104에 따른 HMAC 정의는 다음과 같다.
:
여기서
: H는 암호화 해시 함수이다.
: m은 인증 대상 메시지이다.
: K는 기밀 키이다.
: 는 기밀 키 K에서 파생된 블록 크기 키이다.
: ||는 문자열 연결을 의미한다.
: ⊕는 비트 배타적 논리합(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[3] |
| SHA3-224 | 144 | 28 |
| SHA3-256 | 136 | 32 |
| SHA3-384 | 104 | 48 |
| SHA3-512 | 72 | 64[4] |
MAC는 인증 및 변조 감지 기술의 핵심 알고리즘이다. HMAC 알고리즘은 MAC 값(태그) 산출에 암호학적 해시 함수를 사용한다. 해시 함수로는 SHA-2, SHA-3 등 임의의 반복형 해시 함수를 적용할 수 있으며, 해시 함수 X를 사용하는 HMAC는 HMAC-X라고 불린다. (예: SHA256을 사용한 경우 HMAC-SHA256).
HMAC의 MAC 값(태그) 길이는 사용되는 해시 함수의 출력 길이와 같다. (예: HMAC-SHA256의 경우 태그는 256비트).
다른 MAC와 마찬가지로 HMAC는 암호화 기능이 없다. 태그는 메시지(암호화된 메시지여도 무관)와 함께 전송된다. 비밀 키를 공유하는 수신자는 받은 메시지와 비밀 키로 HMAC 알고리즘을 사용하여 MAC 값을 다시 계산하고, 전송된 태그와 비교하여, 받은 메시지가 같은 키를 공유하는 사람에게서 전송되었음을 확인한다.
HMAC는 다음과 같이 정의된다.
:
여기서, 는 반복형 해시 함수, 는 비밀 키, 은 인증 대상 메시지, 와 는 상수 패딩(구체적으로는 16진수로 ), ""는 비트열 연결, ""는 배타적 논리합을 나타낸다. 반복형 해시 함수는 임의 길이 입력을 고정 길이 블록으로 분할한 다음, 블록마다 압축 함수로 처리하여 해시 값을 구한다. (예: SHA-256에서 1블록은 512비트). HMAC에서 와 가 정확히 1블록이 되도록 비밀 키와 상수 패딩 길이를 조정한다. 만약 비밀 키 가 1블록보다 짧으면, 를 맨 앞에 두고 맨 뒤에 0x00을 필요한 만큼 추가하여 블록 길이를 맞춘다. 상수 패딩은 정확히 1블록이 되도록 0x5c 또는 0x36을 반복한다. 예를 들어 해시 함수 블록 길이가 512비트(64옥텟[17])라면, ipad와 opad는 각각 64옥텟의 0x36 또는 0x5c의 연속이다.
4. 구현
HMAC 구현은 SHA-2, SHA-3 등의 암호화 해시 함수를 사용하여 수행할 수 있다. 결과로 나타나는 MAC 알고리즘은 HMAC-X라고 하며, 여기서 X는 사용되는 해시 함수를 의미한다(예: HMAC-SHA256, HMAC-SHA3-256). HMAC의 암호화 등급은 기반이 되는 해시 함수의 암호화 등급, 해시 출력 크기, 키의 크기와 품질에 따라 결정된다.[5]
HMAC는 메시지를 암호화하지 않는다. 대신 메시지는 암호화 여부에 관계없이 HMAC 해시와 함께 전송되어야 한다. 기밀 키를 가진 양측은 스스로 메시지를 다시 해싱하며, 원본일 경우 수신 후 연산되는 해시가 일치하게 된다.
HMAC 구성의 정의 및 분석은 1996년 미히르 벨라레(Mihir Bellare), 란 카네티(Ran Canetti), 휴고 크라프치크(Hugo Krawczyk)의 논문에 처음 출판되었으며,[18] 이들은 1997년 RFC 2104를 작성하기도 했다. 1996년 논문은 NMAC라는 내포형(nested) 변종도 정의했다. FIPS PUB 198은 HMAC의 이용을 일반화하고 표준화한다.[2] HMAC는 IPsec,[1] SSH, TLS 프로토콜, 그리고 JSON 웹 토큰에 사용된다.
RFC 2104에서 발췌한 HMAC의 정의는 다음과 같다.
:
여기서,
- H는 암호화 해시 함수이다.
- m은 인증 대상 메시지이다.
- K는 기밀 키이다.
- K'는 기밀 키 K에서 파생된 블록 크기 키이다.
- ||는 문자열 연결을 의미한다.
- ⊕는 비트 배타적 논리합(XOR)을 의미한다.
- opad는 블록 크기의 외부 패딩으로서, 반복되는 0x5c 값 바이트로 구성된다.
- ipad는 블록 크기의 내부 패딩으로서 반복되는 0x36 값 바이트로 구성된다.
다음은 HMAC 구현 방법을 보여주는 의사 코드이다. SHA-1, MD5, RIPEMD-128/160과 같은 해시 함수를 사용할 때 블록 크기는 64바이트이다.[19]
```
function hmac (key, message, hash, blockSize, outputSize)
// 블록 크기 키 계산
block_sized_key = computeBlockSizedKey(key, hash, blockSize)
o_key_pad ← block_sized_key xor [0x5c * blockSize] // 외부 패딩 키
i_key_pad ← block_sized_key xor [0x36 * blockSize] // 내부 패딩 키
return hash(o_key_pad ∥ hash(i_key_pad ∥ message))
function computeBlockSizedKey (key, hash, blockSize)
// ''blockSize''보다 긴 키는 해싱하여 단축됩니다.
if (length(key) > blockSize) then
key = hash(key)
end if
// ''blockSize''보다 짧은 키는 오른쪽에 0으로 패딩하여 ''blockSize''로 패딩됩니다.
if (length(key) < blockSize) then
return Pad(key, blockSize) // 키를 0으로 패딩하여 ''blockSize''바이트로 만듭니다.
end if
return key
```
HMAC는 다음과 같이 정의된다.
:
여기서 는 반복형 해시 함수, 는 비밀 키, 은 인증 대상 메시지, 와 는 상수 패딩(구체적으로는 16진수로 ), ""는 비트열의 연결, ""는 배타적 논리합을 나타낸다.
반복형 해시 함수는 임의 길이의 입력을 고정 길이 블록으로 분할한 다음 블록마다 압축 함수로 처리하여 해시 값을 구한다. 예를 들어 SHA-256에서는 1블록이 512비트이다. HMAC에서는 와 가 정확히 1블록이 되도록 비밀 키와 상수 패딩의 길이가 조정된다. 만약 비밀 키 가 1블록보다 짧은 경우에는 를 맨 앞에 두고 맨 뒤에 0x00을 필요한 만큼 추가하여 블록 길이를 맞춘다. 상수 패딩은 정확히 1블록이 되도록 0x5c 또는 0x36을 반복한다. 예를 들어 해시 함수의 블록 길이가 512비트(64옥텟[17])라면 ipad와 opad는 각각 64옥텟의 0x36 또는 0x5c의 연속이다.
5. 설계 원칙
HMAC 명세의 설계는 키를 해시 함수와 결합하는 더 간단한 메커니즘에 대한 공격이 존재했기 때문에 동기 부여를 받았다. 예를 들어, MAC = '''H'''(''key'' ∥ ''message'')와 같이 HMAC과 동일한 보안을 달성할 수 있다고 가정할 수 있다. 그러나 이 방법은 심각한 결함을 가지고 있다. 대부분의 해시 함수를 사용하면 키를 알지 못하고 메시지에 데이터를 추가하여 다른 유효한 MAC을 얻는 것이 쉽다("길이 연장 공격"). 대안으로 MAC = '''H'''(''message'' ∥ ''key'')를 사용하여 키를 추가하면 (키가 없는) 해시 함수에서 충돌을 찾을 수 있는 공격자가 MAC에서 충돌을 일으킨다는 문제가 발생한다. MAC = '''H'''(''key'' ∥ ''message'' ∥ ''key'')를 사용하는 것이 더 낫지만, 여러 보안 논문에서 서로 다른 두 개의 키를 사용하는 경우에도 이 접근 방식의 취약성을 제안했다.[5][6][7]
현재 HMAC 명세에 대해 알려진 연장 공격은 없다. HMAC 명세는 '''H'''(''key'' ∥ '''H'''(''key'' ∥ ''message''))로 정의되는데, 이는 해시 함수의 외부 적용이 내부 해시의 중간 결과를 마스킹하기 때문이다. ''ipad''와 ''opad''의 값은 알고리즘의 보안에 중요하지 않지만, 서로 큰 해밍 거리를 갖도록 정의되어 내부 및 외부 키가 공유하는 비트 수가 적다.
NIST가 SHA-3 경쟁 우승자로 선택한 Keccak 해시 함수는 이러한 중첩 접근 방식이 필요하지 않으며, 길이 연장 공격에 취약하지 않기 때문에 키를 메시지에 단순히 앞에 추가하여 MAC을 생성하는 데 사용할 수 있다.[8]
MAC는 인증 및 변조 감지 기술의 핵심 알고리즘이다. HMAC 알고리즘은 MAC 값(태그)의 산출에 암호학적 해시 함수를 사용한다. 해시 함수로는 SHA-2나 SHA-3 등 임의의 반복형 해시 함수를 적용할 수 있으며, 해시 함수 X를 사용하는 HMAC는 HMAC-X라고 불린다. 예를 들어, SHA256을 사용한 경우에는 HMAC-SHA256이 된다.
HMAC의 MAC 값(태그)의 길이는 사용되는 해시 함수의 출력 길이와 같다. 예를 들어 HMAC-SHA256의 경우 태그는 256비트이다.
다른 MAC와 마찬가지로 HMAC는 암호화 기능을 갖지 않는다. 태그는 메시지(또는 암호화된 메시지여도 좋다)와 함께 전송된다. 비밀 키를 공유하는 수신자는 받은 메시지와 비밀 키로부터 HMAC 알고리즘을 사용하여 MAC 값을 다시 계산하고, 전송된 태그와 같은지 확인함으로써, 받은 메시지가 같은 키를 공유하는 사람으로부터 전송되었음을 확인할 수 있다.
6. 보안
SHA-2, SHA-3 등의 암호화 해시 함수는 HMAC 연산에 사용될 수 있으며, 그 결과 MAC 알고리즘은 HMAC-X로 불린다. (여기서 X는 사용된 해시 함수를 의미한다. 예: HMAC-SHA256, HMAC-SHA3-256) HMAC의 암호화 등급은 기반이 되는 해시 함수의 암호화 등급, 해시 출력의 크기, 키의 크기와 품질에 따라 달라진다.[5]
HMAC는 메시지를 암호화하지 않는다. 대신 메시지는 암호화 여부에 관계없이 HMAC 해시와 함께 전송되어야 한다. 기밀 키를 가진 양측은 메시지를 다시 해싱하며, 만약 메시지가 원본이면 수신 후 연산되는 해시가 일치하게 된다.
HMAC 구조의 정의와 분석은 1996년 미히르 벨라레(Mihir Bellare), 란 카네티(Ran Canetti), 휴고 크라프치크(Hugo Krawczyk)의 논문에서 처음 출판되었으며,[18][5][1] 이들은 1997년에 RFC 2104를 작성하기도 했다. 1996년 논문은 NMAC라는 내포형(nested) 변종도 정의했다. 연방 정보 처리 표준(FIPS) PUB 198은 HMAC의 이용을 일반화하고 표준화한다.[2] HMAC는 IPsec,[1] SSH, 전송 계층 보안(TLS) 프로토콜, JSON 웹 토큰 등에서 사용된다.
HMAC는 해시 계산을 두 번 수행한다. 비밀 키를 사용하여 내부 키와 외부 키, 두 개의 키를 파생시킨다. 첫 번째 해시 알고리즘 수행은 메시지와 내부 키에서 파생된 내부 해시를 생성한다. 두 번째 수행은 내부 해시 결과와 외부 키에서 파생된 최종 HMAC 코드를 생성한다. 이 알고리즘은 길이 연장 공격에 대해 더 나은 면역력을 제공한다.
반복 해시 함수(예: 메르클-담고르트 구조)는 메시지를 고정 크기의 블록으로 분할하고 이를 압축 함수로 반복한다. 예를 들어, SHA-256은 512비트 블록에서 작동한다. HMAC의 출력 크기는 기본 해시 함수의 출력 크기와 동일하다. (예: SHA-256 및 SHA3-512의 경우 각각 256비트 및 512비트)
HMAC의 암호 강도는 사용되는 비밀 키의 크기와 기본 해시 함수의 보안에 따라 달라진다. HMAC 구성의 보안은 사용된 해시 함수의 보안 속성과 직접 관련이 있음이 입증되었다. HMAC에 대한 가장 일반적인 공격은 비밀 키를 알아내기 위한 무차별 대입 공격이다. HMAC는 기본 해싱 알고리즘 단독으로 사용하는 것보다 충돌의 영향을 훨씬 덜 받는다.[1][9][10]
특히 미히르 벨라레(Mihir Bellare)는 압축 함수가 PRF라는 단독 가정하에 HMAC가 의사 난수 함수(PRF)임을 증명했다.[11] 따라서 HMAC-MD5는 MD5에서 발견된 것과 동일한 약점을 겪지 않는다.
RFC 2104는 "''B'' 바이트보다 긴 키는 먼저 ''H''를 사용하여 해시되어야 한다"고 요구하며, 이는 혼란스러운 의사 충돌로 이어진다. 키가 해시 블록 크기(예: SHA-1의 경우 64바이트)보다 긴 경우 HMAC(k, m)는 HMAC(H(k), m)로 계산된다. 이 속성은 암호 해싱 시나리오에서 HMAC의 잠재적인 약점으로 제기되기도 한다. 긴 ASCII 문자열과 무작위 값을 찾아 해시가 ASCII 문자열이 되고 두 값 모두 동일한 HMAC 출력을 생성한다는 것이 입증되었다.[12][13][14]
2006년, 김종성, 알렉스 비류코프, 바르트 프레넬, 홍석희는 MD5 및 SHA-1의 축소된 버전 또는 HAVAL, MD4, SHA-0의 전체 버전을 랜덤 함수 또는 랜덤 함수를 사용한 HMAC와 구별하는 방법을 보여주었다. 차등 구분자는 공격자가 HMAC에 대한 위조 공격을 고안할 수 있도록 한다. 또한, 차등 및 직사각형 구분자는 두 번째 사전 이미지 공격으로 이어질 수 있다. MD4의 전체 버전을 사용한 HMAC는 이 지식을 통해 위조될 수 있다. 이러한 공격은 HMAC의 보안 증명과 모순되지 않지만 기존 암호화 해시 함수를 기반으로 HMAC에 대한 통찰력을 제공한다.[15]
2009년, 왕샤오윈 외 연구진은 관련 키를 사용하지 않고 HMAC-MD5에 대한 구분 공격을 제시했다. 297개의 쿼리로 확률 0.87로 MD5를 사용한 HMAC 인스턴스화와 랜덤 함수를 사용한 인스턴스화를 구별할 수 있다.[16]
2011년에는 MD5 및 HMAC-MD5의 보안 고려 사항을 요약하는 정보 RFC 6151이 발표되었다. HMAC-MD5의 경우, RFC는 MD5 해시 함수 자체의 보안이 심각하게 손상되었지만, 현재 알려진 ''"HMAC-MD5에 대한 공격은 메시지 인증 코드로 사용될 때 실질적인 취약성을 나타내지 않는 것 같다"'라고 요약하고 있다. 그러나 또한 ''"새로운 프로토콜 설계의 경우 HMAC-MD5를 포함하는 암호화 제품군을 포함해서는 안 된다"'라고 덧붙였다.
2011년 5월, SHA 기반 HMAC에 대한 추상 이론과 소스 코드를 자세히 설명하는 RFC 6234가 발표되었다.
7. 예시
다음은 8비트 ASCII 또는 UTF-8 인코딩을 사용하는 경우의 HMAC 값 예시이다.
| 해시 함수 | 입력 | HMAC 값 (16진수) |
|---|---|---|
| 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 |
| HMAC_SHA512 | "key", "The quick brown fox jumps over the lazy dog" | b42af09057bac1e2d41708e48a902e09b5ff7f12ab428a4fe86653c73dd248fb82f948a549f7b791a5b41915ee4d1ec3935357e4e2317250d0372afa2ebeeb3a |
참조
[1]
논문
Message Authentication using Hash Functions—The HMAC Construction
https://cseweb.ucsd.[...]
1996
[2]
논문
FIPS 198-1: The Keyed-Hash Message Authentication Code (HMAC)
https://csrc.nist.go[...]
2008-07-16
[3]
웹사이트
FIPS 180-2 with Change Notice 1
https://csrc.nist.go[...]
[4]
논문
SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions
https://www.nist.gov[...]
2015-08-04
[5]
웹사이트
Keying Hash Functions for Message Authentication
https://cseweb.ucsd.[...]
[6]
논문
MDx-MAC and Building Fast MACs from Hash Functions
[7]
논문
On the Security of Two MAC Algorithms
[8]
웹사이트
Keccak Team – Design and security
https://keccak.team/[...]
2019-10-31
[9]
웹사이트
SHA-1 Broken
http://www.schneier.[...]
2009-01-09
[10]
간행물
RFC 2104
[11]
conference
New Proofs for NMAC and HMAC: Security without Collision-Resistance
https://eprint.iacr.[...]
2021-12-15
[12]
웹사이트
PBKDF2+HMAC hash collisions explained · Mathias Bynens
https://mathiasbynen[...]
2019-08-07
[13]
웹사이트
Aaron Toponce : Breaking HMAC
https://pthree.org/2[...]
2019-08-07
[14]
웹사이트
RFC 2104 Errata Held for Document Update · Erdem Memisyazici
https://www.rfc-edit[...]
2016-09-23
[15]
논문
On the Security of HMAC and NMAC Based on HAVAL, MD4, MD5, SHA-0 and SHA-1
http://eprint.iacr.o[...]
Springer-Verlag
[16]
논문
Cryptanalysis on HMAC/NMAC-MD5 and MD5-MAC
https://www.iacr.org[...]
2015-06-15
[17]
IETF RFC
2104
[18]
저널 인용
Keying Hash Functions for Message Authentication
[19]
IETF RFC
HMAC: Keyed-Hashing for Message Authentication
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com
