HMAC 문서 원본 보기
←
HMAC
둘러보기로 이동
검색으로 이동
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
{{위키데이터 속성 추적}} [[파일:SHAhmac.svg|섬네일|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의 논문에 처음 출간되었으며<ref name="BCK96">{{저널 인용|title=Keying Hash Functions for Message Authentication |pages=1–15 |first1=Mihir |last1=Bellare |authorlink1=Mihir Bellare |first2=Ran |last2=Canetti |first3=Hugo |last3=Krawczyk |year=1996 |citeseerx=10.1.1.134.8430 }}</ref> 이들은 1997년 RFC 2104<nowiki/>를 작성하기도 했다. 또, 1996년 논문은 NMAC라는 내포형(nested) 변종을 정의하였다. [[연장 정보 처리 표준|FIPS]] PUB 198은 HMAC의 이용을 일반화하고 표준화한다. HMAC는 [[IPsec]], [[시큐어 셸|SSH]], [[전송 계층 보안|TLS]] 프로토콜, 그리고 [[JSON 웹 토큰]]에 사용된다. == 정의 == 이 정의는 RFC 2104<nowiki/>에서 발췌한 것이다: :<math>\begin{align} \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{align}</math> 여기서 : H는 암호화 해시 함수이다 : m은 인증 대상 메시지이다 : K는 기밀 키이다 : K{{'}}는 기밀 키 K에서 파생된 블록 크기 키이다 : ||는 [[문자열 연결]]을 의미한다 : ⊕는 비트 [[배타적 논리합]](XOR)을 의미한다 : opad는 블록 크기의 외부 패딩으로서, 반복되는 0x5c 값 바이트로 구성된다 : {{sic|ipad|hide=yes}}는 블록 크기의 내부 패딩으로서 반복되는 0x36 값 바이트로 구성된다 == 구현 == 다음 [[의사코드]]는 HMAC가 어떻게 구현될 수 있는지를 증명한다. 다음 해시 함수 중 하나를 사용할 때 블록크기는 64바이트이다: SHA-1, [[MD5]], RIPEMD-128/160.<ref>{{cite IETF |title=HMAC: Keyed-Hashing for Message Authentication |rfc=2104 |section=2 |sectionname=Definition of HMAC}}</ref> '''{{Font color|blue|function}}''' hmac '''{{Font color|blue|is}}''' '''{{Font color|blue|input:}}''' key: Bytes <span style="color:green">// Array of bytes</span> message: Bytes <span style="color:green">// Array of bytes to be hashed</span> hash: Function <span style="color:green">// The hash function to use (e.g. SHA-1)</span> blockSize: Integer <span style="color:green">// The block size of the hash function (e.g. 64 bytes for SHA-1)</span> outputSize: Integer <span style="color:green">// The output size of the hash function (e.g. 20 bytes for SHA-1)</span> <span style="color:green">// Keys longer than ''blockSize'' are shortened by hashing them</span> '''{{Font color|blue|if}}''' (length(key) > blockSize) '''{{Font color|blue|then}}''' key ← hash(key) <span style="color: green;">// key is ''outputSize'' bytes long</span> <span style="color:green">// Keys shorter than ''blockSize'' are padded to ''blockSize'' by padding with zeros on the right</span> '''{{Font color|blue|if}}''' <span style="color:black">(length(key) < blockSize)</span> '''{{Font color|blue|then}}''' key ← Pad(key, blockSize) <span style="color:green">// Pad key with zeros to make it ''blockSize'' bytes long</span> o_key_pad ← key xor [0x5c * blockSize] <span style="color:green">// Outer padded key</span> i_key_pad ← key xor [0x36 * blockSize] <span style="color:green">// Inner padded key</span> '''{{Font color|blue|return}}''' <span style="color:black">hash(o_key_pad ∥ hash(i_key_pad ∥ message))</span> == 예시 == 다음은 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 <!-- HMAC_SHA512("key", "The quick brown fox jumps over the lazy dog") = b42af09057bac1e2d41708e48a902e09b5ff7f12ab428a4fe86653c73dd248fb82f948a549f7b791a5b41915ee4d1ec3935357e4e2317250d0372afa2ebeeb3a --> == 각주 == {{각주}} ; 참고 자료 {{참고 자료 시작}} * Mihir Bellare, Ran Canetti and Hugo Krawczyk, Keying Hash Functions for Message Authentication, [[:en:CRYPTO]] 1996, pp. 1–15 [http://www-cse.ucsd.edu/users/mihir/papers/hmac.html#kmd5-paper (PS or PDF)] {{웹아카이브|url=https://web.archive.org/web/20090509205612/http://www-cse.ucsd.edu/users/mihir/papers/hmac.html#kmd5-paper}}. * Mihir Bellare, Ran Canetti and Hugo Krawczyk, Message authentication using hash functions: The HMAC construction, ''CryptoBytes'' 2(1), Spring 1996 [http://www-cse.ucsd.edu/users/mihir/papers/hmac.html#hmac-cryptobytes (PS or PDF)] {{웹아카이브|url=https://web.archive.org/web/20090509205612/http://www-cse.ucsd.edu/users/mihir/papers/hmac.html#hmac-cryptobytes}}. {{참고 자료 끝}} == 외부 링크 == * [http://www.ietf.org/rfc/rfc2104.txt RFC2104] * [https://codebeautify.org/hmac-generator Online HMAC Generator / Tester Tool] * [http://csrc.nist.gov/publications/fips/fips198-1/FIPS-198-1_final.pdf FIPS PUB 198-1, ''The Keyed-Hash Message Authentication Code (HMAC)''] * [http://www.ouah.org/ogay/hmac/ C HMAC implementation] * [https://docs.python.org/library/hmac.html Python HMAC implementation] * [http://docs.oracle.com/javase/1.5.0/docs/guide/security/jce/JCERefGuide.html#HmacEx Java implementation] {{암호화 해시}} {{기본정렬:Hmac}} [[분류:메시지 인증 코드]] [[분류:해싱]]
이 문서에서 사용한 틀:
틀:'
(
원본 보기
)
틀:Cite IETF
(
원본 보기
)
틀:Font color
(
원본 보기
)
틀:Sic
(
원본 보기
)
틀:각주
(
원본 보기
)
틀:암호화 해시
(
원본 보기
)
틀:웹아카이브
(
원본 보기
)
틀:위키데이터 속성 추적
(
원본 보기
)
틀:저널 인용
(
원본 보기
)
틀:참고 자료 끝
(
원본 보기
)
틀:참고 자료 시작
(
원본 보기
)
HMAC
문서로 돌아갑니다.
둘러보기 메뉴
개인 도구
로그인
이름공간
문서
토론
한국어
보기
읽기
원본 보기
역사 보기
더 보기
검색
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
특수 문서 목록
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보