대칭키 암호·블록과 스트림
Feistel·SPN, 대표 알고리즘, 키스트림과 일회용 패드의 차이를 이해합니다.
1. 공유 비밀키와 두 가지 처리 방식
대칭키 암호는 송·수신자가 공유하는 비밀로 데이터를 보호한다. 대용량 처리에 효율적이지만 안전한 키 분배와 보관이 필요하다.
| 구분 | 블록 암호 | 스트림 암호 |
|---|---|---|
| 처리 | 고정 길이 블록을 변환 | 키스트림과 데이터를 연속 결합 |
| 표현 | C = E_K(P) | C = P XOR Z |
| 긴 데이터 | 운영 모드로 연결 | 키스트림을 계속 생성 |
| 주의점 | 모드·초기값·패딩·인증 | 키스트림 반복·동기·인증 |
블록 크기는 한 번에 처리하는 데이터 길이이고 키 길이는 비밀키의 길이다. AES-256도 블록 크기는 128비트다. CFB·OFB·CTR은 블록 암호를 이용해 스트림 형태로 처리하는 운영 모드다.
2. 혼돈·확산과 라운드
- 혼돈(Confusion): 키와 암호문 사이의 관계를 복잡하게 만든다. 비선형 치환이 대표 수단이다.
- 확산(Diffusion): 평문의 국소적인 정보가 여러 출력 위치에 퍼지도록 한다.
- 쇄도 효과(Avalanche): 입력·키의 작은 변화가 출력의 많은 비트 변화로 이어지는 성질이다.
좋은 쇄도 효과만으로 안전성이 증명되지는 않는다. 라운드는 치환·확산·키 결합 등을 반복하는 단위이며, 하나의 단순 변환만 쓰는 암호와 구분한다.
3. Feistel과 SPN
Feistel 구조는 블록을 두 부분으로 나누고 한쪽에 라운드 함수를 적용해 다른 쪽과 XOR한다. 대표적인 한 라운드는 다음과 같다.
L_i = R_(i-1)
R_i = L_(i-1) XOR F(R_(i-1), K_i)
다음 상태를 알면 이전 오른쪽 값은 L_i이고 이전 왼쪽 값은 R_i XOR F(L_i, K_i)로 구한다. 따라서 F 자체에 역함수가 없어도 전체 라운드를 되돌릴 수 있다. 같은 구조에 라운드 키를 역순 적용하는 복호화가 가능하다.
SPN은 치환 계층과 순열·선형 확산 계층, 키 결합을 반복한다. 복호화에는 대응하는 역변환을 사용한다. DES는 Feistel, AES는 SPN 계열의 대표다.
4. DES·3DES·AES
| 항목 | DES | 3DES·TDEA | AES |
|---|---|---|---|
| 블록 크기 | 64비트 | 64비트 | 128비트 |
| 키 | 유효 56비트, 표기 64비트 중 8비트는 패리티 | 여러 DES 키 조합 | 128·192·256비트 |
| 구조 | 16라운드 Feistel | DES 연산 반복, 대표적으로 EDE | SPN 계열 |
| 핵심 | 짧은 키로 전수조사에 취약 | 키 재료 길이와 실제 보안 강도가 같지 않음 | 키 길이에 따라 10·12·14라운드 |
3키 3DES의 키 재료는 유효 비트 기준 168비트지만 중간 일치 공격 때문에 단순히 168비트 보안 강도로 해석하지 않는다. DES·3DES는 역사적 알고리즘과 공격 원리를 배우는 대상으로, 새로운 데이터 보호에 그대로 채택할 방식으로 안내하지 않는다.
AES의 대표 변환은 SubBytes, ShiftRows, MixColumns, AddRoundKey다. 바이트 치환, 행 이동, 열 혼합, 라운드 키 XOR의 역할을 구분한다. 마지막 라운드에는 MixColumns가 없다. S-box 전체 값이나 유한체 연산의 상세 유도는 암기 대상으로 확장하지 않는다.
5. 국내 대표 블록 암호
| 알고리즘 | 블록 크기 | 키 길이 | 핵심 특징 |
|---|---|---|---|
| SEED | 128비트 | 128비트 | Feistel 계열 |
| ARIA | 128비트 | 128·192·256비트 | Involutional SPN |
| HIGHT | 64비트 | 128비트 | 경량 환경을 고려한 설계 |
| LEA | 128비트 | 128·192·256비트 | 덧셈·회전·XOR를 활용하는 ARX 구조 |
알고리즘 이름, 블록 크기, 키 길이를 함께 구분한다. 특정 환경에서의 실제 속도와 승인 여부는 구현·운영 모드·정책에 따라 달라지므로 이름만으로 단정하지 않는다.
6. 스트림 암호의 XOR와 동기
같은 키스트림을 다시 XOR하면 원래 값으로 돌아온다.
평문 P = 10110010
키스트림 Z = 01101100
암호문 P⊕Z = 11011110
복호문 C⊕Z = 10110010
동기식 스트림 암호는 송·수신자가 같은 키스트림 위치를 유지해야 한다. 단순 XOR 구조에서 한 비트가 뒤집히면 해당 평문 비트만 바뀌지만, 비트 삽입·삭제로 동기가 어긋나는 상황은 다르다. 자기동기식은 최근 암호문을 반영해 일정 구간 뒤 동기를 회복할 수 있고 오류가 뒤의 일정 구간에 전파될 수 있다.
7. 키스트림 재사용과 일회용 패드
C1 = P1 XOR Z
C2 = P2 XOR Z
C1 XOR C2 = P1 XOR P2
같은 키스트림을 두 번 쓰면 비밀값이 상쇄되어 평문 사이의 관계가 드러난다. 같은 키 아래에서 nonce·IV의 재사용 규칙을 지켜야 하는 이유다.
일회용 패드(One-Time Pad)가 완전 비밀성을 제공하려면 키가 진정한 무작위이고 메시지와 독립적이어야 하며, 메시지 길이 이상으로 안전하게 공유하고 한 번만 사용해야 한다. 기밀성 조건이며 변조 탐지까지 자동 제공하는 것은 아니다. 일회용 비밀번호(One-Time Password)와 약어 OTP가 같아도 다른 기술이다.
개념 확인 문제
문제를 누르면 바로 아래에서 정답과 해설을 확인할 수 있습니다.
01AES-256의 블록 크기와 키 길이는 각각 얼마인가?
블록은 128비트, 키는 256비트다. 알고리즘 이름의 숫자가 블록 크기를 뜻하는 것은 아니다.
02두 메시지에 같은 XOR 키스트림을 쓰면 두 암호문의 XOR로 무엇이 드러나는가?
두 평문의 XOR 관계다. C1 XOR C2 = P1 XOR P2가 되어 같은 키스트림이 상쇄된다. 일부 평문을 알면 다른 평문 추론에도 도움이 될 수 있다.