4장. 블록 암호와 DES
DES(Data Encryption Standard)는 AES 도입 전까지 가장 널리 사용된 대칭 암호 알고리즘이다. DES의 구조를 이해하면 다른 대칭 암호의 원리도 파악할 수 있다. 이 장에서는 블록 암호의 일반적 구조와 DES의 동작, 설계 원칙을 다룬다.
학습 목표
- 스트림 암호와 블록 암호의 차이를 이해한다.
- Feistel 암호 구조와 복호화가 암호화의 역과정임을 설명한다.
- DES의 전체적인 구조를 설명한다.
- 눈사태 효과(Avalanche Effect)의 개념을 이해한다.
- DES의 암호학적 강도를 논의한다.
- 블록 암호의 주요 설계 원칙을 요약한다.
4.1 전통적 블록 암호 구조
스트림 암호 vs 블록 암호
| 구분 | 스트림 암호 (Stream Cipher) | 블록 암호 (Block Cipher) |
|---|---|---|
| 처리 단위 | 1비트 또는 1바이트 | 고정 크기 블록 (64 또는 128비트) |
| 키스트림 | 키 기반 비트 스트림 생성기 사용 | 블록 단위 변환 |
| 예시 | Autokey Vigenère, Vernam | DES, AES |
| 활용 | 특수 목적 | 네트워크 기반 응용에서 주류 |
이상적 블록 암호의 한계
비트 블록 암호에서 가능한 가역 매핑(reversible mapping) 수는 이다. 이상적 블록 암호는 이 모든 매핑을 허용하지만, 키 크기가 비트로 실용적이지 않다.
예시: 64비트 블록의 경우 필요한 키 길이 = 비트
확산과 혼돈 (Diffusion and Confusion)
Claude Shannon이 제안한 암호 시스템의 두 가지 기본 요소이다.
| 개념 | 목적 | 구현 방법 |
|---|---|---|
| 확산 (Diffusion) | 평문의 통계적 구조를 암호문 전체에 분산 | 순열(Permutation) 반복 적용 |
| 혼돈 (Confusion) | 암호문과 키 간의 관계를 복잡하게 만듦 | 복잡한 치환(Substitution) 알고리즘 |
Feistel 암호 구조
Feistel은 곱 암호(Product Cipher) 개념을 이용하여 치환과 순열을 교대로 수행하는 실용적인 블록 암호를 제안했다.
암호화 과정
- 비트 평문을 두 반쪽 , 으로 분할
- 라운드 반복 처리 (일반적으로 16라운드)
- 각 라운드 에서:
- 최종 출력에서 좌우 반쪽 교환 → 암호문
복호화 과정
암호화와 동일한 알고리즘을 사용하되, 서브키를 역순으로 적용한다.
XOR의 성질 ()에 의해 복호화가 성립한다. 라운드 함수 가 가역일 필요는 없다.
Feistel 암호의 설계 매개변수
| 매개변수 | 설명 | 일반적 값 |
|---|---|---|
| 블록 크기 | 클수록 안전하지만 속도 저하 | 64비트 (전통), 128비트 (AES) |
| 키 크기 | 클수록 무차별 대입에 강함 | 128비트 이상 |
| 라운드 수 | 많을수록 안전 | 16라운드 |
| 서브키 생성 | 복잡할수록 분석 어려움 | — |
| 라운드 함수 F | 복잡할수록 분석 어려움 | 비선형 함수 |
4.2 DES (Data Encryption Standard)
개요
| 항목 | 값 |
|---|---|
| 발표 | 1977년, NIST (당시 NBS) |
| 표준 번호 | FIPS PUB 46 |
| 블록 크기 | 64비트 |
| 키 크기 | 56비트 (실제 입력 64비트 중 8비트는 패리티) |
| 라운드 수 | 16 |
| 구조 | Feistel 암호 |
DES 암호화 과정
- 초기 순열 (IP): 64비트 평문의 비트 재배열
- 16라운드 Feistel 처리: 각 라운드에서 48비트 서브키 사용
- 32비트 교환: 최종 라운드 후 좌우 반쪽 교환
- 역초기 순열 (IP⁻¹): 초기 순열의 역과정 → 64비트 암호문
서브키 생성
- 64비트 키 → Permuted Choice 1 (56비트 선택)
- 각 라운드마다 좌순환 시프트(left circular shift) 수행
- Permuted Choice 2로 48비트 서브키 추출
DES 복호화
Feistel 구조이므로 암호화와 동일한 알고리즘을 사용하되, 서브키를 역순으로 적용한다.
4.3 DES 예제
예제 데이터
| 항목 | 16진수 값 |
|---|---|
| 평문 | 02468aceeca86420 |
| 키 | 0f1571c947d9e859 |
| 암호문 | da02ce3a89ecac3b |
초기 순열 후 , 에서 시작하여 16라운드를 거쳐 최종 역초기 순열을 적용하면 암호문이 생성된다.
눈사태 효과 (Avalanche Effect)
평문이나 키의 1비트 변화가 암호문의 다수 비트 변화를 유발하는 성질이다.
평문 1비트 변경 시:
- 1라운드 후: 1비트 차이
- 3라운드 후: 18비트 차이
- 최종 암호문: 32비트 차이 (64비트 중 절반)
키 1비트 변경 시:
- 3라운드 후: 25비트 차이
- 최종 암호문: 30비트 차이
4.4 DES의 강도
56비트 키의 문제
| 공격 시스템 | 탐색 속도 | DES (56비트) 해독 시간 |
|---|---|---|
| 단일 PC | 키/초 | 약 1.125년 |
| 슈퍼컴퓨터 | 키/초 | 약 1시간 |
키 크기별 무차별 대입 공격 시간 비교
| 키 크기 | 암호 | 키/초 | 키/초 |
|---|---|---|---|
| 56비트 | DES | 약 1.125년 | 약 1시간 |
| 128비트 | AES | 년 | 년 |
| 168비트 | Triple DES | 년 | 년 |
| 256비트 | AES | 년 | 년 |
알고리즘 자체의 강도
DES의 8개 S-box의 설계 기준이 공개되지 않아 의도적인 약점 삽입 여부에 대한 의혹이 있었으나, 치명적인 약점은 발견되지 않았다.
타이밍 공격 (Timing Attack)
복호화 시간의 미세한 차이를 관찰하여 키 정보를 추론하는 공격이다. DES는 타이밍 공격에 비교적 강한 것으로 평가된다.
4.5 블록 암호 설계 원칙
라운드 수 (Number of Rounds)
라운드 수가 많을수록 암호 분석이 어려워진다. 설계 기준은 알려진 암호 분석 공격이 무차별 대입 공격보다 더 많은 연산량을 요구하도록 하는 것이다.
DES의 경우: 16라운드 DES의 차분 암호 분석(differential cryptanalysis)에 필요한 연산량은 으로, 무차별 대입()과 비슷하다. 15라운드 이하에서는 차분 암호 분석이 무차별 대입보다 효율적이다.
라운드 함수 F의 설계
| 기준 | 설명 |
|---|---|
| 비선형성 | 선형 방정식으로 근사하기 어려워야 함 |
| 엄격 눈사태 기준 (SAC) | 입력 1비트 반전 시 출력 각 비트가 확률 1/2로 변화 |
| 비트 독립 기준 (BIC) | 입력 1비트 반전 시 출력 비트들이 독립적으로 변화 |
키 스케줄 알고리즘
서브키 생성 알고리즘은 개별 서브키의 추론과 전체 키로의 역추적을 최대한 어렵게 해야 한다. 최소한 키/암호문에 대해 SAC와 BIC를 보장해야 한다.
주요 용어
| 한국어 | 영어 | 설명 |
|---|---|---|
| 눈사태 효과 | Avalanche Effect | 입력 1비트 변화가 출력 다수 비트에 영향 |
| 블록 암호 | Block Cipher | 고정 크기 블록 단위 암호화 |
| 혼돈 | Confusion | 암호문-키 관계의 복잡화 |
| 확산 | Diffusion | 평문 통계 구조의 분산 |
| Feistel 암호 | Feistel Cipher | 치환/순열 교대 반복 구조 |
| 곱 암호 | Product Cipher | 둘 이상의 암호를 순차 적용 |
| 라운드 함수 | Round Function | 각 라운드에서 수행되는 함수 |
| 서브키 | Subkey | 각 라운드에 사용되는 키 |
| 가역 매핑 | Reversible Mapping | 역변환이 가능한 매핑 |
| S-박스 | S-box | DES의 치환 테이블 |
| 차분 암호 분석 | Differential Cryptanalysis | 입력 차이와 출력 차이의 관계를 이용한 공격 |
| 타이밍 공격 | Timing Attack | 연산 시간 차이를 이용한 공격 |