[정보보호] 블록암호와 DES
이번 글에서는 블록암호(Block Cipher)의 개념과 구조, 그리고 그 대표 사례인 DES(Data Encryption Standard)를
다루어 보겠다.
블록암호란?
블록암호는 말 그대로 고정된 크기의 블록 단위로 데이터를 암호화하는 방식이다.
- 블록 크기: 보통 64bit 또는 128bit
- 입력을 일정 크기로 쪼개 암호화
- 스트림 암호는 bit 단위로 처리하는 것과 대조됨
암호 구조 비교
| 스트림 암호 | 비트·바이트 단위 암호화 | RC4 |
| 블록 암호 | 고정된 블록 단위 암호화 | DES, AES |
Feistel 구조
DES뿐 아니라 많은 블록암호가 사용하는 구조로 “블록을 두 개로 나누고, 오른쪽을 함수에 넣어 왼쪽과 섞어주는 구조”이다.
Feistel 라운드 구조
- 입력을 L(왼쪽), R(오른쪽)으로 분할
- R을 F 함수에 넣고, L과 XOR
- L과 R을 스왑
- 여러 라운드 반복
Lᵢ → Rᵢ
Rᵢ → Lᵢ ⊕ F(Rᵢ, Kᵢ)
→ 구조가 단순하면서도 매우 강력
→ 복호화 시에도 동일한 구조를 사용 가능(키만 거꾸로 사용)
DES(Data Encryption Standard)란?
1977년 NIST에서 표준으로 제정된 블록암호 알고리즘이다.
- 블록 크기: 64bit
- 키 길이: 56bit
- 총 16라운드의 Feistel 구조

현재는 짧은 키 길이 때문에 안전하지 않아 AES로 대부분 대체되었지만, 암호학 개념을 배우기에 가장 좋은 예시이다.
DES 암호화 전체 구조
DES는 다음 단계로 이루어진다:
초기순열(IP)
→ 16라운드 Feistel 진행
→ 최종순열(FP)
1️⃣ 초기순열(IP, Initial Permutation)
- 입력 64bit를 의미 있는 순서로 다시 섞음
- 안전성보다는 하드웨어 구현 편의성 때문에 존재
2️⃣ 16라운드 라운드 처리(Feistel)
- 핵심 암호화 과정
- 각 라운드에서 F함수가 수행된다.
- Expansion(확장)
- XOR with key
- Substitution(S-box)
- Permutation(P-box)
- L ⟷ R 스왑
3️⃣ 최종순열(FP, Final Permutation)
- IP의 역순
DES 라운드 내부 상세
DES의 진짜 암호 강도는 라운드 내부 구조(F 함수)에서 나온다. 위에서 2번의 단계에 해당된다. 이를 자세하게 살펴보자.
(1) 확장(Expansion, E-box)
오른쪽 32bit → 48bit로 확장
이유:
- S-box 입력은 6bit 필요
- 키(48bit)와의 XOR을 위해 맞춰야 함
(2) XOR with Round Key
라운드 키 48bit를 XOR
→ 키 스케줄(Key Schedule)이 따로 존재
→ 원래 56bit 키 → 매 라운드마다 48bit 키 생성
(3) S-box 치환 (가장 중요한 부분!)
48bit를 6bit × 8개 = 8개 블록으로 나눔 → 각 S-box로 입력
S-box는 다음 역할을 수행한다.
- 6bit → 4bit 치환
- 비선형성 제공
- 암호 강도의 핵심
→ S-box가 없다면 해독이 매우 쉬워짐
(4) P-box(Permutation)
S-box 32bit 출력값을 고정된 테이블로 섞음
→ 확산(diffusion) 제공
(5) L/R 스왑
마지막 라운드를 제외한 15개 라운드에서 L과 R을 서로 바꿈.
위에서는 DES의 암호화 방식에 대해 살펴보았다. DES의 효과 및 현재 사용하지 않는 이유에 대해 알아보겠다.
Avalanche Effect(쇄도 효과)
DES는 입력을 조금만 바꿔도 출력이 크게 바뀌도록 설계됨.
입력 1bit 변화 → 출력 32bit 중 절반 이상 변화
→ 좋은 블록암호의 필수 조건
→ 암호 분석을 어렵게 만듦
DES가 더 이상 안전하지 않은 이유
- 키 길이 56bit → 너무 짧다
: 1990년대 중반부터 전수조사(Brute force)로 1~2일이면 깨진다. - S-box는 강력하지만 구조가 오래됨
: 현대 크립토 분석 도구 앞에서는 취약
그래서 대체된 알고리즘으로 AES가 나왔다.
- 키 길이 128/192/256bit
- Rijndael 구조
- 훨씬 강력함
AES에 대해선 다음 포스팅에서 다룰 예정이다.
마무리
이번 포스팅에서는 블록암호와 DES에 대해 살펴봤다.
| 블록암호 | 고정 크기 블록 단위 암호 |
| Feistel 구조 | L/R 분리 + 함수 적용 + 스왑 |
| DES | 56bit 키, 16라운드, Feistel 기반 |
| S-box | 비선형성 제공, DES 강도 핵심 |
| Avalanche Effect | 1bit 변화 → 큰 변화 유도 |
| 단점 | 짧은 키 길이로 인해 더 이상 안전하지 않음 |
DES는 현대에서는 사용하지 않지만, 블록암호의 구조, S-box의 중요성, 확산·혼돈 개념을 배우기 위해 많이 학습한다.
다음 포스팅은 AES에 대해 포스팅하겠다!