[암호학 (Cryptography)]
↓
[대칭키 암호 (Symmetric Encryption)]
↓
├─ 1. 스트림 암호 (Stream Cipher): 비트 단위로 실시간 암호화 (예: 지난주 배운 LCG 기반 암호)
└─ 2. 블록 암호 (Block Cipher): 덩어리 단위로 암호화 (★ 지금 배우는 DES, AES)
↓
[DES의 내부 설계]
├─ 구조: Feistel Network
├─ 엔진: F-함수 (S-Box, P-Box)
└─ 열쇠 공급: Key Scheduling

인풋 비트 하나 변경으로 output bit가 많이 변경된다
Q) How do we build a block cipher
Confusion 과 Diffusion 두 가지 원칙을 여러 번 반복(Product Cipher)합니다.
(Data Encryption Standard)
구조: 64비트 블록 암호 (입력 64bit -> 출력 64bit).

IP (Initial Permutation, 초기 순열):
단계: 64비트 평문이 들어오자마자 가장 먼저 수행됩니다.
하는 일: 64비트의 순서를 표에 따라 마구 섞습니다.
다음 단계: 섞인 결과물을 반으로 나눠() 드디어 1라운드(Feistel Network)로 보냅니다.
DES는 동일한 구조를 16번 반복하는 페이스텔 네트워크 방식을 사용합니다.
블록 암호의 선구자인 호스트 페이스텔의 이름을 빌어 명명한 페이스텔 암호는 특정한 암호 체계를 지칭하는 것이 아니라 일반적인 암호의 설계 원리를 의미한다




DES라는 암호화 건물 전체가 Feistel Network라는 설계도로 지어졌습니다. 이 구조의 핵심은 "똑같은 일을 하는 층(Round)을 여러 개 쌓는다"는 것입니다.
구조: 64비트 평문을 왼쪽() 32비트, 오른쪽() 32비트로 나눕니다.
작동: 오른쪽 값()은 그대로 다음 층의 왼쪽()으로 내려가고, 오른쪽 값()을 재료로 요리한 결과(F-함수)를 왼쪽()과 XOR 합니다.
오른쪽 32비트만 함수와 키를 거쳐 왼쪽과 XOR됨
반복: 이 과정을 DES에서는 16번(16 Rounds) 반복합니다.

질문하신 Round Function이 바로 F-함수가 맞습니다. 매 라운드마다 오른쪽 32비트 데이터를 '변형'시키는 핵심 엔진이죠. 말씀하신 S-Box와 P-Box는 모두 이 F-함수 내부의 부품들입니다.

#F-함수(Round Function) 내부의 요리 순서:
A. Expansion (E-Box): 32비트 데이터를 48비트로 뻥튀기합니다.
B. Key Mixing: 뻥튀기된 데이터와 키 스케줄링에서 만들어준 48비트 라운드 키()를 XOR 합니다.
C. Substitution (S-Box): 48비트를 다시 32비트로 줄입니다. (여기서 데이터가 비선형적으로 확 바뀝니다. 가장 중요한 보안 장치!)
D. Permutation (P-Box): 32비트 비트들의 위치를 마지막으로 한 번 더 섞습니다.


sbox는 시험이든 과제든 제공되니 외울필요는 없지만
sbox rule 은 기억해야한다, 어떤 SBOX를 쓰는지도 주의해라
1992년에는 2power 47이 그때당시 컴퓨터 성능이 안좋아 안전했지만 이제는 아니다
키 스케줄링은 Feistel Network가 여러 번 있는 것을 말하는 게 아니라, 각 층(Round)마다 필요한 "서로 다른 열쇠"를 공급해 주는 과정입니다.
64비트 원본 키에서 각 라운드에 사용할 48비트 키 16개를 만드는 과정입니다.


[키 생성 순서]


DES의 PC-2(Permuted Choice 2)는 키 스케줄링의 최종 단계로, 56비트로 확장/이동된 키 데이터를 실제 라운드에서 사용할 48비트 라운드 키()로 압축하고 섞는 역할을 합니다.
[ PC-2 작동 요약 ]
입력: 56-bit (Left Shift를 마친 Ci, Di 합계)
↓
과정:
1. 56비트 중 8개 비트를 탈락시킴 (Compression)
2. 남은 48비트의 위치를 마구 섞음 (Permutation)
↓
출력: 48-bit 라운드 키 (Ki)
핵심 데이터:
- Ki는 원본 키의 재배열된 형태임.
- 라운드마다 48비트 조합이 계속 바뀜.
- 모든 비트는 16라운드 중 평균 14번 참여함.

(Inverse Initial Permutation, 역 초기 순열):
단계: 16라운드가 모두 끝나고 난 맨 마지막에 수행됩니다.하는 일: IP에서 섞었던 비트 위치를 다시 원래 규칙대로 되돌려 놓습니다.결과: 이 단계를 거치면 최종 암호문(64비트)이 완성되어 공장 밖으로 나갑니다.




DES는 페이스텔 네트워크(Feistel Network) 구조를 사용하기 때문에, 암호화할 때 사용했던 하드웨어와 알고리즘을 그대로 복호화에 사용할 수 있습니다. 유일하게 다른 점은 "라운드 키()를 넣는 순서만 반대"라는 것입니다.
이것은 XOR 연산의 특성 때문입니다. 같은 값을 두 번 XOR하면 원래대로 돌아오는 성질()을 이용하는 것이죠.
1. 암호화 마지막 단계: 16라운드에서 오른쪽 데이터()에 를 계산한 뒤 왼쪽 데이터()와 XOR 하여 을 만듭니다.
2. 복호화 첫 단계: 암호문이 들어오면 가장 먼저 을 적용합니다. 그러면 암호화 마지막 단계에서 섞였던 의 영향이 XOR 연산에 의해 상쇄(Cancel out)되어 다시 상태로 돌아갑니다.
[ DES 복호화 과정 ]
1. [입구] 암호문 (64-bit) 도착
2. [전처리] 초기 순열 (IP): 암호문 비트 위치 섞기
3. [본 공정] 16 라운드 페이스텔 네트워크 (암호화와 동일한 엔진)
- 1라운드: 역순으로 생성된 키 K16 사용
- 2라운드: K15 사용
...
- 16라운드: K1 사용
4. [마무리] 역 초기 순열 (IP-1): 초기 순열에서 섞인 위치 복구
5. [출구] 평문 (64-bit) 복원 완료
3DES (Triple DES): * DES를 세 번 연속 사용하는 방식입니다.
AES (Advanced Encryption Standard): * 현재의 표준입니다.
요약하자면: DES는 키 길이가 너무 짧아서(56비트) 현대 컴퓨터로는 금방 뚫립니다. 그래서 키 길이를 대폭 늘린 3DES나 아예 새로운 표준인 AES로 세대교체가 되었습니다.