SPN 구조로 이해하는 현대 블록 암호의 혼돈과 확산
SPN의 S-Box와 P-Box, 라운드 키 혼합 원리부터 AES·Serpent·PRESENT의 구조와 암호 분석, 구현 전략까지 정리한다.
2026-08-15 · 최초 발행 2025-06-08
블록 암호 안에서 혼돈과 확산이 만나는 방식
SPN(Substitution-Permutation Network)은 현대 블록 암호의 기반이 되는 아키텍처다. 암호문과 키의 관계를 복잡하게 만드는 혼돈(Confusion), 평문의 통계적 구조를 암호문 전체로 퍼뜨리는 확산(Diffusion)을 함께 구현한다. DES, AES 같은 주요 암호화 알고리즘의 내부 구조를 이해할 때도 이 두 원리가 출발점이 된다.
SPN은 대칭키 암호화에서 특히 중요한 역할을 한다. 비선형 변환을 수행하는 대체 층과 비트 위치를 바꾸는 치환 층, 그리고 라운드 키를 결합하는 과정이 반복되면서 입력 블록의 관계를 추적하기 어렵게 만든다.
S-Box가 만드는 비선형성
S-Box(Substitution Box)는 입력값을 다른 값으로 치환해 SPN에 비선형성을 부여한다. 입력은 n비트이고 출력은 m비트이며, 일반적으로 n = m이다. 복호화가 가능하려면 역함수가 존재해야 한다.
강한 S-Box는 선형 관계를 드러내기 어렵게 하는 비선형성(Nonlinearity), 차분 암호 분석에 대응하는 차분 균일성(Differential Uniformity), 대수적 공격에 저항하는 높은 대수적 차수(Algebraic Degree), 출력값의 발생 빈도를 고르게 하는 균형성(Balance)을 갖춰야 한다.
AES의 S-Box는 유한체 GF(2^8)에서의 곱셈 역원과 어파인 변환을 조합해 설계되었다.
P-Box가 변화의 범위를 넓히는 방법
P-Box(Permutation Box)는 비트나 바이트의 위치를 다시 배치해 확산 효과를 만든다. 한 비트의 변화가 다음 단계에서 여러 S-Box에 영향을 주도록 만드는 것이 목적이다.
직접 비트 재배열(Straight Permutation), 확장 치환(Expansion Permutation), 압축 치환(Compression Permutation)이 여기에 속한다.
키 혼합과 대체·치환이 반복되는 라운드
SPN 기반 암호는 보통 여러 라운드로 동작한다. 각 표준 라운드에서는 현재 상태와 라운드 키를 XOR 연산으로 결합하고, 바이트 또는 니블 단위로 S-Box를 적용한 뒤 P-Box로 비트 위치를 재배열한다. AES의 표준 라운드는 SubBytes, ShiftRows, MixColumns, AddRoundKey로 이어지며, 최종 라운드는 MixColumns를 생략한 채 SubBytes, ShiftRows, AddRoundKey를 수행한다. 일반적인 SPN의 최종 라운드도 이처럼 P-Box를 생략하며, AES도 이 방식을 따른다.
AES·Serpent·PRESENT에 적용된 SPN
AES는 128비트 블록과 128, 192 또는 256비트 키를 사용하며, 키 길이에 따라 10, 12 또는 14라운드로 구성된다. SubBytes에서는 8x8 S-Box를 사용하고, ShiftRows는 행 단위 순환 시프트를 수행한다. MixColumns는 유한체 곱셈을 이용해 열 단위 확산을 제공하며, AddRoundKey는 라운드 키와 XOR 연산을 수행한다. AES-128에서는 초기 키 XOR 뒤에 라운드 1부터 라운드 9까지의 변환이 이어지고 라운드 10이 최종 라운드가 된다. 키 스케줄링은 라운드 키 0부터 라운드 키 10까지를 생성해 각 단계에 연결한다.
ARIA는 한국에서 개발된 블록 암호 알고리즘이다. 128비트 블록과 128/192/256비트 키 길이를 지원하고, 2004년 국가보안기술연구소(NSRI)가 개발해 한국 정보통신 표준(KICS)으로 채택됐다. 키 길이에 따라 12-16개의 라운드를 사용하며, 치환, 순열, 선형 변환, 라운드 키 결합이 반복되는 SPN 라운드 구성의 사례다.
Serpent는 128비트 블록과 128, 192 또는 256비트 키를 사용한다. 32라운드 구조이며 비트슬라이스 구현에 맞춰 최적화됐고, 높은 보안 마진을 특징으로 한다.
PRESENT는 IoT와 제한된 하드웨어 환경을 겨냥한 경량 암호다. 64비트 블록, 80 또는 128비트 키, 31라운드 구조를 사용한다.
Feistel 구조와 비교할 때의 차이
| 특성 | SPN | Feistel |
|---|---|---|
| 암호화/복호화 | 다른 구현 필요 | 동일한 구조 사용 가능 |
| S-Box 요구사항 | 가역성 필요 | 가역성 불필요 |
| 병렬 처리 | 높은 병렬성 | 제한된 병렬성 |
| 확산 속도 | 빠름 | 상대적으로 느림 |
| 예시 | AES, PRESENT | DES, Blowfish |
설계자가 고려하는 암호 분석 저항성
선형 암호 분석(Linear Cryptanalysis)은 입력 비트와 출력 비트 사이의 선형 관계를 찾는다. S-Box의 비선형성을 높이는 방식이 방어 전략이 된다.
차분 암호 분석(Differential Cryptanalysis)은 입력 차이가 출력 차이에 미치는 영향을 분석한다. 낮은 차분 확률을 가진 S-Box와 충분한 라운드 수가 대응 수단이다.
대수적 공격(Algebraic Attacks)은 암호 알고리즘을 연립방정식으로 표현해 해를 구하려 한다. 높은 대수적 차수의 S-Box와 복잡한 키 스케줄이 저항성을 높인다.
구현 선택은 처리량과 노출면을 함께 바꾼다
하드웨어에서 SPN은 본질적으로 병렬화에 유리하다. 파이프라인 구현은 처리량을 높이고, 비트슬라이스 구현은 SIMD 명령어를 활용한다. S-Box를 룩업 테이블로 구현할 때는 메모리와 시간 사이의 트레이드오프가 발생한다.
소프트웨어 구현에서는 S-Box 값을 미리 계산해 저장한 룩업 테이블을 사용할 수 있다. AES에서는 SubBytes, ShiftRows, MixColumns를 결합한 T-테이블 방식도 활용된다. 비트슬라이스 구현은 여러 블록을 동시에 처리하는 SIMD 스타일의 접근이다.
통신부터 제한된 장치까지 이어지는 적용 범위
TLS/SSL의 웹 통신 보안에는 AES가 사용되며, VPN 암호화와 5G 보안 프로토콜에서도 SPN 기반 암호가 활용된다.
저장 데이터 보호에서는 BitLocker와 FileVault 등의 디스크 암호화에 AES가 사용되고, 데이터베이스의 민감 정보는 필드별 암호화 대상이 될 수 있다.
자원이 제한된 환경에는 PRESENT, RECTANGLE 같은 경량 SPN 암호가 쓰인다. 스마트카드처럼 연산 능력이 제한된 환경에서도 효율적인 구현을 목표로 한다. 블록체인과 암호화폐에서는 트랜잭션 암호화와 개인키 보호를 위한 암호화에 적용될 수 있다.
양자 환경과 구현 공격에 대비하는 방향
현재 SPN 기반 대칭키 암호는 양자 컴퓨터에 대해 상대적으로 안전하며, 키 길이를 늘려 Grover 알고리즘에 대응할 수 있다.
제한된 자원 환경을 위한 경량 암호의 발전도 이어진다. IoT 최적화와 NIST 경량 암호화 표준화 프로젝트가 이 흐름에 포함된다.
알고리즘 자체의 강도만으로는 충분하지 않다. 중간값을 랜덤화하는 마스킹 기법은 전력 분석 공격 방어에 사용되고, 균일 실행 시간은 타이밍 공격 방어를 위한 구현 방식이다.