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