Feistel 구조와 대칭키 블록 암호의 라운드 설계

Feistel 구조의 라운드 동작, 암호화·복호화 특성, 대표 알고리즘과 SPN 구조의 차이를 정리한다.

2026-08-14 · 최초 발행 2025-05-23

블록을 나누고 교환하는 라운드 구조

Feistel 구조는 대칭키 블록 암호를 설계하는 방식이다. 입력 블록을 같은 크기의 두 부분으로 분할한 뒤, 한쪽에 비선형 함수를 적용하고 그 결과를 다른 쪽과 XOR 연산한다. 이후 두 부분을 교환해 다음 라운드로 넘긴다.

이 과정을 반복하면 각 라운드는 다음과 같이 진행된다.

  • 데이터 블록의 절반에 비선형 함수를 적용한다.
  • 함수의 출력과 반대쪽 절반을 XOR 연산한다.
  • 두 절반을 바꾸어 다음 라운드를 수행한다.
  • 복호화는 암호화와 같은 구조를 사용하되 키 스케줄을 역순으로 적용한다.
라운드 구조Li-1Li = Ri-1Ri-1F 함수XORRi = Li-1 F(Ri-1, Ki)입력 블록L0, R0으로 분할라운드 1라운드 2...라운드 nLn, Rn 결합출력 블록

복호화 구조를 별도로 만들 필요가 없는 이유

Feistel 구조의 특징은 라운드 함수 자체의 역함수를 구할 필요가 없다는 점이다. 암호화와 복호화는 동일한 구조를 공유하고, 라운드 키만 반대 순서로 적용한다. 하드웨어 구현에서 자원을 효율적으로 쓸 수 있는 이유이기도 하다.

F 함수는 단방향 함수로 설계할 수 있다. 역함수 계산이 요구되지 않으므로 함수 설계의 자유도가 커지고, 여러 플랫폼에 구현하기도 수월하다.

여러 라운드를 거치면서 확산과 혼돈 효과도 얻는다. 키 의존적인 F 함수가 혼돈을 높이고, 입력의 작은 변화는 출력의 큰 변화로 이어진다. 적절한 라운드 수와 F 함수 설계를 갖춘 경우 차분 분석과 선형 분석 같은 암호 분석 공격에 대응할 수 있다.

Feistel 구조를 채택한 암호 알고리즘

DES

DES는 1977년 미국 NIST에 의해 표준화된 최초의 상용 블록 암호다. 64비트 블록 크기와 56비트 키 길이를 사용하며, 16라운드 Feistel 구조로 구성된다. S-Box를 이용한 비선형 변환이 핵심 보안 요소다. 현재는 키 길이가 짧아 안전하지 않으며, 3DES 형태로 확장되어 사용됐다.

SEED

SEED는 한국인터넷진흥원(KISA)이 1999년 개발한 블록 암호다. 128비트 블록과 128비트 키를 사용하고, 16라운드 Feistel 구조를 채택한다. 국내 금융 및 공공 분야에서 널리 사용되며, G 함수와 F 함수의 조합으로 고수준 보안을 제공한다.

FEAL

FEAL(Fast data Encipherment ALgorithm)은 일본에서 개발된 DES 대안 알고리즘이다. 64비트 블록과 가변 키 길이를 지원한다. 비트 단위 연산보다 바이트 단위 연산에 초점을 맞춰 소프트웨어 효율성을 강화했으며, 초기 버전은 취약점이 발견된 뒤 개선됐다.

Blowfish

Bruce Schneier가 1993년 개발한 Blowfish는 64비트 블록과 최대 448비트의 가변 키 길이를 사용한다. 16라운드 Feistel 구조와 키 의존적 S-Box로 보안성을 강화했다. 무료로 사용할 수 있는 공개 알고리즘으로 널리 채택됐다.

LOKI

LOKI는 호주에서 개발된 DES 대안 암호 알고리즘이다. 64비트 블록과 64비트 키를 사용하며, 16라운드 Feistel 구조를 적용한다. 초기 버전의 취약점을 보완한 LOKI97 버전도 등장했다.

KASUMI

KASUMI는 3GPP에서 사용하는 UMTS와 GSM 이동통신 표준의 암호화 알고리즘이다. 64비트 블록과 128비트 키를 사용하고, 8라운드 Feistel 구조를 변형한 형태다. 모바일 네트워크 환경에 맞춰 설계됐다.

분할 방식과 라운드 함수의 변화

기본 Feistel 구조는 여러 방향으로 확장됐다. 확장 Feistel 네트워크는 데이터 블록을 2개 이상의 부분으로 나누고 더 복잡한 교환 패턴을 적용한다. Twofish, MARS, RC6이 예다.

불균형 Feistel 네트워크는 블록을 서로 다른 크기로 나누며, Skipjack과 같은 알고리즘에서 사용된다. F 함수 자체의 설계도 비선형성을 높이는 방향으로 다양해졌다.

기본 Feistel 구조확장 Feistel불균형 Feistel함수 대체 네트워크Twofish, MARSSkipjack현대 블록 암호

SPN과 다른 설계 선택

Feistel 구조와 SPN(Substitution-Permutation Network)은 현대 블록 암호에서 대표적인 설계 방식이다.

특성 Feistel 구조 SPN 구조
암호화/복호화 동일 구조 사용 역함수 필요
함수 요구사항 단방향 함수 가능 가역함수 필요
구현 복잡성 상대적 간단 복잡할 수 있음
병렬 처리 제한적 우수
대표 알고리즘 DES, SEED, Blowfish AES, ARIA

SPN은 병렬 처리에 강점이 있지만 역함수가 필요하다. 반대로 Feistel 구조는 단방향 함수로도 라운드를 구성할 수 있고, 암호화와 복호화 구조를 공유한다.

구현에서 검토할 지점

키 스케줄은 주 키에서 라운드 키를 효과적으로 생성하도록 설계해야 하며, 관련성이 낮은 라운드 키를 만드는 일이 보안에 중요하다.

F 함수는 비선형성, 완전성, 엄격한 눈사태 효과를 보장해야 한다. 이를 위해 S-Box와 P-Box를 적절히 조합할 수 있다.

라운드 수는 보안 수준과 성능 사이에서 결정한다. 일반적으로 12-16라운드가 많이 사용된다. 구현 대상이 소프트웨어인지 하드웨어인지에 따라 루프 언롤링과 테이블 검색 같은 최적화 기법도 검토할 수 있다.

DES에서 출발한 Feistel 구조는 여러 암호 알고리즘으로 이어지며 디지털 보안의 기반이 됐다. AES와 같은 SPN 구조의 알고리즘이 현재 더 널리 사용되더라도, Feistel의 기본 원리와 장점은 새 암호 알고리즘 설계에 계속 영향을 미친다.

Feistel 구조대칭키 암호블록 암호정보보안암호 알고리즘