다양한 기록

블록 암호 알고리즘, DES / AES 본문

정보보호이론

블록 암호 알고리즘, DES / AES

라구넹 2024. 10. 27. 23:06

평문과 암호문이 고정된 크기의 블록으로 구성

- 평문을 일정한 크기의 블록으로 나누고, 고정된 크기를 가지는 블록 단위 암호문 생성

 

블록 암호는 혼돈(Confusion)과 확산(Diffusion) 둘 다 적용됨

- P-box(permutation box), S-box(Substitution box), XOR, Shift, Swap 등을 결합하여 설계

- 여러 라운드를 반복

 

혼돈(Confusion)

- 키와 암호문과의 관계를 감추는 성질, 키의 변화가 암호문에 미치는 영향을 감춰야 함

- 치환(substitution)을 이용, S-box

 

확산(Diffusion)

- 평문과 암호문과의 관계를 감추는 성질, 평문 한 비트의 변화가 암호문의 모든 비트에 확산되어야 함

- 순열(Permutation)을 이용, P-box

 

P-box

입력 비트와 출력 비트 사이즈에 따라 세 종류로 나뉨

- 단순(Straight) P-box

- 축소 (Compression) P-box

- 확장 (Expansion) P-box

 

S-box

  00 01 10 11
0 00 10 01 11
1 10 00 11 01

입력 비트와 출력 비트 개수가 달라도 상관없는데,

역함수가 존재하기 위해서는 입력 비트와 출력 비트의 개수가 같아야 함

 

라운드(round)

- 확산과 혼돈은 S-box, P-box, 기타 구성 요소들이 결합된 합성 암호(product cipher)를 반복적으로 사용하여 얻어짐

- 합성 암호가 반복적으로 사용되는 것을 라운드라 함


DES (Data Encription Standard)

- 대칭키 블록 암호

- 64비트 블록 암호, 56비트 키, 16라운드

 

Li = Ri-1

Ri = Li-1 XOR f(Ri-1, ki)

반 잘라서 오른쪽은 다음 라운드의 왼쪽으로 사용

다음 라운드의 오른쪽? (f?)

1. 이전 라운드의 오른쪽 32비트가 expansion P-box 통과 => 48비트

2. 키와 XOR

3. S-box 통과 => 32 비트

4. Straight P-box 통과

이후 이전 라운드의 왼쪽과 XOR 되면 다음 라운드의 오른쪽이 됨

 

- 1970년대에 개발됨

- IBM의 Lucifer 암호

- 64비트 키를 사용하여 64비트 데이터를 암호화함

- 64비트 키는 패리티 비트 제거 후 56비트 키로 변환, 각 라운드마다 48비트 키로 생성되어 사용됨

- 복호화 알고리즘은 암호화 알고리즘과 동일(Feistel 구조), 키만 reverse order

 

병렬처리 및 DES 암호 깨기 전용 칩 => 22시간 내에.. 더 빠르게도 키 분석 가능

 

* 대칭키 암호화는 양자컴퓨터에 은근히 강함. 키 사이즈 늘리면 됨

* 공개키 암호화는 수학적인 원리 기반이라 양자 컴퓨터에 양함

 

 

이중 DES(Double DES)

- DES를 두 번 사용

키가 112비트니까 안전성도 그만큼 증가?

=> X

 

Meet-in-the-Middle Attack

* 가정 상황: 공격자가 플레인 텍스트와 사이퍼 텍스트 쌍을 찾은 경우

양쪽 브루트 포스하고 정렬: 2*2^56 + O(nlogn) .. 2^63

대략 63비트 키 정도의 안정성밖에 안됨

 

삼중 DES (Trpple DES)

2^168? 아님

실제로는 112비트 키 사용

E-E-E 가 아니라 E-D-E 사용 (복호화는 D-E-D)

 

E-D-E 사용 시 DES와 호환 가능

그냥 키 세개 다 똑같은 걸로 하면 DES 한 번이랑 같음

 

그리고 MITM 공격에 당해도 112비트 안정성 보장 가능함

한 방향에서 뚫고 중간에서 만나려고 시도해야 하기 때문에 어쩄든 2^112만큼의 시도는 필요

 

그러나 AES 등장으로 점점 사라지는 추세

 

* DES의 키 사이즈

64, 56, 48이라는 많은 이야기가 있으나 다 맞는 말임

기본 64비트에 각 8비트마다 끝에 패리티비트 제거 시 56비트

각 라운드마다는 48비트 사용


AES (Advanced Encryption Standard)

- DES의 키 사이즈(56비트)는 현재 컴퓨팅 파워에서는 전수조사에 취약

- 라인댈(Rijndael) 알고리즘

- 여러 라운드 반복

- Feistel 구조가 아님니라 암호화 알고리즘과 복호화 알고리즘이 다름 (역함수를 이용)

 

라운드 수 키 사이즈
10 128
12 192
14 256

안전성 제공을 위해 4 종류의 구성 요소 사용

- SubBytes

- ShiftRow

- MixColumns

- AddRoundKey

 

SubBytes => ShiftRow => MixColumns => AddRoundKey

 

AddRoundKey가 1라운드 전에 한번 수행됨

마지막 라운드에서는 MixColumns가 수행되지 않음

 

블록이 상태(State)로 표현

- 상태는 원소가 한 바이트인 4*4 행렬 .. 열 기준으로 왼쪽부터 채움

 

SubBytes (Substitute Bytes)

상위 4 비트가 행, 하위 4비트가 열을 결정

치환 표가 있으면 C6 에서 C는 행, 6은 열로 지정되어 치환

 

ShiftRows

제일 위의 행은 그대로 두고 그 밑부터 n+1씩 왼쪽으로 밀어버림

복호화는 n+1씩 오른쪽으로 밀면 됨

 

MixColumns

상태값을 행렬곱하여 비트 단위로 섞음

이로써 평문이 가지던 특징이 비트 단위로 깨짐

복호화를 위한 역함수 존재

 

AddRoundKey

상태에 키 더해주는 거

XOR

 

AES의 모든 구성 요소는 invertible함

- 복호화 알고리즘에서는 모든 구성요소들이 inverse 형태로 수행됨

- round key는 reverse order로 사용해야 함

 

국내 블록 암호

SEED, ARIA, HIGHT,