DES란 무엇인가?
DES(Data Encryption Standard)는 미국 국립표준기술연구소(NIST)가 도입한 대칭키 블록 암호입니다. DES는 1977년 1월 연방관보(Federal Register)에 FIPS 46으로 공식 발표되었으며, NIST는 이를 비분류(non-classified) 소프트웨어에서 사용할 수 있는 표준으로 지정했습니다.
DES는 발표 이후 오랫동안 가장 널리 사용된 대칭키 블록 암호였습니다. 이후 NIST는 새로운 표준인 FIPS 46-3을 발표하여, 향후 소프트웨어에서 트리플 DES(Triple DES, 동일한 DES 암호를 세 번 반복 적용)의 사용을 공식적으로 승인했습니다.
DES의 기본 구조
DES는 64비트 블록 크기를 가지며, 실제 구현 시에는 56비트 키가 필요합니다. 전체 64비트 키 중 8비트는 패리티 비트로 제거되기 때문입니다. DES는 대칭 암호 시스템이며, 특히 16라운드 Feistel 암호 구조를 따릅니다.
암호화 과정은 다음과 같이 진행됩니다.
암호화할 블록은 먼저 초기 순열(IP)을 거칩니다. 이후 복잡한 키 의존적(key-dependent) 계산이 수행되고, 마지막으로 초기 순열의 역순열인 IP−1을 거쳐 최종 결과가 만들어집니다.
여기서 순열(permutation)은 함수로 구현되는 연산으로, 위치 j에 있는 원소를 위치 k로 옮기는 작업을 의미합니다. 키 의존적 계산은 크게 두 가지 함수로 단순하게 표현할 수 있습니다.
- 암호 함수(cipher function): f로 표시되는 함수
- 키 스케줄(key schedule): KS로 표시되는 함수
S-Box의 역할과 동작 방식
함수 F에서 S-Box(S-박스)의 역할은 치환(substitution)을 담당하는 것입니다. 이 치환은 총 8개의 S-Box로 구성된 그룹을 통해 수행됩니다.
각 S-Box는 6비트를 입력으로 받아 4비트를 출력하며, 동작 방식은 다음과 같습니다.
- 입력의 첫 번째 비트와 마지막 비트가 결합하여 2비트 이진수를 형성하고, 이 값이 해당 S-Box(Si) 테이블의 네 개 행 중 하나를 선택합니다.
- 입력의 중간 4비트는 16개 열 중 하나를 선택합니다.
- 선택된 행과 열에 해당하는 셀의 십진수 값이 4비트 이진수로 변환되어 최종 출력이 됩니다.
예시: S1에서의 변환
예를 들어 S1에 입력값 011001이 들어온 경우를 살펴보겠습니다.
- 첫 비트와 끝 비트로 행 결정:
01→ 1번째 행 - 중간 4비트로 열 결정:
1100→ 12번째 열 - 1번째 행, 12번째 열의 값은 9이므로, 출력은
1001이 됩니다.
S-Box 설계 원칙
S-Box는 DES 보안성의 핵심으로, 다음과 같은 설계 원칙을 따릅니다.
- 각 S-Box는 반드시 6비트 입력과 4비트 출력을 가져야 합니다.
- S-Box의 어떤 출력 비트도 입력 비트의 선형 함수와 너무 가까워서는 안 됩니다. S-Box는 DES에서 유일한 비선형 요소이며, 바로 이 비선형성이 알고리즘의 강도를 좌우합니다.
- S-Box의 각 '행'은 가능한 모든 출력 값을 포함해야 합니다. 이를 통해 출력이 무작위화(randomize)됩니다.
- 두 입력이 정확히 1비트만 다른 경우, 두 출력은 최소 2비트 이상 달라야 합니다.
- 두 입력이 중간 2비트에서만 다른 경우에도, 출력은 최소 2비트 이상 차이 나야 합니다.
- 두 입력이 첫 2비트에서는 다르지만 마지막 2비트는 같은 경우, 두 출력은 서로 달라야 합니다.
이러한 원칙들은 차분 분석(differential cryptanalysis) 등의 공격에 대한 저항성을 높이기 위한 것으로, S-Box가 단순한 치환 표를 넘어 DES 전체 보안성을 결정짓는 핵심 요소임을 보여줍니다.