DES(Data Encryption Standard)는 여러 단계의 연산이 반복되는 대칭키 블록 암호 알고리즘입니다. 각 라운드는 독립적인 기능들이 유기적으로 결합하여 동작하며, 이 구조 덕분에 DES는 강력한 혼돈(confusion)과 확산(diffusion) 특성을 갖습니다. 이번 글에서는 DES 라운드를 구성하는 다섯 가지 핵심 요소를 하나씩 살펴보겠습니다.
1. 키 변환 (Key Transformation)
DES는 초기 64비트 키에서 매 8번째 비트를 제거하여 56비트 유효 키를 생성합니다. 즉, 실제 암호화에 사용되는 키 길이는 56비트입니다. 각 라운드에서는 이 56비트 키로부터 새로운 48비트 서브키(subkey)가 파생되는데, 이 과정을 키 변환(key transformation)이라고 부릅니다.
구체적인 절차는 다음과 같습니다. 먼저 56비트 키를 28비트씩 두 개의 절반으로 나눕니다. 그런 다음 라운드 번호에 따라 정해진 규칙대로 비트들을 좌측 순환 시프트(circular shift)합니다. 라운드별 이동 비트 수는 아래 표와 같습니다.
| 라운드 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 시프트 비트 수 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 1 |
시프트가 끝난 후에는 두 개의 28비트 절반을 다시 결합한 뒤, 56비트 중 일부 비트를 선택하고 순서를 재배열하여 48비트 서브키를 만듭니다. 이처럼 크기를 줄이면서 위치를 바꾸는 기법을 압축 순열(compression permutation)이라고 하며, 라운드마다 서로 다른 키 비트 조합이 사용되기 때문에 공격자가 DES를 쉽게 해독하기 어렵습니다.
2. 확장 순열 (Expansion Permutation)
초기 순열(initial permutation)을 거치면 64비트 평문은 32비트씩 두 개의 블록으로 나뉩니다. 왼쪽 절반을 LPT(Left Plain Text), 오른쪽 절반을 RPT(Right Plain Text)라고 합니다.
확장 순열 단계에서는 RPT가 32비트에서 48비트로 확장됩니다. 이는 키 변환 단계에서 생성된 서브키가 48비트이기 때문에, XOR 연산을 수행하려면 양쪽의 비트 길이를 맞춰야 하기 때문입니다. 확장 과정에서 일부 비트는 반복 사용되며, 동시에 비트들의 배치 순서도 변경됩니다.
정리하면, 키 변환이 56비트 키를 48비트로 압축한다면, 확장 순열은 32비트 RPT를 48비트로 팽창시켜 두 데이터의 길이를 일치시키는 역할을 담당합니다.
3. S-박스 치환 (S-box Substitution)
S-박스 치환은 확장된 48비트 RPT와 48비트 압축 키를 XOR 연산한 결과를 입력으로 받아, 치환(substitution) 기법을 통해 32비트 출력을 생성하는 과정입니다.
이 치환은 여덟 개의 S-박스(S-box)에 의해 수행됩니다. 각 S-박스는 6비트 입력을 받아 4비트 출력을 내보내므로, 8 × 6 = 48비트 입력이 8 × 4 = 32비트 출력으로 변환됩니다. 구체적으로는 48비트 입력 블록이 6비트씩 여덟 개의 서브블록으로 분할되고, 각 서브블록이 하나의 S-박스에 할당됩니다.
4. P-박스 순열 (P-box Permutation)
S-박스의 출력은 32비트입니다. 이 32비트는 P-박스(P-box)를 통과하며 비트들의 위치가 재배열됩니다. P-박스 순열은 단순히 각 비트를 P-박스 테이블에 정의된 위치로 옮기는 동작만 수행할 뿐, 확장이나 압축은 일어나지 않습니다. 이 과정을 통해 S-박스 출력의 비트들이 다음 라운드의 S-박스 입력에 고르게 분산되어 확산 효과가 강화됩니다.
5. XOR와 스왑 (XOR and SWAP)
지금까지 설명한 모든 연산은 64비트 원본 평문 중 오른쪽 절반인 RPT에만 적용되었습니다. 왼쪽 절반인 LPT는 아직 어떤 변화도 겪지 않았습니다.
마지막 단계에서는 초기 64비트 평문 블록의 왼쪽 절반(LPT)이 P-박스 순열의 출력과 XOR 연산됩니다. 이 XOR 결과가 새로운 오른쪽 절반(새로운 RPT)이 되고, 기존의 오른쪽 절반(기존 RPT)은 스왑(swap) 과정을 통해 새로운 왼쪽 절반(새로운 LPT)이 됩니다. 이렇게 두 절반이 교체된 64비트 블록이 다음 라운드의 입력으로 전달됩니다.
그렇다면 가장 중요한 보안 요소는 무엇일까?
위 다섯 가지 요소가 모두 상호 보완적으로 작용하지만, 암호학계에서 일반적으로 S-박스 치환이 DES 보안의 심장부로 꼽힙니다. 그 이유는 다음과 같습니다.
- 비선형성 제공: 키 변환, 확장 순열, P-박스는 모두 선형적 비트 재배열 연산입니다. 반면 S-박스는 유일하게 비선형 변환을 수행하여, 선형 분석 공격(linear cryptanalysis)에 대한 저항력을 만들어냅니다.
- 혼돈 효과의 원천: 6비트 입력이 4비트 출력으로 압축되면서 정보가 손실되고, 출력 비트가 입력 비트 및 키 비트에 복잡하게 의존하게 됩니다.
- 눈사태 효과(Avalanche Effect): 평문이나 키의 단 한 비트만 바뀌어도 S-박스를 거치며 출력의 절반 가까이가 변경되도록 설계되어 있습니다.
결론적으로, 키 변환·확장 순열·P-박스·XOR/스왑이 데이터를 준비하고 섞는 역할을 한다면, S-박스 치환이야말로 DES의 실질적인 보안 강도를 결정하는 핵심 구성 요소라고 할 수 있습니다.