CBC-MAC
CBC-MAC암호 블록 체인 메시지 인증 코드(, CBC-MAC)는 블록 암호로부터 메시지 인증 코드(MAC)를 구성하기 위한 기술입니다.메시지는 CBC(암호 블록 체인) 모드에서 일부 블록 암호 알고리즘으로 암호화되어 각 블록이 이전 블록의 적절한 암호화에 의존하도록 블록 체인을 만듭니다.이러한 상호 의존성은 일반 텍스트 비트에 대한 변경으로 인해 최종 암호화된 블록이 블록 암호에 대한 키를 알지 못하면 예측하거나 대응할 수 없는 방식으로 변경되도록 보장합니다.
메시지 m의 CBC-MAC를 계산하기 위해 초기화 벡터가 0인 CBC 모드에서 m을 암호화하고 마지막 블록을 유지합니다.다음 그림은 비밀 키 k와 블록 암호 E를 사용하여 블록으로 구성된 메시지의 CBC-MAC 계산을 스케치합니다.
CBC-MAC 자체는 가변 길이[1] 메시지(아래 설명 참조)에 대해 안전하지 않으며, 현재 CCM 모드의 구성 요소로 의사 임의 함수[2] 제품군을 구성하는 데 사용됩니다.
표준에 사용
CBC-MAC 구성은 IEEE 802.11i 및 NIST SP 800-97(CCMP, WPA2용 CCM 암호화 프로토콜), IPsec [3]및 TLS 1.2 [4]및 Bluetooth Low Energy(Bluetooth 4.0 기준, NIST SP 800-121 Rev2 [5]참조)에서 사용되는 CCM 모드의 일부로 사용됩니다.TLS 1.3에 사용할 수 있지만 OpenSSL에서는 [6]기본적으로 활성화되지 않습니다.
CBC-MAC는 NIST SP 800-90B에서 "컨디셔닝 구성 요소"(예: 랜덤성 추출기,[2] 완전 엔트로피로 비트 문자열을 생성하는 방법)로도 사용됩니다.
알고리즘을 정의하는 표준
FIPS PUB 113 컴퓨터 데이터 인증은 DES를 블록 암호로 사용하여 CBC-MAC 알고리즘을 지정한 미국 정부 표준입니다.
CBC-MAC 알고리즘은 ANSI X9.9, ANSI X9.19, ISO 8731-1 및 ISO/IEC 997-1 MAC(알고리즘 1)[7]에도 포함되어 있습니다.
고정 및 가변 길이 메시지를 통한 보안
사용된 블록 암호가 안전한 경우(의사 임의 순열인 경우) CBC-MAC는 고정 길이 [1]메시지에 대해 안전합니다.그러나 가변 길이 메시지 자체는 안전하지 않습니다.따라서 단일 키는 고정된 알려진 길이의 메시지에만 사용해야 합니다.이는 두 메시지 {\및 ( {\에 대한 올바른 인증 태그(예: CBC-MAC) 쌍을 알고 있는 공격자가 CBC-MAC도m인 세 번째 를 생성할 수 있기 때문입니다.이것은 단순히 m'\displaystyle m'의 첫 번째 블록을 t로 XOR한 다음 m'displaystyle m'과 연결함으로써 이루어진다. 즉, m = m ‖ m 2 ‖ … m x ‖ m x ‖ \ m = m [ ( m _ { 1 ' to ) t ] \ x \ x \ x } m _ 2 ' m _ 2 ' m _ 2 ' m _ 2 ' } 를 계산할 때 m_2 ' m_2 ' \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ \ \ \ \ \ \ \따라서 일반적인 방법으로 ost로 MAC 형식을 계산하지만, 이 값이 MAC(에 앞으로 체인될 때 {\text{ t 첫 번째 메시지의 MAC에 대해 파생된 값으로 배타적 OR 작업을 수행합니다. 메시지에 해당 태그가 있으면 취소되고 첫 번째 메시지 m: EK MAC( ▁) )= ▁))\이므로 태그 ″ {{ m은는) t t입니다
이 문제는 메시지 크기의 블록을 [8]끝에 추가하여 해결할 수 없습니다.가변 길이 메시지에 안전하도록 CBC-MAC를 수정하는 방법은 크게 세 가지입니다. 1) 입력 길이 키 분리, 2) 길이 준비, 3) 마지막 [8]블록 암호화.이러한 경우 가변 길이 메시지의 무결성을 보호하기 위해 CMAC 또는 HMAC와 같은 다른 작동 모드를 사용하는 것이 좋습니다.
길이 접두사
한 가지 해결책은 첫 번째 [9]블록에 메시지의 길이를 포함하는 것입니다. 실제로 CBC-MAC는 서로의 접두사인 두 개의 메시지가 사용되지 않는 한 안전한 것으로 입증되었으며 길이를 추가하는 것은 [10]이에 대한 특별한 경우입니다.처리가 시작될 때 메시지 길이를 알 수 없는 경우 이 문제가 발생할 수 있습니다.
마지막 블록 암호화
암호화-마지막 블록 CBC-MAC(ECBC-MAC)[11]는 CBC-MAC-ELB(,mk1 , ) =(,k2 CBC-MAC(,k1[8] )로 정의됩니다.CBC-MAC를 가변 길이 메시지로 확장하는 다른 방법과 비교하여, 암호화-마지막 블록은 계산이 끝날 때까지 메시지의 길이를 알 필요가 없다는 장점이 있습니다.
잘못된 사용에 대한 공격 방법
많은 암호화 체계와 마찬가지로, 암호 및 기타 프로토콜을 순진하게 사용하면 공격이 가능해져 암호화 보호의 효과가 저하될 수 있습니다(또는 쓸모없게 만들 수도 있습니다).CBC-MAC를 [12]잘못 사용하여 발생할 수 있는 공격을 제시합니다.
암호화 및 인증에 동일한 키 사용
한 가지 일반적인 실수는 CBC 암호화 및 CBC-MAC에 대해 동일한 키 k를 재사용하는 것입니다.일반적으로 다른 용도로 키를 재사용하는 것은 좋지 않지만, 이 경우 실수로 인해 엄청난 공격이 발생합니다.
앨리스가 밥에게 암호 텍스트 블록 C = C 1 ‖ C 2 … ‖ C cn \ displaystyle C = C_{1}\ C_{2}\ \ displaystyle C_{n}를 보냈다고 가정해보자. 전송 과정에서 이브는 C1, ..., Cn - 1, dots, C_{n-1} 암호 블록 중 하나를 조작할 수 있으며, 그 안에서 제공되는 최종 텍스트 블록을 선택하여 C-{n-1} 비트를 조정한다\ , 그대로 유지됩니다이 예제의 목적을 위해 일반성을 잃지 않고 암호화 프로세스에 사용되는 초기화 벡터가 0의 벡터라고 가정합니다.
밥은 메시지를 수신하면 먼저 암호 블록 C C C = }\2}\ \cdots \ C_{n를 사용하여 앨리스가 적용한 암호화 프로세스를 반대로 암호화하여 메시지를 해독합니다.앨리스의 원본을 대신하여 밥에게 전달된 변조된 는 C … - \ C \ 입니다.
Bob은 먼저 공유 비밀 키 K를 사용하여 수신된 메시지를 해독하여 해당 일반 텍스트를 얻습니다.생성된 모든 일반 텍스트는 Eve가 마지막 암호 텍스트 블록을 제외한 모든 암호 텍스트 블록을 수정했기 때문에 Alice가 원래 보낸 텍스트와 다를 것입니다.특히 최종 평문인 Pn'({displaystyle P_{n})은 앨리스가 보낸 원본 Pn({n})과 다릅니다. Cn - 1 ≠ Cn - 1 \ displaystyle C_{n}은 동일하지만 Cn - 1 ′ Cn - 1 = C_{n-1}은 아니기 때문에 이전 평문 PN이 생성됩니다r 텍스트는 n의 암호를 해독한 후 배타적-OR로 차단됩니다. : - ( {\displaystyle }'= E_{
이제 Bob이 디코딩한 일반 텍스트의 모든 값에 대해 CBC-MAC을 사용하여 인증 태그를 계산합니다.새 메시지의 태그 t는 다음과 같이 지정됩니다.
이 표현식은 다음과 같습니다.
그리고 t = t' =.
따라서 이브는 (어떤 일반 텍스트에 해당하는지) 전혀 다른 인 P'{{ P가 생성되도록 암호 텍스트를 전송 중에 수정할 수 있었지만, 이 메시지의 태그는 원본 태그와 일치했고, 밥은 전송 중에 내용이 수정되었음을 알지 못했습니다.정의에 따르면, 이전 메시지 P와 동일한 태그를 생성하는 다른 메시지(일반 텍스트 쌍 P ≠ {\displaystyle P })를 P ′ P {\ {{displaystyle P\not = P})를 찾을 수 있으면 메시지 인증 코드가 손상됩니다,그리고 밥은 앨리스가 그녀가 만들어내지 않은 메시지를 보냈다고 믿도록 속았습니다.
({displaystyle 와 같이 암호화 및 인증 단계에 서로 다른 키를 사용하는 경우 이 공격은 실패합니다.수정된 암호 텍스트 블록 Ci '{\displaystyle C_{i}의 암호 해독은 일부 일반 텍스트 문자열 Pi '{i}를 얻습니다. 그러나 MAC에서 다른 키 K2({displaystyle K_{2})를 사용하기 때문에 메시지 인증 코드 계산의 앞 단계에서 암호 해독 프로세스를 "실행 취소"할 수 없습니다동일한 태그를 지정합니다. 이제 CBC-MAC 프로세스에서 된 각 '{{displaystyle 가K2({2}})에 일부 값 로 암호화됩니다.
이 예는 또한 CBC-MAC를 충돌 방지 단방향 함수로 사용할 수 없음을 보여줍니다. 키가 주어지면 동일한 태그에 "해시"하는 다른 메시지를 만드는 것은 사소한 일입니다.
초기화 벡터의 값 변화 허용
암호 블록 체인(또는 다른) 모드에서 블록 암호를 사용하여 데이터를 암호화하는 경우 암호화 프로세스의 첫 번째 단계에 초기화 벡터를 도입하는 것이 일반적입니다.일반적으로 이 벡터는 무작위로 선택되어야 하며(논스) 블록 암호가 작동하는 특정 비밀 키에 대해 반복되지 않아야 합니다.이를 통해 동일한 일반 텍스트가 동일한 암호 텍스트로 암호화되지 않도록 함으로써 공격자가 관계가 존재한다고 추론할 수 있는 의미 보안을 제공합니다.
CBC-MAC와 같이 메시지 인증 코드를 계산할 때 초기화 벡터를 사용하면 공격 벡터가 될 수 있습니다.
암호문 블록 체인 암호의 동작에서, 평문의 첫 번째 블록은 배타적 OR( \ IV을 사용하여 초기화 벡터와 혼합됩니다.이 작업의 결과는 암호화를 위해 블록 암호에 대한 입력입니다.
그러나 암호화 및 암호 해독을 수행할 때 일반 텍스트의 첫 번째 블록 바로 앞에 있는 블록과 같은 일반 텍스트로 초기화 벡터를 전송하여 일반 텍스트의 첫 번째 블록을 성공적으로 해독하고 복구해야 합니다.MAC를 계산하는 경우, 상대방이 메시지의 태그가 자신이 계산한 값과 일치하는지 확인할 수 있도록 초기화 벡터를 일반 텍스트로 전송해야 합니다.
초기화 벡터를 임의로 선택할 수 있도록 허용하면 동일한 메시지 태그를 생성하면서 일반 텍스트의 첫 번째 블록을 잠재적으로 수정(다른 메시지 전송)할 수 있습니다.
메시지 M1 = P1 P2 …{\displaystyle M_{1}=P_{1} P_{2} \displays}을 고려해 보십시오. 특히 CBC-MAC에 대한 메시지 태그를 계산할 때 MAC의 계산이 EK(IV 1 ⊕ P1 )로 시작되도록 초기화 벡터 IV 1({1})을 선택한다고 가정합니다.이렇게 하면 (메시지, 태그) 쌍 이 생성됩니다({
이제 M2 = P1 dots P2 …{{displaystyle M_{2}=P_{1}' P_{2} \displaystyle 메시지를 생성합니다. P1' {{1}에서 수정된 각 비트에 대해 초기화 벡터에 해당하는 비트를 플립하여 초기화 벡터 IV 1 } {displaystyle IV_{1} 메시지의 계산을 시작합니다EK (P1 ⊕ IV 1 ) ) {\displaystyle E_{K}(P_{1}'\oplus IV_{1})}. 평문과 초기화 벡터의 비트가 같은 위치에서 플립되었기 때문에, 블록 암호에 대한 입력이 M1의 입력과 동일하다는 것을 의미하며, 평문에 대한 추가적인 변경이 없을 경우 이 첫 번째 단계에서 수정이 취소된다텍스트입니다. 다른 메시지가 전송되더라도 동일한 태그가 파생됩니다.
초기화 벡터를 선택할 수 있는 자유가 제거되고 CBC-MAC의 모든 구현이 특정 초기화 벡터(종종 0의 벡터이지만 이론적으로는 모든 구현이 동의할 경우 무엇이든 될 수 있음)에 고정되면 이 공격은 진행될 수 없습니다.
요약하자면, 공격자가 MAC 확인에 사용할 IV를 설정할 수 있는 경우 MAC을 무효화하지 않고 첫 번째 데이터 블록을 임의로 수정할 수 있습니다.
예측 가능한 초기화 벡터 사용
때때로 IV는 메시지 재생 공격을 방지하는 카운터로 사용됩니다.그러나 공격자가 MAC 확인에 사용할 IV를 예측할 수 있는 경우, 첫 번째 데이터 블록을 수정하여 확인에 사용할 IV의 변경 사항을 보완하여 이전에 관찰된 메시지를 재생할 수 있습니다.예를 들어, 공격자가 IV 1과 함께 메시지 M1 = P1 P2 …({1}=P_{2} \displaystyle P_{1}을(를) 관찰하고 IV 2({2})를 알고 있다면, M1 = (P1 ⊕ I 1 ⊕ I 1 dots I 2 ) P2 …(Pplus = {1}) P2({1})를 생성할 수 있다 {\displaystyle 을를) 선택합니다.
가장 간단한 대책은 IV를 사용하기 전에 암호화하는 것입니다(즉, 데이터에 IV를 추가하는 것).CFB 모드에서는 IV가 데이터로 XOR 지정되기 전에 암호화되므로 CFB 모드의 MAC을 사용할 수도 있습니다.
다른 해결책(메시지 재생 공격에 대한 보호가 필요하지 않은 경우)은 항상 0 벡터 [13]IV를 사용하는 것입니다.M1'에 대한 상기 식은 M1 = (P1 ⊕ 0 ⊕ 0 ) P2 = P1 P2 = (P1 ⋯ 0 = (P_{1}\oplus 0\oplus 0) P_{2} \transform = P_{1} \{2} \transform M1 \{M1} 및 M1} {{1}} 이후의 Mstylease {m}가 된다.이것은 위조가 아니라 CBC-MAC의 의도된 사용입니다.
참고 항목
- CMAC – 길이가 다른 메시지에 대해 안전한 블록 암호 기반 MAC 알고리즘입니다(NIST 권장).
- OMAC 및 PMAC – 블록 암호를 메시지 인증 코드(MAC)로 변환하는 기타 방법.
- 단방향 압축 기능 – 블록 암호로 해시 기능을 만들 수 있습니다.그러나 MAC(예: CBC-MAC)와 해시 간에는 보안 기능과 용도에 상당한 차이가 있습니다.
레퍼런스
- ^ a b M. 벨라레, J. 킬리안, P.로가웨이.암호 블록 체인 메시지 인증 코드의 보안입니다.JCSS 61(3): 362–399, 2000.
- ^ a b 클리프, 보이드 & 곤잘레스 니에토 2009, 5페이지
- ^ RFC4309 IPsec 캡슐화 보안 페이로드(ESP)와 함께 AES CCM 모드 사용
- ^ RFC 6655 전송 계층 보안(TLS)을 위한 AES-CCM 암호 스위트
- ^ "Bluetooth Low Energy Security". Archived from the original on 2016-04-02. Retrieved 2017-04-20.
- ^ Caswell, Matt (2017-05-04). "Using TLS1.3 With OpenSSL". OpenSSL blog. Retrieved 2018-12-29.
- ^ Preneel & van Oorshot 1999, 7페이지
- ^ a b c 벨라레 등의 섹션 5를 참조하십시오.
- ^ ISO/IEC 997-1:1999 정보기술 - 보안기법 - 메시지 인증코드 - Part 1: 블록암호를 이용한 메커니즘, 조항 6.1.3 패딩 방법 3
- ^ C. 랙오프 및 S.고르부노프.블록체인 메시지 인증 코드의 보안에 관한 연구
- ^ http://spark-university.s3.amazonaws.com/stanford-crypto/slides/05.3-integrity-cbc-mac-and-nmac.pptx[베어 URL]
- ^ 내가 매튜 D의 CBC-MAC를 싫어하는 이유. 녹색
- ^ 현대 암호학 입문, 조나단 캐츠와 예후다 린델의 제2판.
원천
- Cliff, Yvonne; Boyd, Colin; Gonzalez Nieto, Juan (2009). "How to Extract and Expand Randomness: A Summary and Explanation of Existing Results" (PDF). Applied Cryptography and Network Security. Berlin, Heidelberg: Springer Berlin Heidelberg. doi:10.1007/978-3-642-01957-9_4. ISBN 978-3-642-01956-2. ISSN 0302-9743.
- Preneel, B.; van Oorschot, P.C. (1999). "On the security of iterated message authentication codes" (PDF). IEEE Transactions on Information Theory. Institute of Electrical and Electronics Engineers (IEEE). 45 (1): 188–199. doi:10.1109/18.746787. ISSN 0018-9448.