본문 바로가기
이론/네트워크

DES 알아보기 (Data Encryption Standard)

by 유세지 2023. 3. 18.

 

 

우리가 인터넷 상에서 데이터를 송·수신하는 것을 떠올려보면, 송신자에서 수신자에게 데이터가 전달되기까지 생각보다 꽤 많은 경로를 거쳐 지나간다는 것을 알 수 있습니다. 이런 점을 미루어보면 전송 과정 가운데 중간자가 요청을 가로채거나 하여 우리의 데이터가 남의 손에 들어가는 일은 그리 이상한 일이 아니라는 것을 깨닫습니다. 보수적으로 접근하면 오히려 항상 노출되어 있다고 보는 것이 무방합니다.

 

이렇게 위험한 데이터 통신이지만, 우리는 남에게 보여져서는 안되는 민감한 정보들을 하루에도 몇 번씩 보내곤 합니다. 아이디, 비밀번호, 계좌번호, 신상정보, 사생활 등등... 이런 정보들이 중간자에게 들어가서 악용될 수 있다고 생각하면 정말 끔찍한 일이 아닐 수 없겠죠.

 

그래서 사람들은 외부로부터 데이터의 기밀성을 지켜야 할 필요를 느꼈고, 그 방법으로 데이터를 암호화하여 통신하는 방법을 고안해 내었습니다.

 

 

암호화 된 데이터를 주고 받는 과정을 간략히 살펴보면, 아래 그림과 같습니다.

 

 

데이터를 암호화 하여 주고받는 과정

 

암호화 되기 이전의 원문 데이터를 평문(plaintext), 암호화가 완료된 데이터를 암호문(ciphertext)이라고 부릅니다. 평문에서 암호문으로 변조하는 과정을 암호화(Encryption: to Ciphertext)라고 부르고, 반대로 암호문을 평문으로 다시 돌리는 과정을 복호화(Decryption: to Plaintext)라고 합니다.

 

여기서 암호화 과정을 진행하려면 특정한 알고리즘이 필요합니다. 이 알고리즘에는 매번 다른 암호화를 적용할 수 있도록 하는 매개체가 필요한데, 이를 키(key) 라고 부릅니다.

 

방금 소개했던 주요 개념들을 통틀어 암호 시스템을 구성하는 다섯 가지 요소라고 부릅니다.

  • 평문, 암호문, 암호화, 복호화, 키

 

어떤 방식의 알고리즘을 사용하는지, 어떤 키들을 사용하는지에 따라 암호화의 종류는 다양하게 나뉘어지는데, 오늘은 그 중 대칭키 암호의 대표적인 예시로 사용되는 DES에 대해 알아보겠습니다.

 

 

 

대칭키 암호

먼저 대칭키 암호란 무엇일까요? 위에서 암호화 과정을 진행할때, 같은 암호화 알고리즘을 사용하더라도 다른 결과를 뽑아내기 위해서 사용하는 매개체가 바로 라고 언급했습니다.

 

암호화 과정 그림에서 키가 사용된 지점들을 보면 키는 암호화에 한 번, 복호화에 한 번. 총 두 번 사용된 것을 확인할 수 있습니다.

 

이처럼 암·복호화 두 과정에 동일한 키를 사용하는것이 대칭키(symmetric key) 암호화 방식입니다. 즉, 데이터를 주고 받는 양측이 동일한 키를 사용해서 암호화와 복호화를 진행하게 되는 방식입니다. 키를 가진 사람은 누구나 원본 데이터에 접근할 수 있으니 키를 철저하게 관리할 필요가 있습니다.

 

송신자와 수신자가 같은 키를 사용하는 방식을 대칭키 암호화라고 합니다.

 

 

DES(Data Encryption Standard)

이번 글에서 설명할 DES(Data Encryption Standard)는 대칭키 암호화 방식을 설명할 때 가장 많이 사용되는 예시입니다. 과거 1977년 미국의 연방 정보 처리 표준 규격(FIPS)으로 채택되었던 대칭 암호인데, 전사 공격(Brute force attack)으로 해독이 가능한 수준이라 현재는 표준으로 사용되지 않습니다.

 

연단위로 개최되었던 DES Challenge라는 행사에서 DES를 얼마나 빨리 해독할 수 있는지 챌린지를 진행했는데, 1997년 I에서는 해독에 96일이 걸리던 보안성이 1998년 II-1에서는 41일로, II-2에서는 56시간으로, 1999년 III에서는 22시간 15분까지 단축되어 사실상 암호화 방식으로는 더 이상 사용할 수 없게 되었습니다.

 

하지만 비교적 직관적인 알고리즘과 교육용 알고리즘인 단순 DES(S-DES) 의 존재 덕분에 대칭키 암호화를 설명하기에는 최적의 암호화 방식이 되었고, 현재 시중에 나와있는 대부분의 암호학 서적에서 꼭 소개되고 있습니다.

 

이제 DES가 어떻게 평문을 암호화하고, 암호문을 복호화하는지 그 과정을 살펴보겠습니다.

 

 

DES 적용 과정

 

 

전체적인 과정을 간단히 나타낸 그림입니다. 평문을 받아 64비트씩 처리하여 동일한 비트의 암호문을 출력하는 구조인데, DES는 64비트의 블록 단위로 동작하기 때문에 블록 암호의 일종으로 분류됩니다.

 

이때 사용되는 키 또한 64비트인데, 실제 연산 과정에서는 56비트만 사용됩니다. 나머지 8비트는 키가 제대로 전송되었는지 여부를 확인하는 패리티 비트로 사용되기 때문에 실제 암호화 연산에서 유효하게 사용되는 키의 크기는 56비트라고 할 수 있습니다.

 

먼저 키가 정제되는 과정입니다. 

 

 

각 라운드의 키가 생성되는 과정

 

 

들어온 키의 64비트 중 패리티 비트(8비트)를 제외한 56비트를 둘로 나누어 각 비트를 왼쪽으로 순환이동(LS: Left Shift)합니다. 이때 라운드에 따라 1비트 또는 2비트를 이동합니다.

 

순환이동이 끝난 비트는 합쳐져서 순열 선택(PC: Permuted Choice) 을 통과하고 수축하여, 해당 라운드의 키(48비트)가 됩니다.

 

DES는 16번의 라운드를 거치기 때문에, 키를 생성하는 이 과정 또한 총 16번 반복하게 됩니다.

 

 

키를 이용해 평문을 암호문으로 변조하는 과정

 

 

이번에는 키가 아닌 평문 자체를 암호문으로 바꾸는 과정입니다.

 

먼저 입력을 64비트 단위로 나누어 초기 순열(Initial Permutation)을 거칩니다. 이렇게 한 번 변환된 입력은 좌·우로 32비트씩 나누어집니다.

 

오른쪽 비트를 위에서 구한 첫 번째 라운드의 키와 함께 함수(F: Function)에 넣고, 그 결과를 왼쪽 비트와 XOR 연산을 실행합니다.

 

XOR 연산의 결과값을 다음 라운드의 오른쪽 비트로 보내고, 다음 라운드의 왼쪽 비트에는 이전 라운드의 오른쪽 비트를 대입합니다.

 

마찬가지로 이렇게 총 16번의 라운드를 반복하고, 마지막에 역 순열(Inverse Permutation)을 거쳐 64비트의 암호문이 생성됩니다.

 

 

여기서 오른쪽 비트와 키를 함께 사용했던 함수(Function) 내부를 조금 더 자세히 들여다보겠습니다.

 

 

함수(F) 의 내부 처리 과정

 

 

오른쪽 비트와 키를 연산하는 함수(Function)의 내부입니다. 오른쪽 비트와 라운드 키를 연산해주어야 하지만 서로 비트가 맞지 않기 때문에, 오른쪽 비트를 32비트에서 48비트로 키워주는 확장(Expansion) 과정을 거친 뒤 XOR 연산을 합니다.

 

이후 연산이 완료된 48비트의 결과물은 6비트씩 8부분으로 나뉘어 S-box에 들어갑니다. S-box는 6비트의 입력을 4비트의 출력으로 변환해주는 역할을 합니다. 이 과정을 거치면 (8 * 6비트) = 48비트에서 (8 * 4비트) = 32비트의 결과물이 나오게 됩니다.

 

마지막으로 32비트의 출력을 다시 순열(Permutation) 과정을 거쳐 내보내면 함수 F의 최종 출력이 됩니다.

 

 

 

마무리

오늘은 대칭키 암호의 대표적인 예시로 DES 방식의 암호화 과정을 알아보았습니다. 글에서는 암호화 과정만 살펴보았는데, 위 순서의 역순으로 진행해주면 그대로 DES의 복호화 과정이 됩니다.

 

머릿속으로 생각만 하면 이해가 잘 되지않아 그림과 함께 포스팅으로 정리를 해보았는데, 위 내용에 대해 공부하시는 분들께 도움이 되었으면 좋겠습니다.

 

읽어주셔서 감사합니다.

 

 

댓글