DES의 라운드 수: 총 16라운드
DES(Data Encryption Standard)는 총 16개의 라운드를 사용하는 대칭키 암호화 알고리즘입니다. 각 라운드는 다음과 같은 핵심 단계들로 구성됩니다.
1. 키 변환 (Key Transformation)
초기 64비트 키에서 매 8번째 비트를 제거하면 56비트 키가 만들어집니다. 따라서 각 라운드에서 사용할 수 있는 키는 56비트입니다. 이 56비트 키로부터 각 라운드마다 서로 다른 48비트 서브키가 생성되며, 이 과정을 '키 변환'이라고 합니다.
56비트 키는 각각 28비트 크기의 두 부분으로 나뉩니다. 이 두 부분은 라운드 번호에 따라 왼쪽으로 1비트 또는 2비트씩 순환 시프트(circular shift)됩니다.
예를 들어, 라운드 번호가 1, 2, 9 또는 16일 때는 1비트만 시프트되고, 그 외의 라운드에서는 2비트씩 시프트됩니다. 라운드별 키 비트 시프트 횟수는 아래 표와 같습니다.
| 라운드 | 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 |
▲ 라운드별 키 비트 시프트 횟수
2. 확장 치환 (Expansion Permutation)
초기 치환(initial permutation)이 끝나면 평문은 좌측 평문(LPT)과 우측 평문(RPT)이라 불리는 두 개의 32비트 영역으로 나뉩니다. 확장 치환 단계에서는 RPT가 32비트에서 48비트로 확장됩니다. 비트 크기를 32비트에서 48비트로 늘리는 과정에서 비트들이 함께 재배열되기 때문에 이를 '확장 치환'이라고 부릅니다.
3. S-박스 치환 (S-box Substitution)
S-박스 치환은 압축된 키와 확장된 RPT를 결합한 XOR 연산 결과로 얻은 48비트 입력을 받아, 치환(substitution) 기법을 사용해 32비트 출력을 생성하는 과정입니다.
4. P-박스 치환 (P-box Permutation)
S-박스의 출력은 32비트입니다. 이 32비트는 P-박스(P-box)를 사용해 재배열됩니다. 이 단순한 치환 구조는 P-박스 테이블에 정의된 대로 각 비트를 다른 위치의 비트로 교체하는 작업만 수행하며, 확장이나 압축은 전혀 이루어지지 않습니다. 이를 'P-박스 치환'이라고 합니다.
P-박스는 아래 표와 같습니다. 예를 들어 첫 번째 칸의 '16'은 원본 입력의 16번째 위치에 있는 비트가 출력의 1번째 위치로 이동함을 의미하고, 16번째 칸의 '10'은 원본 입력의 10번째 비트가 출력의 16번째 위치로 이동함을 의미합니다.
| 16 | 7 | 20 | 21 | 29 | 12 | 28 | 17 | 1 | 15 | 23 | 26 | 5 | 18 | 31 | 10 |
| 2 | 8 | 24 | 14 | 32 | 27 | 3 | 9 | 19 | 13 | 30 | 6 | 22 | 11 | 4 | 25 |
5. XOR 및 스왑 (XOR and Swap)
지금까지 설명한 모든 연산은 원래 64비트 평문 중 우측 32비트 절반에만 적용됩니다. 좌측 절반은 아직까지 어떠한 변경도 받지 않은 상태입니다. 이 시점에서 초기 64비트 평문 블록의 좌측 절반이 P-박스 치환으로 생성된 출력과 XOR 연산됩니다.