Chapter 8 현대 대칭키 암호를 이용한 암호화 기법 Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display.
Chapter 18 Objectives ❑ DES와 AES 같은 현대 표준 암호를 이용하여 긴 메시지를 암호화하는 방법 ❑ 블록 암호 기반 다섯 가지 운영모드 ❑ 블록 암호를 이용하여 스트림 암호를 설계하는 운영모드의 정의 ❑ 다양한 운영모드의 안전성과 에러전파 효과 ❑ 실시간으로 데이터를 암호화하기 위하여 사용되는 두 가지 스트림 암호
Topics discussed in this section: 8-1 현대 블록 암호의 이용 USE OF MODERN BLOCK CIPHERS 대칭키 암호화 기법은 현대 블록암호를 기반으로 수행된다. 앞서 6, 7장에서 살펴본 DES와 AES라 불리는 현대 블록 암호는 고정된 길이의 텍스트 블록을 암호화하거나 복호화한다. Topics discussed in this section: 8.1.1 Electronic Codebook (ECB) Mode 8.1.2 Cipher Block Chaining (CBC) Mode 8.1.3 Cipher Feedback (CFB) Mode 8.1.4 Output Feedback (OFB) Mode 8.1.5 Counter (CTR) Mode
8-1 Continued Figure 8.1 운영모드
8.1.1 Electronic Codebook (ECB) Mode Figure 8.2 Electronic Codebook (ECB) 모드
8.1.1 Continued Example 8.1 Bob은 Alice가 암호화한 평문 블록을 정확하게 복구할 수 있다. 왜냐하면 암호화와 복호는 서로 역관계에 있기 때문이다. Example 8.2 ECB 모드는 두 개의 열에 2n개의 성분을 갖는 2k 개의 코드북을 사전 수집할 수 있으므로 electronic codebook으로 불린다. 각각의 성분은 평문과 그에 대응하는 암호문을 목록화 할 수 있다. 하지만, k와 n이 커지면 코드북을 사전 수집하고 유지하는 것이 매우 어려워진다.
8.1.1 Continued Example 8.3 Eve가 회사에서 한 달에 단지 몇 시간만 일을 하고 그녀의 급여가 매우 적다고 가정하자. 그리고 Eve는 회사가 각 고용자의 계좌에 지급해야 할 금액에 대한 정보가 17번째 블록에 저장된다는 사실을 알고 있다고 하자. Eve는 월말에 회사가 은행에 보내는 암호문을 가로채서 풀타임 일을 한 동료의 급여 정보를 갖는 블록을 복사하여 자신의 급여 정보를 갖는 블록과 대체할 수 있다. 매달 Eve는 자신이 일한 대가보다 훨씬 더 많은 급여를 받을 수 있다.
8.1.1 Continued 오류 파급 (Error Propagation) 전송 도중에 발생하는 단일 비트의 에러는 대응되는 블록 내의 비트들(일반적으로 블록의 반이거나 블록의 모든 비트)에 에러를 발생시킨다. 하지만, 그 에러는 다른 블록의 비트에는 영향을 주지 않는다.
8.1.1 Continued 암호문 stealing (Ciphertext Stealing) 암호문 stealing(CTS) 이라 불리는 이 기술을 이용하면 덧붙이기 없이 ECB 모드를 사용할 수 있다. CTS에서 마지막 두 개의 평문 블록 PN−1 과 PN은 아래와 같이 다르게 암호화 된다. 단, PN−1은 n비트 블록이고 PN은 m (m ≤ n ) 비트 블록이라고 가정한다.
8.1.2 Cipher Block Chaining (CBC) Mode CBC 모드에서 각각의 평문 블록은 암호화되기 전에 이전 블록의 암호문과 XOR된다. Figure 8.3 Cipher block chaining (CBC) 모드
8.1.2 Continued Figure 8.3 Cipher block chaining (CBC) 모드
8.1.2 Continued 초기벡터 (Initialization Vector (IV)) Example 8.4 Alice가 암호화한 평문 블록을 Bob은 정확하게 복구할 수 있다. 왜냐하면 암호화와 복호화 과정은 서로 역관계에 있기 때문이다. 초기벡터 (Initialization Vector (IV)) 초기벡터(IV)는 송신자와 수신자간에 공유되어야 하지만 반드시 비밀일 필요는 없다.
8.1.2 Continued 오류 파급 (Error Propagation) 암호문 블록 Cj가 전송 도중 한 비트 오류가 발생하였다고 가정하자. 그러면 복호화 과정에서는 평문 블록 Pj 에서는 대부분의 비트에서 오류가 발생되고, 평문 블록 Pj+1 에서는 Cj 의 오류 비트와 같은 위치에서 한 비트 오류가 발생한다.
8.1.2 Continued 암호문 stealing (Ciphertext Stealing) ECB 모드에서 설명한 암호문 stealing 기술은 아래와 같이 CBC 모드에도 적용될 수 있다. head 함수는 ECB 모드에서 정의한 것과 같고 pad는 0을 덧붙이는 함수이다.
8.1.3 Cipher Feedback (CFB) Mode 이 모드에서는 DES나 AES의 블록의 크기가 n이지만 평문이나 암호문 블록의 크기는 r(r≤n)이다. Figure 8.4 cipher feedback (CFB) 모드의 암호화
CFB 모드에서 암호화와 복호는 블록 암호의 암호화 함수를 이용한다. 8.1.3 Continued Note CFB 모드에서 암호화와 복호는 블록 암호의 암호화 함수를 이용한다. 평문 블록과 암호문 블록 사이의 관계는 다음과 같이 정의된다.:
8.1.3 Continued 스트림 암호로서의 CFB 모드 (CFB as a Stream Cipher) Figure 8.5 스트림 암호로서의 cipher feedback (CFB) 모드
8.1.3 Continued
18.1.4 Output Feedback (OFB) Mode Figure 8.6 Output feedback (OFB) 모드의 암호화
8.1.4 Continued 스트림 암호로서의 OFB 모드 (OFB as a Stream Cipher) Figure 8.7 스트림 암호로서의 output feedback (OFB) 모드
8.1.4 Continued
8.1.5 Counter (CTR) Mode CTR 모드는 암호화시 피드백이 존재하지 않는다. 그렇지만 키 스트림의 의사난수성은 카운터를 사용함으로서 성취될 수 있다. Figure 8.8 카운터(CTR) 모드의 암호화
8.1.5 Continued Figure 8.9 스트림 암호로서의 Counter (CTR) 모드
8.1.5 Continued
8.1.5 Continued 다른 운영 모드와의 비교
Topics discussed in this section: 8-2 USE OF STREAM CIPHERS 비록 다섯 가지 운영 모드가 메시지나, 큰 단위(ECB, CBC, CTR 모드)의 파일과 작은 단위(CFB, OFB 모드)의 데이터를 암호화하기 위하여 이용될 수 있지만, 때로는 문자나 비트와 같은 작은 단위의 데이터를 암호화하기 위하여 스트림 암호가 필요하다. Topics discussed in this section: 8.2.1 RC4 8.2.2 A5/1
8.2.1 RC4 RC4는 바이트 단위 스트림 암호로서, 평문 1 바이트(8 비트)와 키 1 바이트가 XOR되어 암호문의 1 바이트를 생성한다. 상태 (State) RC4는 상태 개념을 사용한다.
8.2.1 Continued Figure 8.10 RC4 스트림 암호의 개괄적 암호화 과정
8.2.1 Continued 초기화(Initialization ) 초기화는 2 단계로 수행된다: 키 스트림 생성 (Key Stream Generation) 키 스트림의 키 는 한 개씩 생성된다.
8.2.1 Continued Algorithm
8.2.1 Continued Algorithm Continued
8.2.1 Continued Example 8.5 스트림 키의 난수성을 보여주기 위하여 모든 바이트가 0인 비밀키를 이용한다. 키 스트림 k의 20개의 값은 (222, 24, 137, 65, 136, 55, 93, 58, 138, 6, 30, 103, 87, 110, 146, 109, 199, 26, 127, 163)이다. Example 8.6 예 8.5를 반복하라. 하지만 비밀키는 (15, 202, 33, 6, 8)로 구성된 다섯 바이트이다. 키 스트림은 (248, 18, 102, 54, 212, 237, 186, 133, 51, 238, 108, 106, 103, 214, 39, 242, 30, 34, 144, 49)이다. 키 스트림의 난수성은 다시 한 번 명확해졌다.
8.2.2 A5/1 A5/1(A5 패밀리 중 하나)은 휴대 전화 통신을 위한 네트워크 인 Global System for Mobile Communication (GSM)에서 사용된다. Figure 8.11 A5/1의 전체구조
8.2.2 Continued 키 생성기 (Key Generator) A5/1은 19, 22, 23개의 셀을 갖는 세 개의 LFSR을 사용한다. Figure 8.12 A5/1의 세 개의 LFSR
8.2.2 Continued 초기화 (Initialization) 1. 첫째, 세 개 LFSR의 모든 셀을 0으로 초기화 한다. 2. 다음 코드에 따라 레지스터의 값을 64 비트 키로 섞는다. 3. 22 비트 프레임 넘버를 이용하여 이전 과정을 반복한다.
8.2.2 Continued 4. 100 사이클 동안 전체 생성기를 클럭킹 한다. 그러나 LFSR의 클럭은 Majority 함수(다음 절에서 소개함)를 이용한다.
8.2.2 Continued Example 8.7 특정 시점에 클럭킹 비트가 1,0,1이다. 어떤 LFSR이 클럭(이동)되는가? Solution majority 함수의 결과값은 Majority(1,0,1)=1을 만족한다. LFSR1과 LFSR3은 이동되고 LFSR2는 이동되지 않는다.
8.2.2 Continued 암호화/복호화 (Encryption/Decryption) 키 생성기로부터 생성된 비트 스트림은 암호문 프레임을 생성하기 위하여 평문 프레임과 XOR 하기 위한 228 비트 키를 형성하기 위하여 버퍼에 저장된다. 암호화/복호화는 동시에 한 프레임에 대하여 수행된다.
Topics discussed in this section: 8-3 기타 (OTHER ISSUES) 대칭키 블록이나 스트림 암호를 사용하는 환경은 또 다른 관점에서 논의가 필요하다. Topics discussed in this section: 8.3.1 키 관리(Key Management) 8.3.2 키 생성(Key Generation)
8.3.1 키 관리(Key Management) Alice와 Bob은 대칭키 암호를 이용하여 안전하게 통신을 하기 위하여 그들 사이에 비밀키를 공유하여야 한다. 만약 커뮤니티에 n명의 구성원이 있다면, 각 구성원은 n-1명과 비밀 통신을 하기 위하여 비밀키가 필요하다. 그러므로 총 n(n − 1)/2 개의 비밀키가 필요하다. Note 키 관리는 15장에서 다룬다.
8.3.2 키 생성( Key Generation) 대칭키 암호가 사용되는 환경에서의 또 다른 논점은 비밀키를 생성하는 방법이다. 다양한 대칭키 암호는 다양한 사이즈의 키를 필요로 한다. 키는 랜덤하게 선택되어야만 한다. 이는 난수 생성기에 대한 필요성을 야기한다. Note 난수 생성기는 부록 K에서 다룬다.