<알고리즘>
Input: 8-bit 평문(Plaintext), 10-bit Key
Output: 8-bit 암호문(Ciphertext)
Round: 2
-
Encrytion 수식
E=IP−1(fk2(SW(fk1(IP(M)))))
-
Decrytion 수식
M=IP−1(fk1(SW(fk2(IP(E)))))

<예제>
1) Key(10-bit)값으로 (K1, K2) 생성

① 순열(P10)
☑️ Input(10-bit) :
☑️ Output(10-bit) :
②-(1) 5-bit 단위로 Shift연산(LS-1)
☑️ Input(10-bit) :
☑️ Output(10-bit) :
- 1~5비트 -> 1-bit 좌순환 연산(Left-Shift)
- 6~10비트 -> 1-bit 좌순환 연산(Left-Shift)
②-(2) 순열(P8): k1 생성
☑️ Input(10-bit) :
- 입력된 비트열 중 8-bit를 선택하여 P8 순열 변환
☑️ Output(8-bit) :
③-(1) Shift연산(LS-2)
☑️ Input(10-bit) :
*LS-1한 후 output을 입력으로 함
☑️ Output(10-bit) :
- 1~5비트 -> 2-bit 좌순환 연산(Left-Shift)
- 6~10비트 -> 2-bit 좌순환 연산(Left-Shift)
③-(2) 순열(P8): k2 생성
☑️ Input(10-bit) :
☑️ Output(8-bit) :
2) 암호화 과정

▶️ ROUND 1
① 초기순열(IP)
☑️ Input(8-bit) :
☑️ Output(8-bit) :
② 4-bit 단위로 L0블록과 R0블록으로 나눔
☑️ L0(4-bit) :
☑️ R0(4-bit) :
③ R0블록(4-bit) 확장순열(E/P)
☑️ Input(4-bit) :
☑️ Output(8-bit) :
④ k1(8-bit)와 XOR연산
☑️ Input(8-bit) :
☑️ k1(8-bit) :
☑️ Output(8-bit) :
| Result | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | |
|---|
| Input | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | ⊕ |
| k1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | |
⑤ 4-bit 단위로 L블록과 R블록을 나눠 S-Box에 치환
☑️ L블록을 S0 치환 :
- L블록(4-bit)에서 1, 4비트는 행 ⇒ 00
- L블록(4-bit)에서 2, 3비트는 열 ⇒ 00
S0=⎣⎢⎢⎢⎡1303022131132032⎦⎥⎥⎥⎤
⇒ 0행 0열의 '1'
- R블록(4-bit)에서 1, 4비트는 행 ⇒ 01
- R블록(4-bit)에서 2, 3비트는 열 ⇒ 10
S1=⎣⎢⎢⎢⎡0232100121103303⎦⎥⎥⎥⎤
⇒ 1행 2열의 '1'
☑️ Output(4-bit) :
⑥ 순열(P4)
☑️ Input(4-bit) :
☑️ Output(4-bit) :
⑦ L0블록과 XOR연산
☑️ Input(4-bit) :
☑️ L0(4-bit) :
☑️ Output(4-bit) :
| Result | 0 | 0 | 1 | 0 | |
|---|
| Input | 1 | 1 | 0 | 0 | ⊕ |
| L0 | 1 | 1 | 1 | 0 | |
⑧ 연산 출력 블록과 R0블록을 스왑(SW)
☑️ Input :
☑️ Input || R0 (8-bit):
- 맨 처음 R0블록과 접하여 8-bit 블록 구성
| input | R0 |
|---|
| 0 0 1 0 | 1 0 0 1 |
☑️ Output(8-bit) :

▶️ ROUND 2
① 4-bit 단위로 L1블록과 R1블록으로 나눔
☑️ L1(4-bit) :
☑️ R1(4-bit) :
② R1블록(4-bit) 확장순열(E/P)
☑️ Input(4-bit) :
☑️ Output(8-bit) :
③ k2(8-bit)와 XOR연산
☑️ Input(8-bit) :
☑️ k2(8-bit) :
☑️ Output(8-bit) :
| Result | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | |
|---|
| Input | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | ⊕ |
| k1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | |
④ 4-bit 단위로 L블록과 R블록을 나눠 S-Box에 치환
☑️ L블록을 S0 치환 :
- L블록(4-bit)에서 1, 4비트는 행 ⇒ 01
- L블록(4-bit)에서 2, 3비트는 열 ⇒ 10
S0=⎣⎢⎢⎢⎡1303022131132032⎦⎥⎥⎥⎤
⇒ 1행 2열의 '1'
- R블록(4-bit)에서 1, 4비트는 행 ⇒ 11
- R블록(4-bit)에서 2, 3비트는 열 ⇒ 00
S1=⎣⎢⎢⎢⎡0232100121103303⎦⎥⎥⎥⎤
⇒ 3행 0열의 '2'
☑️ Output(4-bit) :
⑤ 순열(P4)
☑️ Input(4-bit) :
☑️ Output(4-bit) :
⑥ L1블록과 XOR연산
☑️ Input(4-bit) :
☑️ L1(4-bit) :
☑️ Output(4-bit) :
| Result | 0 | 0 | 1 | 1 | |
|---|
| Input | 1 | 0 | 1 | 0 | ⊕ |
| L1 | 1 | 0 | 0 | 1 | |
⑦ R1블록과 fk2함수 출력 블록을 접하고 역순열(IP−1)
| IP−1 |
|---|
| 4 1 3 5 7 2 8 6 |
☑️ Input || R1 (8-bit) :
- 맨 처음 R1블록과 접하여 8-bit 블록 구성
| input | R1 |
|---|
| 0 0 1 1 | 0 0 1 0 |
☑️ Output(8-bit) :
Output
잘보고갑니다