
Stream Cipher (스트림 암호)

개념
- 평문을 1비트 또는 1바이트 단위로 실시간 암호화
- 평문의 각 비트와 키 스트림을 XOR(⊕) 하여 암호문 생성
- 대칭키 방식: 송신자와 수신자가 같은 키를 사용
예시
- Autokeyed Vigenère Cipher
- Vernam Cipher
이상적인 경우:
- One-Time Pad
→ 평문과 같은 길이의 완전히 무작위한 키 스트림 을 사용
→ 이론적으로 완벽한 보안 (Perfect Secrecy)
현실적 문제:
- 매번 새로운 키스트림을 만들고 전달해야 함 (실제 사용 어려움)
- 데이터 양이 많아지면 키 분배가 불가능에 가까움
Stream Cipher (실용적인 구현)
- 보통 키스트림 생성기를 알고리즘으로 구현
- 두 사용자는 생성 키 하나만 공유 → 동일한 알고리즘으로 같은 키스트림 생성 가능
요구 조건:
- 과거 키스트림을 알아도 미래 키스트림 예측 불가능해야 함
- 여전히 대칭 암호 구조: 같은 키 공유
Block Cipher (블록 암호)

정의
- 64비트, 128비트 등 고정된 블록 단위로 암호화
- 평문 블록 → 암호화 알고리즘 → 암호문 블록
특징
- 한 블록 전체를 암호화 (스트림 암호는 비트/바이트 단위)
- 일반적으로 대부분의 네트워크 기반 암호화에 사용됨
- 여전히 대칭 구조 (키 공유 필요)
비교 구조도 (Figure 4.1)

- Stream Cipher: 평문과 키스트림을 XOR → 암호문
- Block Cipher: 평문 블록 → 암호화 알고리즘(K) → 암호문 블록
Block Substitution (블록 치환)

Figure 4.2 (n = 4)
- 각 4비트 입력 조합을 16개의 가능한 조합 중 하나로 전부 치환
- 따라서 치환 가능한 경우의 수 = 16! (순열)
- 입력이 n비트라면, 가능한 조합 수는 2ⁿ, 가능한 치환표 수는 (2ⁿ)!
※ 이처럼 고정된 비트 블록 단위로 치환하는 방식은 블록 암호의 기본 구조가 됨
Substitution Table 예시 (Table 4.1)


▸ 예시는 고정된 치환 규칙을 따르는 테이블로 구성됨
▸ 암호화는 고정된 테이블(=키)에 따라 수행되며 복호화는 역테이블 사용
- 4비트: 입력 조합 16개 → (2⁴)! = 16!
- 128비트: 입력 조합 2¹²⁸개 → (2¹²⁸)!
🔹 동일한 치환 표현 방법 (Playfair 예시)
- Large table: 모든 조합 나열
- Compact table: 키워드를 기준으로 암호화 규칙을 구성
- 같은 키라도 표현 방식이 다를 뿐, 적용되는 규칙은 동일
- Playfair나 Substitution Table 모두 키 기반 암호화 규칙을 압축 표현 가능
Feistel Cipher (페이스텔 구조)

구조
- 암호화 알고리즘의 표준 구조 중 하나
- 치환(Substitution) + 전치(Permutation) 조합
특징:
- 왼쪽/오른쪽 절반으로 나누고, 라운드를 반복
- 같은 구조로 복호화도 가능 (역순으로만 수행)
- 현재 많은 블록 암호 (DES 등)에서 사용됨
🔹 Diffusion & Confusion (Claude Shannon 이론)
| 개념 | 설명 |
| Diffusion (확산) | 평문의 통계 구조를 암호문 전체로 분산시켜 숨김→ 평문 1비트가 암호문 다수 비트에 영향 |
| Confusion (혼돈) | 키와 암호문 사이 관계를 복잡하게 만듦→ 키 구조를 유추할 수 없게 함 |
- 암호 알고리즘의 보안을 높이기 위한 필수 요소
Feistel Round 구조도 (Figure 4.3)

- 16라운드로 구성된 Feistel 암호 구조
- 각 라운드에서 키가 다르게 적용됨 (서브키 K₁~K₁₆)
- 복호화는 역순으로 라운드 진행
- 좌우 블록 분할: L, R
- 라운드 함수 F: 입력 R과 서브키 Ki를 조합하여 새로운 R 생성
- 암호화 공식:
- Lᵢ = Rᵢ₋₁
- Rᵢ = Lᵢ₋₁ ⊕ F(Rᵢ₋₁, Kᵢ)
DES (Data Encryption Standard)

개요
- 1977년 미국 NIST에서 표준으로 채택
- 64비트 블록을 56비트 키로 암호화
- 16개의 Feistel 라운드로 구성됨
특징
- 암호화와 복호화 구조 동일 (키 순서만 반대로)
- 과거 가장 많이 사용된 알고리즘 → 지금은 AES로 대체
요약표: Stream vs Block Cipher
| 항목 | Stream Cipher | Block Cipher |
| 단위 | 1비트 or 1바이트 | 블록 단위 (64/128비트 등) |
| 예시 | Vernam, RC4 | DES, AES |
| 장점 | 빠름, 실시간 암호화 | 구조적 보안성 |
| 단점 | 키 관리 어려움 | 블록 단위로 지연 가능 |
| 암호 구조 | XOR 기반 | Feistel 등 구조화됨 |
Table 4.5 해석: "완전 탐색에 필요한 평균 시간"

🔹키 크기 = 보안 강도
- 키가 길수록 **가능한 키 수(조합)**가 기하급수적으로 증가 → 브루트 포스로 뚫기 훨씬 어려워짐
🔹DES의 보안성 한계
- DES는 키 크기가 56비트로 작아서 현대 하드웨어 기준 1시간이면 뚫림
- 그래서 DES는 더 이상 안전하지 않음!
🔹 AES는 안전한가?
- AES-128: 5.3 × 10¹⁸년 (10¹² 속도 기준) → 사실상 불가능
- AES-256: 10⁵²년 이상 필요 → 최고 보안성
🔹Triple DES
- DES보다 강력하지만, AES보다 느리고 비효율적
🔹모노알파벳 암호
- 26! ≈ 4 × 10²⁶의 키 조합이 있어도, 분석으로 쉽게 깨지기 때문에 보안성 없음
(시간만 보면 강력해 보이지만 실제로는 취약)
🔍 참고 지식
| 용어 | 의미 |
| 10⁹ decryptions/s | 1초에 10억 번의 복호화 시도 |
| 10¹² decryptions/s | 1초에 1조 번의 복호화 시도 |
| Exhaustive search (브루트 포스) | 가능한 모든 키를 다 시도해보는 공격 방식 |
| 평균 시간 | 평균적으로 전체 키의 절반을 시도해야 정답을 찾으므로시간 = (총 키 수)/2 ÷ 초당 복호화 속도 |
정리: 키 길이에 따른 보안 비교
| 키 길이 | 추천 여부 | 이유 |
| 56bit (DES) | ❌ 사용 금지 | 브루트포스 가능 |
| 128bit (AES) | ✅ 안전 | 수십 억 년 필요 |
| 256bit (AES) | ✅ 매우 안전 | 우주 나이보다 김 |
| Monoalphabetic | ❌ 매우 취약 | 빈도 분석에 취약 |
'컴퓨터 보안' 카테고리의 다른 글
| 6장-AES (0) | 2025.04.22 |
|---|---|
| 5장-Finite Fields and Polynomial Operation (0) | 2025.04.16 |
| 3장-고전 암호 기법 (0) | 2025.04.11 |
| 2장-정수론 (0) | 2025.04.11 |
| 1장 (0) | 2025.04.09 |