S-박스 치환(S-Box Substitution)은 압축된 키와 확장된 RPT(오른쪽 평문)가 포함된 XOR 연산 결과로부터 48비트 입력을 받아, 치환(substitution) 기법을 활용해 32비트 출력을 생성하는 과정입니다.
S-박스 치환의 동작 방식
치환 연산은 여덟 개의 치환 상자, 즉 S-박스(S-box)를 통해 구현됩니다. 각 S-박스는 6비트 입력과 4비트 출력을 가지며, 그 동작 과정은 다음과 같습니다.
- 48비트 입력 블록은 8개의 하위 블록(각 6비트)으로 분할됩니다.
- 분할된 각 하위 블록은 하나의 S-박스에 순서대로 전달됩니다.
- 각 S-박스는 자신만의 고유한 규칙에 따라 6비트 입력을 4비트 출력으로 변환합니다.
행과 열 결정 방법
각 S-박스 내부의 치환은 4행 × 16열 구조의 미리 정의된 표를 기반으로 수행됩니다.
- 입력 6비트 중 첫 번째와 여섯 번째 비트 → 행(row) 번호 결정 (0~3, 총 4개 행)
- 입력 6비트 중 두 번째부터 다섯 번째 비트 → 열(column) 번호 결정 (0~15, 총 16개 열)
예를 들어 입력이 b1 b2 b3 b4 b5 b6라면, b1b6 조합이 행을, b2b3b4b5 조합이 열을 지정하게 됩니다.
S-박스 치환표 (Table 1 ~ Table 8)
각 S-박스는 서로 다른 고유한 표를 가지므로, 모든 박스의 출력을 표현하려면 아래와 같이 총 여덟 개의 표가 필요합니다. 저장 공간을 절약하기 위해 입력값(행·열 번호)과 출력값은 10진수로 표기되어 있으며, 실제 암호화 과정에서는 이 값들을 2진수로 변환하여 사용해야 합니다.
S-박스 1
| 14 | 4 | 13 | 1 | 2 | 15 | 11 | 8 | 3 | 10 | 6 | 12 | 5 | 9 | 0 | 7 |
| 0 | 15 | 7 | 4 | 14 | 2 | 13 | 1 | 10 | 6 | 12 | 11 | 9 | 5 | 3 | 8 |
| 4 | 1 | 14 | 8 | 13 | 6 | 2 | 11 | 15 | 12 | 9 | 7 | 3 | 10 | 5 | 0 |
| 15 | 12 | 8 | 2 | 4 | 9 | 1 | 7 | 5 | 11 | 3 | 14 | 10 | 0 | 6 | 13 |
S-박스 2
| 15 | 1 | 8 | 14 | 6 | 11 | 3 | 4 | 9 | 7 | 2 | 13 | 12 | 0 | 5 | 10 |
| 3 | 13 | 4 | 7 | 15 | 2 | 8 | 14 | 12 | 0 | 1 | 10 | 6 | 9 | 11 | 5 |
| 0 | 14 | 7 | 11 | 10 | 4 | 13 | 1 | 5 | 8 | 12 | 6 | 9 | 3 | 2 | 15 |
| 13 | 8 | 10 | 1 | 3 | 15 | 4 | 2 | 11 | 6 | 7 | 12 | 0 | 5 | 14 | 9 |
S-박스 3
| 10 | 0 | 9 | 14 | 6 | 3 | 15 | 5 | 1 | 13 | 12 | 7 | 11 | 4 | 2 | 8 |
| 13 | 7 | 0 | 9 | 3 | 4 | 6 | 10 | 2 | 8 | 5 | 14 | 12 | 11 | 15 | 1 |
| 13 | 6 | 4 | 9 | 8 | 15 | 3 | 0 | 11 | 1 | 2 | 12 | 5 | 10 | 14 | 7 |
| 1 | 10 | 13 | 0 | 6 | 9 | 8 | 7 | 4 | 15 | 14 | 3 | 11 | 5 | 2 | 12 |
S-박스 4
| 7 | 13 | 14 | 3 | 0 | 6 | 9 | 10 | 1 | 2 | 8 | 5 | 11 | 12 | 4 | 15 |
| 13 | 8 | 11 | 5 | 6 | 15 | 0 | 3 | 4 | 7 | 2 | 12 | 1 | 10 | 14 | 9 |
| 10 | 6 | 9 | 0 | 12 | 11 | 7 | 13 | 15 | 1 | 3 | 14 | 5 | 2 | 8 | 4 |
| 3 | 15 | 0 | 6 | 10 | 1 | 13 | 8 | 9 | 4 | 5 | 11 | 12 | 7 | 2 | 14 |
S-박스 5
| 2 | 12 | 4 | 1 | 7 | 10 | 11 | 6 | 8 | 5 | 3 | 15 | 13 | 0 | 14 | 9 |
| 14 | 11 | 2 | 12 | 4 | 7 | 13 | 1 | 5 | 0 | 15 | 10 | 3 | 9 | 8 | 6 |
| 4 | 2 | 1 | 11 | 10 | 13 | 7 | 8 | 15 | 9 | 12 | 5 | 6 | 3 | 0 | 14 |
| 11 | 8 | 12 | 7 | 1 | 14 | 2 | 13 | 6 | 15 | 0 | 9 | 10 | 4 | 5 | 3 |
S-박스 6
| 12 | 1 | 10 | 15 | 9 | 2 | 6 | 8 | 0 | 13 | 3 | 4 | 14 | 7 | 5 | 11 |
| 10 | 15 | 4 | 2 | 7 | 12 | 9 | 5 | 6 | 1 | 13 | 14 | 0 | 11 | 3 | 8 |
| 9 | 14 | 15 | 5 | 2 | 8 | 12 | 3 | 7 | 0 | 4 | 10 | 1 | 13 | 11 | 6 |
| 4 | 3 | 2 | 12 | 9 | 5 | 15 | 10 | 11 | 14 | 1 | 7 | 6 | 0 | 8 | 13 |
S-박스 7
| 4 | 11 | 2 | 14 | 15 | 0 | 8 | 13 | 3 | 12 | 9 | 7 | 5 | 10 | 6 | 1 |
| 13 | 0 | 11 | 7 | 4 | 9 | 1 | 10 | 14 | 3 | 5 | 12 | 2 | 15 | 8 | 6 |
| 1 | 4 | 11 | 13 | 12 | 3 | 7 | 14 | 10 | 15 | 6 | 8 | 0 | 10 | 9 | 2 |
| 6 | 11 | 13 | 8 | 1 | 4 | 10 | 7 | 9 | 5 | 0 | 15 | 14 | 0 | 3 | 12 |
S-박스 8
| 13 | 2 | 8 | 4 | 6 | 15 | 11 | 1 | 10 | 9 | 3 | 14 | 5 | 0 | 12 | 7 |
| 1 | 15 | 13 | 8 | 10 | 3 | 7 | 4 | 12 | 5 | 6 | 11 | 0 | 14 | 9 | 2 |
| 7 | 11 | 4 | 1 | 9 | 12 | 14 | 2 | 0 | 6 | 10 | 13 | 15 | 3 | 5 | 8 |
| 2 | 1 | 14 | 7 | 4 | 10 | 8 | 13 | 15 | 12 | 9 | 0 | 3 | 5 | 6 | 11 |
S-박스가 중요한 이유
S-박스는 DES(Data Encryption Standard) 알고리즘에서 유일하게 비선형성(non-linearity)을 제공하는 요소입니다. 단순한 비트 이동이나 XOR 연산만으로는 암호 해독이 상대적으로 쉬워질 수 있지만, S-박스의 복잡한 치환 규칙이 더해지면서 혼돈(confusion) 효과가 강화되어 암호의 안전성이 크게 향상됩니다. 이러한 특성 덕분에 S-박스는 대칭키 블록 암호 설계에서 핵심적인 역할을 담당하고 있습니다.