원키 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과 동일하다.

CMAC - Cipher-based Message Authentication Code.pdf

b비트 블록 암호(E)와 비밀 키(k)를 사용하여 메시지(m)의 ℓ비트 CMAC 태그(t)를 생성하려면 먼저 다음 알고리즘을 사용하여 두 개의 b비트 하위 키(k1 k2)를 생성한다(는 유한 필드 GF(2b)에서 xx2 곱셈과 같다). ≪은 표준 좌시프트 연산자를 나타내며 ⊕은 비트-와이즈-배타적 또는 다음을 나타낸다.

  1. 임시0 값 k = E(0k)를 계산한다.
  2. 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.)
  3. msb(k1)가 0이면 k2 = k1 ≪ 1, 다른 k2 = (k k1 1) 1 C.
  4. MAC 생성 프로세스의 반환 키(k1, k2)

작은 예로 b = 4, C = 00112, k0 = Ek(0) = 01012 가정해 보자. 그 다음 k1 = 10102, k2 = 0100 0011 = 01112.

CMAC 태그 생성 프로세스는 다음과 같다.

  1. 메시지를 b-비트 블록 m = m1 ∥으로 나누기... mn−1 mn, 여기서 m1, ...mn−1 완전한 블록이다. (빈 메시지는 하나의 불완전한 블록으로 처리된다.)
  2. mn 완전한 블록인 경우 mn m = k1 ⊕ m 다른n mn= k2 ⊕ (mn 10...02)
  3. Let c0 = 00...02.
  4. i = 1, ..., n - 1의 경우 ci = Ek(ci−1 mi)를 계산한다.
  5. cn = Ek(cn−1mn′)
  6. 출력 t = msb(cn)

검증 과정은 다음과 같다.

  1. 태그를 생성하려면 위의 알고리즘을 사용하십시오.
  2. 생성된 태그가 수신된 태그와 동일한지 확인하십시오.

구현

참조

  1. ^ Rogaway, Phillip. "CMAC: Non-licensing". Retrieved May 27, 2020. Phillip Rogaway's statement on intellectual property status of CMAC
  2. ^ 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= (도움말)
  3. ^ 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.
  4. ^ Black, J; Rogaway, P. "A Suggestion for Handling Arbitrary-Length Messages with the CBC MAC" (PDF). {{cite journal}}: Cite 저널은 필요로 한다. journal= (도움말)
  5. ^ 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.
  6. ^ Iwata, Tetsu; Kurosawa, Kaoru (2003). "OMAC: One-Key CBC MAC – Addendum" (PDF). {{cite journal}}: Cite 저널은 필요로 한다. journal= (도움말)
  7. ^ 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.
  8. ^ "Impacket is a collection of Python classes for working with network protocols.: SecureAuthCorp/impacket". 15 December 2018 – via GitHub.
  9. ^ "Ruby C extension for the AES-CMAC keyed hash function (RFC 4493): louismullie/cmac-rb". 4 May 2016 – via GitHub.

외부 링크