데이터 암호화 표준(Data Encryption Standard, DES)은 64비트 단위의 평문 블록을 입력받아 48비트 키를 사용해 암호문으로 변환하는 블록 암호 알고리즘입니다. DES는 대칭키 알고리즘으로, 데이터를 암호화할 때와 복호화할 때 동일한 키가 사용됩니다.
DES는 1970년대 IBM이 설계한 알고리즘으로, 이후 미국 국립표준기술연구소(NBS, 현 NIST)에 의해 연방 정보 처리 표준(FIPS)으로 채택되었습니다. DES의 설계가 발표된 이후 여러 차례의 분석과 검증을 거쳤으며, 그 결과 일부 필수적인 보안 요구 사항을 충족하는 것으로 확인되었습니다. 그럼에도 불구하고 DES의 설계 과정에는 몇 가지 중요한 설계 이슈가 존재하는데, 대표적으로 S-박스, D-박스, 라운드 수 세 가지입니다.
1. S-박스(S-Boxes)
S-박스는 압축된 키와 확장된 RPT(오른쪽 절반)를 XOR 연산하여 얻은 48비트 입력을 받아, 치환(substitution) 기법을 통해 32비트 출력을 생성하는 과정입니다. 이 치환 연산은 여덟 개의 치환 상자, 즉 S-박스에 의해 수행됩니다.
S-박스가 지니는 주요 성질은 다음과 같습니다.
- 각 행의 항목들은 0부터 15 사이 값들의 순열(permutation)로 구성됩니다.
- S-박스는 비선형(non-linear)입니다. 즉, 출력이 입력의 아핀 변환(affine transformation)이 아니어야 선형 분석 공격을 방어할 수 있습니다.
- 입력의 한 비트만 변경하더라도 출력에서는 두 개 이상의 비트가 변경되어야 합니다.
- 두 입력이 오직 중간 두 비트(3번째, 4번째 비트)만 다르다면, 출력은 최소 두 비트 이상 달라야 합니다. 수식으로 표현하면 S(x)와 S(x ⊕ 001100)는 최소 두 비트에서 서로 달라야 하며, 여기서 x는 입력, S(x)는 출력을 의미합니다.
- 두 입력이 첫 두 비트(1번째, 2번째 비트)만 다르고 마지막 두 비트(5번째, 6번째 비트)가 같다면, 두 출력은 반드시 서로 달라야 합니다. 즉, b와 c가 임의의 비트일 때 S(x) ≠ S(x ⊕ 11bc00) 관계가 성립해야 합니다.
2. D-박스(D-Boxes)
D-박스는 기존의 전치 암호(transposition cipher)와 유사한 특징을 가지는 순열 상자(permutation box)입니다. D-박스의 주요 성질은 다음과 같습니다.
- 각 S-박스의 입력은 이전 라운드에서 서로 다른 S-박스의 출력으로부터 나옵니다.
- 주어진 S-박스의 입력은 이전 라운드에서 동일한 S-박스의 출력으로부터 나오지 않습니다.
- 각 S-박스의 네 개 출력 비트는 다음 라운드의 여섯 개 서로 다른 S-박스로 전달됩니다.
- 어떤 S-박스의 두 출력 비트도 다음 라운드의 동일한 S-박스로 향하지 않습니다.
- 각 S-박스에 대해 두 개의 출력 비트는 다음 라운드 S-박스의 첫 번째 또는 마지막 두 비트 위치로 이동하고, 나머지 두 개의 출력 비트는 다음 라운드 S-박스의 중간 비트 위치로 이동합니다.
3. 라운드 수(Number of Rounds)
DES는 16라운드의 Feistel 구조를 사용합니다. 연구 결과에 따르면 8라운드가 진행된 이후에는 모든 암호문 비트가 모든 평문 비트와 모든 키 비트의 함수가 되며, 암호문이 평문과 키에 대한 거의 완전한 무작위 함수처럼 동작하는 것으로 입증되었습니다. 이론적으로는 8라운드만으로도 충분해 보이지만, DES는 차분 분석(differential cryptanalysis) 등 강력한 공격 기법에 대한 안전성을 확보하기 위해 16라운드를 채택하였습니다.