Shine's dev log

DES 암호화 본문

보안

DES 암호화

dong1 2020. 5. 7. 10:56

1. DES

 

DES(Data Encryption Standard)는 Feistel 암호로 널리 사용되던 암호중에 하나였다.

 

DES 대칭키 암호이고, 블록암호이다.

 

DES의 과정을 대략적으로 살펴보면, 다음과 같은 세 단계를 거친다.

 

1) Initial permutaion

2) 16번의 라운드함수

3) Final permutaion

 

중요한 특징은 56비트 키를 이용한다는것과 매 라운드마다 48비트 키를 사용한다는 것이다.

 

그렇다면 암호화 과정을 한단계씩 자세히 살펴보자.

 

 

 

2. Initial, Final permutation

 

처음 64비트 평문이 들어왔을때와 마지막 64비트 암호문이 생성되기 직전에 수행되는 permutation 과정이다. 즉 straight P-box를 사용한다.

 

이 때, initial P-box와 final P-box는 서로 역관계이다.

 

 

 

3. 라운드 함수

 

처음 Initial Permutation을 진행하고 난 뒤에, 16번의 라운드 함수를 거친다고 했는데, 이 과정을 살펴보자.

 

한 라운드의 과정은 아래와 같다.

 

1) 쪼개진 R bits (32 bits) 들을 Expansion P-box에 넣어서 48bits로 만든다.

2) 키스트림을 통해 만들어진 라운드 키 (48 bits)와 XOR연산한다.

3) S-box를 통해 치환을 수행하여 32bits로 만든다.

4) 마지막으로 P-box에 permutation을 수행해준다.

 

 

 

4. 키 생성

 

위의 과정에서 알 수 있듯이, DES에서는 56비트의 키가 필요하고, 매 라운드마다 48비트의 라운드키를 사용한다.

 

즉, 56비트의 키를 가지고 48비트 라운드키를 16개 만들어야한다. 이 과정을 정리해보자.

 

 

라운드 키 생성과정은 다음과 같다. (PC는 Permutation Choice이다)

 

1) 패리티 드랍을 통해 56비트로 만든다. - PC1

2) 56비트를 28비트씩 반띵해서 각각 shift left 한다. - 1, 2, 9, 16라운드는 한번 쉬프트하고, 나머지는 두번 쉬프트한다

3) 반띵한걸 Compression P-box에 넣어서 라운드 키를 생성한다. - PC2

 

Key generation과정에서는 s-box가 사용되지 않는다.

 

 

 

5. DES의 복호화

 

DES 와 같은 Feistel 암호의 경우 복호화가 간단하다. 그저 매 라운드키를 거꾸로 대입시킨 뒤 IP의 역연산을 수행하면 끝이다.

 

 

 

6. Triple DES

 

예전에는 56 비트 키를 이용하는 DES도 충분히 안전했지만, 최근 컴퓨팅의 발전으로 인해 더이상 DES는 안전하지 않다. 이미 1999년의 컴퓨터를 이용하여 반나절만에 DES를 풀 수 있었으니 최근에 DES를 푸는 것은 순식간일 것이다.

 

이 문제를 해결하기 위해서는 키의 사이즈를 늘리는 것이고, 그러기 위해서는 DES를 여러번 반복하면 된다.

 

하지만 DES를 두번 반복하면, 키가 112비트가 될 것이라고 착각하지만, 사실은 Meet-in-the-middle attck 때문에 키는 57비트가 된다. 즉 1비트가 올라갈 뿐이다.

 

그래서 DES를 세번 반복하는 Triple DES 를 사용하는데, 물론 이 경우도 Meet-in-the-middle attck 때문에 키는 168비트가 아니라 112비트의 효과를 가진다.

 

112비트면 충분히 안전하지만, 1) 상대적으로 느리고 2) 64비트 블록사이는 좀 작다는 단점들이 있다.

 

 

 

7. Meet-in-the-middle attack

 

앞서 나온 Meet-in-the-middle attack을 하기 위해서는 평문과 암호문 두쌍이 필요하다.

 

1) 하나의 평문에 대하여 가능한 키의 경우의수(2^56 가지)만큼 암호화하여 중간 암호문들을 얻어낸다.

(중간암호문이란, 두번의 암호화과정 중에서 한번의 암호화과정만을 거친 암호문이다.)

 

2) 그 평문에 대응하는 암호문을 키 후보들로 하나씩 복호화하면서 1)의 결과와 비교한다.

 

3) 1)의 결과와 같은게 나오면, 다른 평문-암호문 쌍으로 검산해본다.

 

4) 쉽죠?

 

 

오늘 내용을 정리해보면,

 

1. DES는 대칭키 블록암호에 사용한다.

 

2. 64비트 평문을 56비트 키를 이용하여 암호화한다.

 

3. 16개의 라운드를 거치는데, 이 때 48비트 라운드키를이용한다.

 

4. 라운드키는 P-box와 쉬프트연산을 이용해 만들어낸다.

 

5. 요즘엔 Triple DES 사용한다. 

 

 

위 내용은 공부하며 작성한 것으로, 치명적인 오류가 있을 수 있습니다.

'보안' 카테고리의 다른 글

RC4 암호 알고리즘  (0) 2020.05.14
AES 암호화  (0) 2020.05.08
블록암호(Block cipher)와 스트림암호(Stream cipher)  (0) 2020.05.06
치환암호와 전치암호  (0) 2020.05.05
암호란 무엇인가? (암호의 원리와 공격유형)  (0) 2020.05.04