S-DES(Simplified Data Encryption Standard)

박유란·2023년 10월 5일

컴퓨터보안

목록 보기
1/1

<알고리즘>

Input: 8-bit 평문(Plaintext), 10-bit Key
Output: 8-bit 암호문(Ciphertext)
Round: 2
  • Encrytion 수식

    E=IP1(fk2(SW(fk1(IP(M)))))E = IP^{-1}(f_{k2}(SW(f_{k1}(IP(M)))))
  • Decrytion 수식

    M=IP1(fk1(SW(fk2(IP(E)))))M = IP^{-1}(f_{k1}(SW(f_{k2}(IP(E)))))

<예제>

Input

  • 평문(8-bit)
01110110
  • Key(10-bit)
1110001001

1) Key(10-bit)값으로 (K1, K2) 생성

① 순열(P10)

P10
3 5 2 7 4 10 1 9 8 6

☑️ Input(10-bit) :

1110001001
12345678910

☑️ Output(10-bit) :

  • 비트열을 P10에 적용하여 순열 변환
1011011000
35274101986

②-(1) 5-bit 단위로 Shift연산(LS-1)

☑️ Input(10-bit) :

1011011000

☑️ Output(10-bit) :

  • 1~5비트 -> 1-bit 좌순환 연산(Left-Shift)
01101
  • 6~10비트 -> 1-bit 좌순환 연산(Left-Shift)
10001

②-(2) 순열(P8): k1 생성

P8
6 3 7 4 8 5 10 9

☑️ Input(10-bit) :

  • 입력된 비트열 중 8-bit를 선택하여 P8 순열 변환
0110110001
12345678910

☑️ Output(8-bit) :

  • k1 생성 결과
11000110
637485109

③-(1) Shift연산(LS-2)

☑️ Input(10-bit) :
*LS-1한 후 output을 입력으로 함

0110110001

☑️ Output(10-bit) :

  • 1~5비트 -> 2-bit 좌순환 연산(Left-Shift)
10101
  • 6~10비트 -> 2-bit 좌순환 연산(Left-Shift)
00110

③-(2) 순열(P8): k2 생성

P8
6 3 7 4 8 5 10 9

☑️ Input(10-bit) :

1010100110
12345678910

☑️ Output(8-bit) :

  • k2 생성 결과
01001101
637485109

2) 암호화 과정

▶️ ROUND 1

  • 평문 :
01110110
  • k1 :
11000110

① 초기순열(IP)

IPIP
2 6 3 1 4 8 5 7

☑️ Input(8-bit) :

01110110

☑️ Output(8-bit) :
11101001
26314857

② 4-bit 단위로 L0L_{0}블록과 R0R_{0}블록으로 나눔

☑️ L0L_{0}(4-bit) :

1110

☑️ R0R_{0}(4-bit) :

1001

R0R_{0}블록(4-bit) 확장순열(E/P)

E/PE/P
4 1 2 3 2 3 4 1

☑️ Input(4-bit) :
1001

☑️ Output(8-bit) :
11000011
41232341

④ k1(8-bit)와 XOR연산

☑️ Input(8-bit) :

11000011

☑️ k1(8-bit) :

11000110

☑️ Output(8-bit) :

Result00000101
Input11000110
k111000011

⑤ 4-bit 단위로 L블록과 R블록을 나눠 S-Box에 치환

☑️ L블록을 S0S_{0} 치환 :

  • L블록(4-bit)에서 1, 4비트는 행 ⇒ 00
1234
0000
  • L블록(4-bit)에서 2, 3비트는 열 ⇒ 00
1234
0000
S0=[1032321002133132]S_{0} = \begin{bmatrix} 1 & 0 & 3 & 2 \\ 3 & 2 & 1 & 0 \\ 0 & 2 & 1 & 3 \\ 3 & 1 & 3 & 2 \end{bmatrix}

⇒ 0행 0열의 '1'

01

  • R블록(4-bit)에서 1, 4비트는 행 ⇒ 01
1234
0101
  • R블록(4-bit)에서 2, 3비트는 열 ⇒ 10
1234
0101
S1=[0123201330102103]S_{1} = \begin{bmatrix}0 & 1 & 2 & 3 \\ 2 & 0 & 1 & 3 \\ 3 & 0 & 1 & 0 \\ 2 & 1 & 0 & 3 \end{bmatrix}

⇒ 1행 2열의 '1'

01

☑️ Output(4-bit) :
0101

⑥ 순열(P4)

P4
2 4 3 1

☑️ Input(4-bit) :

0101

☑️ Output(4-bit) :

  • 비트열을 P4에 적용하여 순열 변환
1100
2431

L0L_{0}블록과 XOR연산

☑️ Input(4-bit) :

1100

☑️ L0L_{0}(4-bit) :

1110

☑️ Output(4-bit) :

Result0010
Input1100
L0L_{0}1110

⑧ 연산 출력 블록과 R0R_{0}블록을 스왑(SW)

☑️ Input :

0010

☑️ Input || R0R_{0} (8-bit):

  • 맨 처음 R0R_{0}블록과 접하여 8-bit 블록 구성
inputR0R_{0}
0 0 1 01 0 0 1

☑️ Output(8-bit) :

  • 양쪽 블록을 SWAP하여 비트열 재정렬
10010010

▶️ ROUND 2

  • Input :
10010010
  • k2 :
01001101

① 4-bit 단위로 L1L_{1}블록과 R1R_{1}블록으로 나눔

☑️ L1L_{1}(4-bit) :

1001

☑️ R1R_{1}(4-bit) :

0010

R1R_{1}블록(4-bit) 확장순열(E/P)

E/PE/P
4 1 2 3 2 3 4 1

☑️ Input(4-bit) :

0010

☑️ Output(8-bit) :
00010100
41232341

③ k2(8-bit)와 XOR연산

☑️ Input(8-bit) :

00010100

☑️ k2(8-bit) :

01001101

☑️ Output(8-bit) :

Result01011001
Input00010100
k101001101

④ 4-bit 단위로 L블록과 R블록을 나눠 S-Box에 치환

☑️ L블록을 S0S_{0} 치환 :

  • L블록(4-bit)에서 1, 4비트는 행 ⇒ 01
1234
0101
  • L블록(4-bit)에서 2, 3비트는 열 ⇒ 10
1234
0101
S0=[1032321002133132]S_{0} = \begin{bmatrix} 1 & 0 & 3 & 2 \\ 3 & 2 & 1 & 0 \\ 0 & 2 & 1 & 3 \\ 3 & 1 & 3 & 2 \end{bmatrix}

⇒ 1행 2열의 '1'

01

  • R블록(4-bit)에서 1, 4비트는 행 ⇒ 11
1234
1001
  • R블록(4-bit)에서 2, 3비트는 열 ⇒ 00
1234
1001
S1=[0123201330102103]S_{1} = \begin{bmatrix}0 & 1 & 2 & 3 \\ 2 & 0 & 1 & 3 \\ 3 & 0 & 1 & 0 \\ 2 & 1 & 0 & 3 \end{bmatrix}

⇒ 3행 0열의 '2'

10

☑️ Output(4-bit) :
0110

⑤ 순열(P4)

P4
2 4 3 1

☑️ Input(4-bit) :

0110

☑️ Output(4-bit) :

  • 비트열을 P4에 적용하여 순열 변환
1010
2431

L1L_{1}블록과 XOR연산

☑️ Input(4-bit) :

1010

☑️ L1L_{1}(4-bit) :

1001

☑️ Output(4-bit) :

Result0011
Input1010
L1L_{1}1001

R1R_{1}블록과 fk2f_{k2}함수 출력 블록을 접하고 역순열(IP1IP^{-1})

IP1IP^{-1}
4 1 3 5 7 2 8 6

☑️ Input || R1R_{1} (8-bit) :

  • 맨 처음 R1R_{1}블록과 접하여 8-bit 블록 구성
inputR1R_{1}
0 0 1 10 0 1 0

☑️ Output(8-bit) :

10101000
41357286



Output

  • 8-bit 암호문(Ciphertext)
10101000
profile
doby is freeeeee

2개의 댓글

comment-user-thumbnail
2024년 11월 12일

잘보고갑니다

답글 달기
comment-user-thumbnail
2025년 3월 25일

암호학 수업들으면서 도움됐어요 감사합니다!

답글 달기