암호문 도용
Ciphertext stealing![]() |
암호학에서 암호문 도용(CTS)은 블록으로 균등하게 분할되지 않은 메시지를 암호문의 확장 없이 처리할 수 있도록 하는 블록 암호모드(Block Cipher mode of operation)를 사용하는 일반적인 방법으로서, 복잡성이 약간 증가되는 비용이다.
일반적 특성
암호문 도용은 블록 크기의 배수로 메시지를 채우지 않고 블록 암호를 사용하여 일반 텍스트를 암호화하는 기법이기 때문에 암호문도 일반 텍스트와 크기가 같다.
그것은 메시지의 마지막 두 블록의 처리를 변경함으로써 이것을 한다. 마지막 두 블록을 제외한 모든 블록의 처리가 변경되지 않지만, 두 번째 마지막 블록의 암호문 중 일부는 마지막 일반 텍스트 블록을 채우기 위해 "stolen"이다. 패딩 처리된 최종 블록은 평상시처럼 암호화된다.
마지막 두 블록에 대한 최종 암호문은 원래의 일반 텍스트와 동일한 크기인 부분적인 penultimate 블록("stolen" 부분이 생략된 상태)과 전체 최종 블록으로 구성된다.
암호 해독은 먼저 최종 블록의 암호를 해독한 다음 도난당한 암호문을 penultimate 블록으로 복원해야 하며, 그런 다음 평상시처럼 암호를 해독할 수 있다.
원칙적으로 모든 블록 지향 블록 암호모드 운영은 사용할 수 있지만, 스트림-암호모드는 패딩이 없는 임의 길이의 메시지에 이미 적용할 수 있으므로 이 기법의 혜택을 받지 못한다. 암호문 도용과 결합하는 일반적인 작동 방식은 전자코드북(ECB)과 암호블록체인링(CBC)이다.
ECB 모드의 암호문 도용은 일반 텍스트가 한 블록보다 길어야 한다. 가능한 해결책은 CTR, CFB 또는 OFB 모드와 같이 일반 텍스트 길이가 블록 하나 이하일 때 스트림 암호와 같은 블록 암호 모드를 사용하는 것이다.
CBC 모드에 대한 암호문 도용은 반드시 일반문서가 한 블록 이상이어야 하는 것은 아니다. 일반 텍스트가 한 블록의 길이 이하인 경우, 초기화 벡터(IV)는 암호 텍스트의 선행 블록 역할을 할 수 있다. 이 경우 수정된 IV를 수신기로 전송해야 한다. 이는 암호문이 전송될 때(예: IV가 파생되거나 미리 설정된 값인 경우) 송신자가 IV를 자유롭게 선택할 수 없는 상황에서 가능하지 않을 수 있으며, 이 경우 CBC 모드의 암호문 도용은 하나의 블록보다 긴 일반 텍스트에서만 발생할 수 있다.
알 수 없는 길이의 데이터에 대해 CTS 암호화나 암호 해독을 구현하기 위해서는 가장 최근의 두 블록의 데이터 처리를 지연(및 버퍼링)하여 데이터 스트림 끝에서 적절하게 처리할 수 있도록 해야 한다.
암호문 형식
전송을 위한 암호문을 배열하는 방법에는 여러 가지가 있다. 암호문 비트는 모든 경우에 동일하며, 단지 다른 순서로 전송되기 때문에 선택은 보안에 영향을 미치지 않는다; 그것은 순전히 구현 편의의 하나이다.
여기 번호 매기는 드워킨에서 따온 것인데, 드워킨은 그것들을 모두 기술하고 있다. 세 번째는 가장 인기 있고, 대멘과 슈나이어가 기술하고 있다. 마이어는 관련되지만 양립할 수 없는 (비트 주문 및 키 사용과 관련하여) 계획을 설명한다.
CS1
거의 틀림없이 암호문을 배열하는 가장 확실한 방법은 잘린 펜ultimate 블록을 전송한 다음 완전한 최종 블록을 전송하는 것이다. 이것은 두 가지 이유로 수신자에게 편리하지 않다.
- 수신자는 어떤 경우든 최종 블록을 먼저 해독해야 하며,
- 이로 인해 최종 블록이 자연적인 경계에서 정렬되지 않아 하드웨어 구현이 복잡해진다.
이것은 최종 평문 블록이 블록 크기의 배수가 될 경우 암호문 도용이 없는 원래 작동 모드의 그것과 동일하다는 장점을 가지고 있다.
CS2
최종 두 개의 암호 텍스트 블록을 교환하는 것이 더 편리한 경우가 많으므로 암호 텍스트는 전체 최종 블록으로 끝나고, 잘린 penultimate 블록이 뒤따른다. 이것은 자연스럽게 정렬된 암호 텍스트 블록을 만들어낸다.
비스틸링 모드와의 호환성을 유지하기 위해 옵션 CS2는 도난당한 암호문의 양이 0이 아닌 경우에만, 즉 원본 메시지가 블록 크기의 배수가 아닌 경우에만 이 스왑을 수행한다.
이것은 자연스러운 정렬과 비스틸링 모드와의 호환성을 유지하지만, 정렬된 메시지 크기와 정렬되지 않은 메시지 크기를 다르게 처리해야 한다.
CS 3
가장 인기 있는 대안은 최종 두 개의 암호문 블록을 무조건 교환한다. 이것은 아래 설명에 사용된 주문이다.
암호문 도용 모드 설명
데이터를 암호화하거나 해독하려면 마지막 두 블록을 제외한 모든 데이터 블록에 대해 표준 블록 암호 모드를 사용하십시오.
다음 단계에서는 P와n−1 P라고n 하는 일반 텍스트의 마지막 두 블록을 처리하는 방법을 설명하며, 여기서 P의n−1 길이는 암호의 블록 크기 B와 같고, 마지막 블록의 길이n P는 M 비트이며, K는 사용 중인 키다. M은 1에서 B까지 범위를 포함할 수 있으므로n P는 완전한 블록이 될 수 있다. 또한 CBC 모드 설명에서는 관련 블록인 C에n−2 바로 앞서 암호 텍스트 블록을 사용하며, 이는 일반 텍스트가 두 블록 내에 적합할 경우 IV가 될 수 있다.
이 설명을 위해 다음과 같은 기능과 연산자를 사용한다.
- Head(데이터, a): 'data' 문자열의 첫 번째 비트를 반환한다.
- Tail(데이터, a): 'data' 문자열의 마지막 비트를 반환한다.
- 암호화(K, data): 키 K를 사용하는 '데이터' 문자열의 암호화 모드에서 기본 블록 암호를 사용한다.
- 암호 해독(K, data): 키 K를 사용하는 '데이터' 문자열의 암호 해독 모드로 기본 블록 암호를 사용한다.
- XOR: 비트 와이즈 독점-OR. 운반 비트를 사용하지 않고 비트를 추가하는 것과 동일함.
- : 연결 연산자. 연산자 양쪽에 있는 문자열을 결합한다.
- 0a: 0비트의 문자열.
ECB 암호 텍스트 도용
ECB 모드에서 암호문 도용은 마지막 두 블록 내에 블록 간 종속성을 도입하여 마지막 두 블록에 대한 오류 전파 동작이 변경된다.
ECB 암호화 단계(그림 참조)
- En−1 = 암호화(K, Pn−1) E를n−1 생성하려면 P를n−1 암호화하십시오. 이는 표준 ECB 모드의 동작과 동일하다.
- Cn = Head(En−1, M). C를n 생성할 E의n−1 첫 번째 M 비트를 선택하십시오. 최종 암호문 블록인 C는n 2차에서 마지막 암호문 블록의 선행 M 비트로 구성된다. 모든 경우에서 마지막 두 블록은 해당 일반 텍스트 블록과 다른 순서로 전송된다.
- Dn = Pn Tail(En−1, B-M). E의n−1 낮은 순서 비트가 있는 Padn.
- Cn−1 = 암호화(K, D). D를n 암호화하여n C를n−1 생성한다. 첫 번째 M 비트의 경우, 이는 ECB 모드(암호 텍스트 순서 제외)에서 일어나는 것과 동일하다. 마지막 B-M 비트의 경우, 이 데이터들이 이 키로 암호화된 것은 이번이 두 번째다(2단계에서 E의n−1 생산에서 이미 암호화된 것이다).
ECB 암호 해독 단계
- Dn = 암호 해독(Kn−1, C) C의n−1 암호를 해독하여 D를n 생성하십시오. 이 암호화 프로세스의 4단계 실행 취소.
- En−1 = Cn Tail (Dn, B-M). D의n 꼬리 끝에 추출된 암호문이 있는 Pad Cn. (ECB 암호화 프로세스의 3단계에 배치)
- Pn = Head(Dn, M). P를n 생성할 D의n 첫 번째 M 비트를 선택하십시오. ECB 암호화 프로세스의 3단계에서 설명한 바와 같이, D의n 첫 번째 M 비트는n P를 포함한다. 우리는 최종 산출물을 위해 이 마지막 블록을 대기열에 넣는다.
- Pn−1 = 암호 해독(K, En−1) P를n−1 생성하려면 E의n−1 암호를 해독하십시오. 이렇게 하면 암호화 1단계가 반대로 된다.
ECB 암호 텍스트 도용 오류 전파
Cn−1 전송의 비트 에러는 P와n−1 P의n 블록 와이드 부패를 야기할 것이다. Cn 전송의 비트 에러는 P의n−1 블록 와이드 부패를 초래할 것이다. 이는 ECB의 오류 전파 동작에서 중대한 변화다.
CBC 암호문 도용
CBC에서는 이미 서로 다른 인접 블록의 처리 사이에 상호작용이 존재하기 때문에 CTS는 이 모드에서 개념적 영향이 적다. 오류 전파에 영향을 미친다.
CBC 암호화 단계
- Xn−1 = Pn−1 XOR Cn−2. 이전 암호 텍스트 블록인n−2 C가 있는 독점-OR P를n−1 사용하여 X를n−1 생성한다. 이는 표준 CBC 모드의 거동에 해당한다.
- En−1 = 암호화(Kn−1, X) X를n−1 암호화하여 E를n−1 생성하십시오. 이는 표준 CBC 모드의 거동에 해당한다.
- Cn = Head(En−1, M). C를n 생성할 E의n−1 첫 번째 M 비트를 선택하십시오. 최종 암호문 블록인 C는n 2차에서 마지막 암호문 블록의 선행 M 비트로 구성된다. 모든 경우에서 마지막 두 블록은 해당 일반 텍스트 블록과 다른 순서로 전송된다.
- P = Pn 0B−M. 끝에 0이 있는 Pad P를 만들어n 길이 B의 P를 만든다. 이 단계의 제로 패딩은 5단계에서 중요하다.
- Dnn = En−1 XOR P. D를 생성하기 위한 P가 있는 Extension-OR En−1. 블록의 첫 번째 M 비트의 경우, 이것은 CBC 모드와 동일하며, 이전 블록의 암호문 E의n−1 첫 번째 M 비트는 마지막 일반 텍스트 블록의 일반 텍스트의 M 비트로 XOR 처리된다. 4단계에서 P의 제로 패딩은 중요했는데, 이는 마지막 B-M 비트에 대한 XOR 연산의 효과를 E의n−1 마지막 B-M 비트를 D의n 끝까지 복사하는 것과 같기 때문이다. 이것들은 C가n 생성되었을 때 3단계에서 E에서n−1 벗겨낸 것과 같은 비트들이다.
- Cn−1 = 암호화(K, D). D를n 암호화하여n C를n−1 생성한다. 첫 번째 M 비트의 경우, 이는 (암호 텍스트 순서는 제외) CBC 모드에서 일어나는 것과 동일하다. 마지막 B-M 비트의 경우, 이 데이터들이 이 키로 암호화된 것은 이번이 두 번째다(2단계에서 E의n−1 생산에서 이미 암호화된 것이다).
CBC 암호 해독 단계
- Dn = 암호 해독(Kn−1, C) C의n−1 암호를 해독하여 D를n 생성하십시오. 암호화 프로세스의 6단계 실행 취소.
- C = Cn 0B−M. 끝단에 0이 있는 패드n C는 길이 B의 블록 C를 생성한다. 우리는 3단계에서 돕기 위해 C에n 0을 채운다.
- Xn = Dn XOR C. X를n 생성하기 위한 C가 있는 독점 OR Dn. 첫 번째 M 비트를 살펴보면, 이 단계는 (현재 해독된) Pn XOR 헤드(En−1, M)를n−1 가진 XORing C(암호화 프로세스의 첫 번째 M 비트)의n 결과가 있다(암호화 프로세스의 4-5 단계 참조). 다시 말해서, 우리는 CBC가 P의n 첫 번째 M 비트의 암호를 해독했다. 마지막 B-M 비트를 보면 E의n−1 마지막 B-M 비트를 복구한다.
- Pn = Head(Xn, M). P를n 생성할 X의n 첫 번째 M 비트를 선택하십시오. 3단계에서 설명한 대로 X의n 첫 번째 M 비트는 P를n 포함한다. 우리는 최종 산출물을 위해 이 마지막 블록을 대기열에 넣는다.
- En−1n = C Tail (Xn, B-M) X의n 꼬리(B-M) 비트를 C에n 추가하여 E를n−1 생성한다. 3단계에서 설명한 것처럼 E는n−1 X의n 마지막 B-M 비트와 함께 추가된 모든n C(M 비트 길이)로 구성된다. 우리는 6단계에서 처리하기 위해 En−1(암호화 과정에서 보이는 것과 동일한 En−1)를 재조립한다.
- Xn−1 = 암호 해독(K, En−1). X를n−1 만들려면 E의n−1 암호를 해독하십시오. 이것은 암호화 단계를 반대로 한다. X는n−1 암호화 프로세스에서와 같다.
- Pn−1 = XORn−1 Cn−2. 이전 암호 텍스트 블록인 C가n−2 있는 독점 OR X를n−1 사용하여 P를n−1 생성한다. 마지막으로 암호화 프로세스의 1단계에서 XOR 단계를 반대로 한다.
CBC 구현 참고 사항
CBC 암호문 도용의 경우, 표준 CBC 인터페이스를 사용하여 기술된 암호문 도용 프로세스를 구현하는 교묘한(그러나 불투명한) 방법이 있다. 이 방법을 사용하면 전용 구현을 사용하여 필요한 것에 대해 하나의 추가 블록 암호 해독 작업의 암호 해독 단계에서 성능 저하가 발생한다.
CBC 암호문이 표준 CBC 인터페이스를 사용하여 암호화를 도용함
- 마지막 부분 일반 텍스트 블록을 0으로 패딩하십시오.
- 표준 CBC 모드를 사용하여 패딩된 전체 일반 텍스트를 암호화하십시오.
- 마지막 두 개의 암호 텍스트 블록을 스왑하십시오.
- 암호문을 원래 일반 텍스트의 길이로 잘라내십시오.
표준 CBC 인터페이스를 사용하여 암호 해독을 도용하는 CBC 암호문
- Dn = 암호 해독(Kn−1, C) ECB 모드를 사용하여 두 번째에서 마지막 암호 텍스트 블록의 암호를 해독하십시오.
- Cn = Cn Tail (Dn, B-M). 두 번째에서 마지막까지의 암호문 블록의 블록 암호 해독의 마지막 B-M 비트를 이용하여 블록 크기의 가장 가까운 배수로 암호문을 패딩한다.
- 마지막 두 개의 암호 텍스트 블록을 스왑하십시오.
- 표준 CBC 모드를 사용하여 (수정된) 암호문을 해독하십시오.
- 일반 텍스트를 원래 암호 텍스트의 길이로 잘라내십시오.
CBC 암호문 도용 오류 전파
Cn−1 전송의 비트 에러는 P와n−1 P의n 블록 와이드 부패를 야기할 것이다. Cn 전송의 비트 에러는 Pn, 블록 와이드 P의n−1 손상에서 해당 비트 에러를 발생시킬 수 있다.
참조
- Daemen, Joan (1995). "2.5.1 and 2.5.2". Cipher and Hash Function Design, Strategies Based on Linear and Differential Cryptanalysis (PDF) (Ph.D. thesis). Katholieke Universiteit Leuven.
- Schneier, Bruce (1995). Applied Cryptography (2nd ed.). John Wiley & Sons, Inc. pp. 191, 195. ISBN 978-0-471-12845-8.
- Meyer, Carl H.; Matyas, Stephen M. (1982). Cryptography: A New Dimension in Computer Data Security. John Wiley & Sons, Inc. pp. 77–85. ISBN 978-0-471-04892-3.
- R. Baldwin; R. Rivest (October 1996). The RC5, RC5-CBC, RC5-CBC-Pad, and RC5-CTS Algorithms. doi:10.17487/RFC2040. RFC 2040.
- Dworkin, Morris (October 2011). Recommendation for Block Cipher Modes of Operation: Three Variants of Ciphertext Stealing for CBC Mode (PDF). US National Institute of Standards and Technology (NIST). Addendum to NIST Special Pub 800-38A.