원키 MAC
One-key MAC원키 MAC(OMAC)은 CBC-MAC 알고리즘과 매우 유사한 블록 암호로 구성된 메시지 인증 코드다.
공식적으로 두 개의 OMAC 알고리즘(OMAC1과 OMAC2)이 있는데, 이 두 알고리즘은 작은 트위크를 제외하고는 모두 본질적으로 동일하다. OMAC1은 CMAC와 동등한 것으로, 2005년 5월에 NIST 권고안이 되었다.
그것은 모든 용도로 무료다: 그것은 어떤 특허도 적용되지 않는다.[1] 암호학에서 CMAC는 블록 암호 기반 메시지 인증 코드 알고리즘이다.[2] 진위 여부 및 데이터의 무결성을 보장하기 위해 사용될 수 있다. 이 작동 모드는 CBC-MAC의 보안 결함을 수정한다(CBC-MAC는 고정 길이 메시지에 대해서만 보안됨).[citation needed]
CMAC 알고리즘의 핵심은 블랙과 로가웨이가 XCBC라는[3] 이름으로 제안하고 분석하여 NIST에 제출한 CBC-MAC의 변형이다.[4] XCBC 알고리즘은 CBC-MAC의 보안 결함을 효율적으로 해결하지만 3개의 키가 필요하다. 이와타와 쿠로사와는 XCBC의 개선을 제안하고, 결과 알고리즘을 그들의 논문에서 One-Key CBC-MAC(OMAC)라고 명명했다.[5] 그들은 나중에 OMAC1과 OMAC의 정교화,[6] 추가적인 보안 분석을 제출하였다.[7] OMAC 알고리즘은 XCBC에 필요한 핵심 재료의 양을 줄인다. CMAC는 OMAC1과 동일하다.
b비트 블록 암호(E)와 비밀 키(k)를 사용하여 메시지(m)의 ℓ비트 CMAC 태그(t)를 생성하려면 먼저 다음 알고리즘을 사용하여 두 개의 b비트 하위 키(k와1 k2)를 생성한다(이는 유한 필드 GF(2b)에서 x와 x의2 곱셈과 같다). ≪은 표준 좌시프트 연산자를 나타내며 ⊕은 비트-와이즈-배타적 또는 다음을 나타낸다.
- 임시0 값 k = E(0k)를 계산한다.
- If msb(k0) = 0, then k1 = k0 ≪ 1, else k1 = (k0 ≪ 1) ⊕ C; where C is a certain constant that depends only on b. (Specifically, C is the non-leading coefficients of the lexicographically first irreducible degree-b binary polynomial with the minimal number of ones: 0x1B for 64-bit, 0x87 for 128-bit, and 0x425 for 256-bit blocks.)
- msb(k1)가 0이면 k2 = k1 ≪ 1, 다른 k2 = (k k1 1) 1 C.
- MAC 생성 프로세스의 반환 키(k1, k2)
작은 예로 b = 4, C = 00112, k0 = Ek(0) = 0101을2 가정해 보자. 그 다음 k1 = 10102, k2 = 0100 ⊕ 0011 = 01112.
CMAC 태그 생성 프로세스는 다음과 같다.
- 메시지를 b-비트 블록 m = m1 ∥으로 나누기... ∥ mn−1 ∥ mn, 여기서 m1, ...m은n−1 완전한 블록이다. (빈 메시지는 하나의 불완전한 블록으로 처리된다.)
- m이n 완전한 블록인 경우 mn m = k1 ⊕ m 다른n mn′ = k2 ⊕ (mn ∥ 10...02)
- Let c0 = 00...02.
- i = 1, ..., n - 1의 경우 ci = Ek(ci−1 ⊕ mi)를 계산한다.
- cn = Ek(cn−1 ⊕ mn′)
- 출력 t = msbℓ(cn)
검증 과정은 다음과 같다.
- 태그를 생성하려면 위의 알고리즘을 사용하십시오.
- 생성된 태그가 수신된 태그와 동일한지 확인하십시오.
구현
- Python 구현: 의 사용 보기
AES_CMAC()
"impacket/blob/master/misc/test_misc.py"에서 함수와 "impacket/blob/master/impacket/crypto.py"[8]에서 함수의 정의. - 루비 구현[9]
참조
- ^ Rogaway, Phillip. "CMAC: Non-licensing". Retrieved May 27, 2020.
Phillip Rogaway's statement on intellectual property status of CMAC
- ^ Dworkin, Morris (2016). "Recommendation for Block Cipher Modes of Operation: The CMAC Mode for Authentication" (PDF). doi:10.6028/nist.sp.800-38b.
{{cite journal}}
: Cite 저널은 필요로 한다.journal=
(도움말) - ^ Black, John; Rogaway, Phillip (2000-08-20). Advances in Cryptology – CRYPTO 2000. Springer, Berlin, Heidelberg. pp. 197–215. doi:10.1007/3-540-44598-6_12. ISBN 978-3540445982.
- ^ Black, J; Rogaway, P. "A Suggestion for Handling Arbitrary-Length Messages with the CBC MAC" (PDF).
{{cite journal}}
: Cite 저널은 필요로 한다.journal=
(도움말) - ^ Iwata, Tetsu; Kurosawa, Kaoru (2003-02-24). "OMAC: One-Key CBC MAC". Fast Software Encryption. Lecture Notes in Computer Science. Vol. 2887. Springer, Berlin, Heidelberg. pp. 129–153. doi:10.1007/978-3-540-39887-5_11. ISBN 978-3-540-20449-7.
- ^ Iwata, Tetsu; Kurosawa, Kaoru (2003). "OMAC: One-Key CBC MAC – Addendum" (PDF).
{{cite journal}}
: Cite 저널은 필요로 한다.journal=
(도움말) - ^ Iwata, Tetsu; Kurosawa, Kaoru (2003-12-08). "Stronger Security Bounds for OMAC, TMAC, and XCBC". In Johansson, Thomas; Maitra, Subhamoy (eds.). Progress in Cryptology – INDOCRYPT 2003. Lecture Notes in Computer Science. Springer Berlin Heidelberg. pp. 402–415. CiteSeerX 10.1.1.13.8229. doi:10.1007/978-3-540-24582-7_30. ISBN 9783540206095.
- ^ "Impacket is a collection of Python classes for working with network protocols.: SecureAuthCorp/impacket". 15 December 2018 – via GitHub.
- ^ "Ruby C extension for the AES-CMAC keyed hash function (RFC 4493): louismullie/cmac-rb". 4 May 2016 – via GitHub.
외부 링크
- RFC 4493 AES-CMAC 알고리즘
- RFC 4494 AES-CMAC-96 알고리즘과 IPsec에서의 사용
- RFC 4615 고급 암호화 표준-암호 기반 메시지 인증 코드-Pseudo-Random 함수-128(AES-CMAC-PRF-128)
- OMAC 온라인 테스트
- OMAC에 대한 자세한 정보