[SimpleDES] Simplified Data Encryption Standard-2

Simplified Data Encryption Standard (Simplified DES) Practice

Author silnex


이전 글에서 SDES에 대한 내용과 필요한 함수들에 대해서 알아 보았다.
이번엔 직접 Keygen, Encryption 및 Decryption을 해보며 SDES에 대해서 알아본다.

Key Generation

Key 1 0 1 0 0 0 0 0 1 0
P10 3 5 2 7 4 10 1 9 8 6
P8 6 3 7 4 8 5 10 9

위 함수와 Key를 사용해 subKey(k1,k2)를 생성한다.

먼저 10bit의 key인 1010000010를 함수 P10에 넣는다.
 ▶ P10(1010000010) ::= (1000001100)
P10의 결과 값을 5bit 씩 쪼개어 LS-1을 진행한 뒤 다시 하나로 합친다.
 ▶ LS-1(10000) = (00001)
        LS-1(01100) = (11000) ::= 00001 11000

subKey 1 Gen LS-1의 결과 값을 P8에 넣는다.
 ▶ P8(0000111000) ::= 10100100 (k1)

LS한 결과 값에 LS-2를 한번 더 적용한 뒤 하나로 합친다.
 ▶ LS-2(00001) = (00100)
        LS-2(11000) = (00011) ::= 00100 00011

subKey 2 Gen LS-2의 결과값을 P8에 넣는다.
 ▶ P8(0010000011) ::= 01000011 (k2)

K1 K2
10100100 01000011

Encryption

PlainText 0 1 1 0 1 1 0 1
IP 2 6 3 1 4 8 5 7
E/P 4 1 2 3 2 3 4 1
P4 2 4 3 1
IP-1 1 3 5 7 2 8 6
S0 1 0 3 2 S1 0 1 2 3
3 2 1 0 2 0 1 3
0 2 1 3 3 0 1 0
3 1 3 2 2 1 0 3

위 함수를 통해 fk를 2번 반복한다.

8bit의 PlainText를 함수 IP에 넣는다.
 ▶ IP(01101101) ::= 1110 0110
{START fk} IP의 결과 값 중 오른쪽4bit(0110)를 함수 E/P에 넣는다.
 ▶ E/P(0110) ::= 00111100
 E/P 결과 값에 subkey k1과 xor 연산을 한다.
 ▶ 00111100 ⊕ 10100100 ::= 1001 1000
k1과 Xor한 결과 값을 S-Box에 넣어 매치되는 행렬값을 구한 뒤 합친다.
 ▶ S0(11,00) = S0(3,0) = 11 (3) | S1(10,00) = S1(2,0) = 11 (3) ::= 1111
S-Box의 결과 값을 P4에 넣고 처음 IP의 결과 값 중 왼쪽4bit와 Xor 연산을한다.
 ▶ P4(1111) ::= 1111 
       1111 ⊕ 1110 ::= 0001 {END fk}
Xor의 결과 값과 처음 IP의 결과 값 중 오른쪽4bit의 순서를 바꾼다.
 ▶ SW(0001 0110) ::= {0110 0001}

SW값을 한번 더 함수 fk를 반복한다.
{START fk} ▶ E/P(0001) ::= 10000010
 ▶  10000010 ⊕ 01000011 ::= 1100 0001
 ▶ S0(10,10) = S0(2,2) = 01 (1) | S1(01,00) = S1(1,0) = 10 (2) ::= 0110
 ▶ P4(0110) ::= 1010
      1010 ⊕ 0110 ::= 1100 {END fk}
 ▶ >> {1100 0001}

두번의 fk에서 나온 결과 값을 IP-1에 넣는다.
 ▶ IP-1(1100 0001) = 01000110
이렇게 나온 결과 값 0 1 0 0 0 1 1 0가 PlainText(01101101)를 Key(1010000010)로 암호화한 CipherText(암호문)이 된다.


 

Decryption

 

CipherText 0 1 0 0 0 1 1 0
IP 2 6 3 1 4 8 5 7
E/P 4 1 2 3 2 3 4 1
P4 2 4 3 1
IP-1 1 3 5 7 2 8 6
S0 1 0 3 2 S1 0 1 2 3
3 2 1 0 2 0 1 3
0 2 1 3 3 0 1 0
3 1 3 2 2 1 0 3

위 함수를 통해 fk를 2번 반복하는데 Encryption과 과정은 동일하다.
하지만 이번엔 Decryption이기 때문에 fk에서 사용되는 key의 순서가 k2, k1순으로 사용되어야한다.

8bit의 CipherText를 함수 IP에 넣는다.
 ▶ IP(01000110) ::= 1100 0001
{START fk} IP의 결과 값 중 오른쪽4bit(0001)를 함수 E/P에 넣는다.
 ▶ E/P(0001) ::= 10000010
 E/P 결과 값에 subkey k1과 xor 연산을 한다.
 ▶ 10000010 ⊕ 01000011 ::= 1100 0001
k1과 Xor한 결과 값을 S-Box에 넣어 매치되는 행렬값을 구한 뒤 합친다.
 ▶ S0(10,10) = S0(2,2) = 01 (1) | S1(01,00) = S1(1,0) = 10 (2) ::= 0110
S-Box의 결과 값을 P4에 넣고 처음 IP의 결과 값 중 왼쪽4bit와 Xor 연산을한다.
 ▶ P4(0110) ::= 1010
       1010 ⊕ 1100 ::= 0110 {END fk}
Xor의 결과 값과 처음 IP의 결과 값 중 오른쪽4bit의 순서를 바꾼다.
 ▶ SW(0110 0001) ::= {0001 0110}

SW값을 한번 더 함수 fk를 반복한다.
{START fk} ▶ E/P(0110) ::= 00111100
 ▶ 00111100 ⊕ 10100100 ::= 1001 1000
 ▶ S0(11,00) = S0(3,0) = 11 (3) | S1(10,00) = S1(2,0) = 11 (3) ::= 1111
 ▶ P4(1111) ::= 1111
       1111 ⊕ 0001 ::= 1110 {END fk}
 ▶ >> {1110 0110}

두번의 fk에서 나온 결과 값을 IP-1에 넣는다.
 ▶ IP-1(1110 0110) = 01101101
이렇게 나온 결과 값 0 1 1 0 1 1 0 1가 CipherText(01000110)를 Key(1010000010)로 복호화한 PlainText(평문)이 된다.


이미지 출처 및 참고 자료

글의 문제가 있다면 댓글을 달아 주세요.

This site uses Akismet to reduce spam. Learn how your comment data is processed.