Block Ciphers
블록 암호
- Random Permutation을 이용한 암호화 메커니즘이다. (Fixed Size Input ↔ Fixed Size Output)
- Keyed-Invertible Function을 통해 암호화/복호화한다.
- 스트림 암호와 달리, 암호 전송 중 Block이 누락되면 복원할 수 없다.
- 아래는 대표적인 블록 암호 체계들이다.
- DES
- Triple DES (3DES)
- AES
- IDEA
- Blowfish
- RC6
- Serpent
- SEED
- 아래는 블록 암호 체계의 운영 방법들이다.
- ECB Mode
- CBC Mode
- CTR Mode
- CFB Mode
- OFB Mode
- GCM Mode
Principles of Block Ciphers (블록 암호의 지향점)
- 블록 암호 체계의 특징인 Confusion과 Diffusion의 의미는 아래와 같다.
- Confusion
- Key값과 Ciphertext간의 관계를 최대한 복잡하게 구성하여 Plaintext의 내용을 유추하기 어렵게 한다. - Diffusion
- Plaintext와 Ciphertext 사이의 통계적인 특징이 보이지 않게 하여 암호화 알고리즘의 추론을 어렵게 한다.
Types of Attacks on Block Ciphers (블록 암호 체계에 대한 공격 유형)
- 공격자가 알고있는 정보의 양에 따라 공격 유형을 아래와 같이 분류할 수 있다.
- 공격자는 목표 암호문을 복호화하거나,
Key를 알아내는것을 목적으로 암호체계를 공격한다.
Type of Attack (공격 유형) |
Known to Attacker (공격자에게 알려진 것) |
Possible Attacks (가능한 공격 유형) |
Ciphertext Only Attack (암호문 단독공격) |
- Encryption Algorithm - Ciphertext (to be decoded) |
- Brute-Force Attack (전수 조사 공격) - Statistical Test Attack (통계적 분석 공격) |
Known Plaintext Attack (알려진 평문 공격) |
- Encryption Algorithm - Ciphertext (to be decoded) - Plaintext-Ciphertext Pairs generated with Secret Key |
- Probable-Word Attack (확률-단어 공격) |
Chosen Plaintext Attack (선택평문 공격) |
- Encryption Algorithm - Ciphertext (to be decoded) - Plaintext (chosen by attacker) and Corresponding Ciphertext Pair generated with Secret Key |
- 공격자가 암호화 능력을 갖추고 있어 평문에 대한 암호문을 얼마든지 생성할 수 있다. |
Chosen Ciphertext Attack (선택암호문 공격) |
- Encryption Algorithm - Ciphertext (to be decoded) - Ciphertext (chosen by attacker) and Corresponding Plaintext Pair generated with Secret Key |
- 공격자가 복호화 능력을 갖추고 있어 암호문에 대한 평문을 얼마든지 생성할 수 있다. |
Chosen Plaintext/Ciphertext Attack Chosen Text Attack (선택문 공격) |
- Encryption Algorithm - Ciphertext (to be decoded) - Plaintext (chosen by attacker) and Corresponding Ciphertext Pair generated with Secret Key - Ciphertext (chosen by attacker) and Corresponding Plaintext Pair generated with Secret Key |
- 공격자가 암호 장치에 직접 접근하여 Permitted Operation을 행할 수 있다. |
Related Key Attack (연관 키 공격) |
- Encryption Algorithm - Plaintext-Ciphertext Pairs generated with Secret Key |
- 공격자는 Plaintext와 Ciphertext간의 관계를 분석하여 Key를 알아낸다. |
Modes of Operation for Block Cipher (블록 암호의 운영 방법)
- 이번 Section에서는 블록 암호 체계를 운영하는 다양한 방식을 설명한다.
- 이때, 설명에 나타나는 수식들에 대한 Legend는 아래와 같다.
Legend | Description |
\(P\) | - Plaintext (평문) |
\(C\) | - Ciphertext (암호문) |
\(K\) | - Key (키) |
\(\oplus\) | - XOR Operation (Exclusive-OR Operation; 베타적 논리합 연산) |
\(E_K()\) | - Encryption Mechanism with Key \(K\) (키 \(K\)를 이용한 암호화 메커니즘) |
\(D_K()\) | - Decryption Mechanism with Key \(K\) (키 \(K\)를 이용한 복호화 메커니즘) |
* \(E\)와 \(D\)는 본 포스트위 윗 부분에서 설명한 DES, 3DES, AES 등을 의미한다.
ECB Mode (Electronic Codebook Mode)
ECB Encryption \(C_i = E(P_i)\) |
ECB Decryption \(P_i = D(C_i)\) |
- Plaintext를 구성하는 Block들을 동일한 Key와 동일한 Encryption/Decryption Mechanism으로
암호화/복호화하는 단순한 방식이다.
(Feedback이 없다.)
- Copy and Paste 공격(Block을 Swap하는 공격)에 취약하다
- 같은 Key로 암호화하다보니, Ciphertext의 분포를 통해 Plaintext를 유추할 수 있게 되는 문제가 있다.
CBC Mode (Cipher Block Chaining Mode)
CBC Encryption \(C_i = E_K(P_i \oplus C_{i-1})\) |
CBC Decryption \(P_i = D_K(C_i) \oplus C_{i-1}\) |
- 선행 암호문이 후행 평문과 XOR 연산되어 ECB보다 복잡성을 높인 운영 방식이다.
(이렇게 선행 암호문이 후행 평문의 암호화에 영향을 미치는 것을 Feedback이라 표현한다.)
- 맨 처음 암호화·복호화에 사용되는 Initialization Vector(IV)는 일반적으로 Random하게 정한다.
- ECB와 CBC 모두, Stream Cipher처럼 누락 오류가 발생되어도 큰 영향을 미치지 않으나,
CBC는 ECB보다 보안이 더 강화된 방식이라는 점에서 의의를 갖는다.
- Copy and Paste 공격(Block을 Swap하는 공격)을 받을 여지는 있지만 복잡도가 높아 공격이 쉽진 않다.
MAC (Message Authentication Code)
- 기본적인 암호화·복호화 메커니즘은 ECB Mode와 동일하나,
MAC에서는 가장 마지막으로 암호화된 Output만을 이용한다는 점에서 차이가 있다.
* MAC (URL)
CTR Mode (Counter Mode)
CTR Encryption \(C_i = P_i \oplus E_K(Counter + Offset)\) |
CTR Decryption \(P_i = D_K(Counter + Offset) \oplus C_i\) |
- 여기서 Nonce는 임의의 값으로, Offset이라 표현되기도 한다.
- 증가하는 Counter값을 이용하여 Plaintext를 암호화·복호화하는 방식이다.
- Feedback없이, 암호의 기밀성을 보장하는 방식 중 하나이다.
- 선행 암호화 과정과 후행 암호화 과정이 독립적·병렬적으로 처리될 수 있어 암호화·복호화 속도가 빠르다.
CFB Mode (Cipher Feedback Mode)
CFB Encryption \(C_i = P_i \oplus E_K(C_{i-1})\) |
CFB Decryption \(P_i = C_i \oplus D_K(C_{i-1})\) |
- 후행 암호문을 먼저 암호화한 다음 평문과 XOR 연산하여 암호문을 생성한다.
- 맨 처음 암호화·복호화에 사용되는 Initialization Vector(IV)는 일반적으로 Random하게 정한다.
OFB Mode (Output Feedback Mode, OFM)
OFB Encryption $$C_i = P_i \oplus R_i\\ R_i = E_K(R_{i-1})\\ R_0 = 0$$ |
OFB Decryption $$P_i = C_i \oplus R_i\\ R_i = D_K(R_{i-1})\\ R_0 = 0$$ |
- 암호화된 Output을 다음 암호화 과정에 이용하는 방식이다.
- 맨 처음 암호화·복호화에 사용되는 Initialization Vector(IV)는 일반적으로 Random하게 정한다.
GCM Mode (Galois Counter Mode)
- Multiplication(mult; 곱셈) 과정에서
병렬 연산에 유리한(빠른) 유한체 곱셈(갈루아 곱셈)을 수행하기 때문에
갈루아 카운터 모드라는 이름이 붙었다.
- 최종 Output인 Authentication Tag(Auth Tag)를 통해 무결성을 보장한다.
DES (Data Encryption Standard, Single DES)
- 1970년대에 개발된, IBM의 Lucifer Cipher에 기반한 암호 체계이다.
- DES의 개발 과정에서 NIST가 NSA에 암호 체계 개발을 의뢰했고,
NSA는 Lucifer Cipher를 기반으로 암호 체계를 개발하며 설계 과정을 모두 기밀로 하였는데,
이를 이유로 백도어 의혹이 있었으나 훗날 사실이 아님이 밝혀졌다.
(Lucifer는 128비트 체계인데 반해, DES는 56비트 체계를 채택하여 당시에는 더욱 의심을 샀다.
높은 비트수는 곧 높은 보안성을 의미하는데 오히려 이를 낮춰서 개발했기 때문이다.)
- Brute Force Attack(전수조사)으로도 암호 체계가 Break되는 것이 밝혀져
DES를 개선한 3DES가 개발되게 된다.
(그래서 블록 암호 체계의 비트수는 보통 80-bit 이상이다.)
General DES Algorithm
- Initial Permutation을 S-Boxes라 불리는 Container로 옮겨 여러 연산을 거쳐 암호화한다.
(이 과정을 총 16번 수행한다. = 16 Rounds)
- Key 전체는 56-bit이나, 암호화에 사용되는 Key는 48-bit인데 이는 8-bit는 사용하지 않기 때문이다.
Triple DES (3DES, Triple Data Encryption Standard)
\(C = E_{K1}( D_{K2}( E_{K1}(P) ) )\)
\(P = D_{K1}( E_{K2}( D_{K1}(C) ) )\)
\(P\) : Plaintext
\(C\) : Ciphertext
\(E\) : Encryption
\(D\) : Decryption
\(K_i\) : Key
- 기존 DES의 56비트는 상대적으로 너무 작아 보안에 취약하지만,
DES가 너무 오랫동안 사용되어진 탓에 기존에 DES를 사용하던 많은 시스템들을 전부 바꿀 수 없어
DES를 개선시켜 만든 암호 체계이다.
(기존 DES 체계를 재활용하기 때문에 DES와 3DES는 호환된다.)
- 3DES는 112-bit key 체계를 갖는다.
- 두 번의 암호화를 수행하는 데, 두 번 모두 같은 Key를 사용하면 의미가 없기 때문에
기존 DES의 56-bit Key 두 개가 요구된다.)
Double DES (2DES)
\(C = E_{K2}( E_{K1}(P) )\)
\(P = D_{K1}( D_{K2}(P) )\)
\(P\) : Plaintext
\(C\) : Ciphertext
\(E\) : Encryption
\(D\) : Decryption
\(K_i\) : Key
- Meet-in-the-Middle Attack에 노출되어 있기 때문에 사용되지 않는 암호 체계이다.
- Meet-in-the-Middle Attack은 Known Plaintext Attack(알려진 평문 공격)에 속하는 공격 방법이다.
* Middle Point (중간 지점)
\(C = E_{K2}( E_{K1}(P) )\)
- 위 Ciphertext를 Key \(K2\)로 Decryption해보자.
\(D_{K2}(C) = E_{K1}(P)\)
- 이 지점(중간 지점)에서 \(D_{K2}(C)\)값과 \(E_{K1}(P)\)값이 서로 일치하는 경우가 생기는 데,
공격자는 이러한 경우들을 모아 \(K1\)과 \(K2\)가 얼마인지를 알아낼 수 있게 된다.
- \(D_{K2}(C)\)에서 Key \(K2\)를 찾아내는데 걸리는 시간은 \(2^{56}\)이고 (DES의 Key의 크기가 56-bit이므로)
\(E_{K1}(P)\)에서 Key \(K1\)을 찾아내는데 걸리는 시간도 \(2^{56}\)이며,
추가적인 연산시간까지 다 합치면 약 \(2^{60}\) 만큼의 시간이 소요되는데,
이는 Single DES와 별반 다를바가 없기 때문에 Double DES는 사용되지 않는 것이다.
AES (Advanced Encryption Standard)
- DES를 대체한 암호 체계로 1990년대 후반에 개발되었다.
- 공개 입찰로 지정된 표준 암호 체계이기 때문에, 백도어 이슈로 부터 자유로웠다.
- Rijndael Algorithm을 기반으로 작동한다.
- 128-bit의 Input Block을 Matrix로 변환하고,
128-bit 혹은 192-bit 혹은 256-bit의 Key를 통해 암호화한다.
- 10개~14개의 Round에서 아래 4가지 Function들을 사용하여 암호화한다.
- ByteSub (Nonlinear Layer)
- 변환 규칙에 의거하여, 바이트 단위로 치환한다. (비선형적 합성) - ShiftRow (Linear Mixing Layer)
- 행단위의 Shift 연산을 수행한다. - MixColumn (Nonlinear Layer)
- 열단위로 섞는다. - AddRoundKey (Key Addition Layer)
- Key Schedule에 의거하여, 라운드마다 정해진 Key를 부여한다.
- 복호화를 위해서, 위 4개의 함수들은 역함수가 존재한다. (존재해야 한다.)
Reference: Information Security: Principles and Practice 2nd Edition
(Mark Stamp 저, Pearson, 2011)
Reference: 2022학년도 1학기 홍익대학교 네트워크 보안 강의, 이윤규 교수님
Reference: 네이버 지식백과; 훤히 보이는 정보보호, 적을 알고 나를 안다: 공격자 모델 파악하기 (2022.04.13 검색) (URL)