오늘은 DES(Data Encryption Standard, 이하 데스)의 구조에 대해서 알아볼까 한다. 대칭키암호의 종류로는 블록암호 와 스트림암호로 나뉘는데, 그중 블록암호의 한 종류인 데스에 대해서 설명한다. 데스는 1970년대 쯤에 미국 NIST에서 개발이 되어 2000년도 전에 암호가 깨진 사례가 있었다. 그로인해 새로운 암호가 필요했는데, 그게 AES(Advanced Encryption Standard)이다. 이름에서도 알수 있듯이 어드벤스드 된 암호이다. 말이 샜는데, 데스 구조에 대해서 알아보자.




위 사진은 데스 알고리즘이다. 간단하게 보면 맨위의 인풋(평문)이 들어가면 중간의 암호화 과정을 통해 아웃풋(암호문)으로 나오는 과정이다. 데스는 인풋으로 평문 64bit가 들어간다. 즉. 평문을 64bit씩 쪼개어 암호화를 한다. 64비트가 인풋되면 초기치환(IP, Initial Permutation)을 통해 64비트 값이 치환된다. 치환된 64비트는 32비트 32비트 이렇게 딱 반을 쪼갠다. 레프트0 라이트0로 표현을 한다.(뒤에 숫자는 라운드 수를 의미) 라이트0는 레프트1로 바로 내려오고, 레프트0의 값에 영향을 미친다. 즉. 라이트0은 f함수의 인풋으로 32비트 들어간다. F함수는 라이트0(32비트)와 스케줄된 키(48비트)가 인풋된다. F함수는 함수 내부적인 과정을 통해 32비트를 아웃풋하고 레프트0와 XOR연산을 취한다. 그값이 라이트1번으로 넘어간다. F함수는 뒤에서 한번더 얘기해볼까 한다. F함수가 데스의 핵심이라고 나는 생각한다.. 이러한 과정이 16번 돌아가면서(16라운드) 맨마지막에 레프트15 라이트15 값의 위치만 바뀐다. 마지막으로 초기치환의 역을 계산하면 암호화 과정이 종결된다. 



위 사진은 f함수의 내부구조이다. DES구조를 보면 맨처음에 라이트0번이 f함수로 인풋된다. 인풋된 32비트는 확장(Expansion)을 통해 48비트로 확장된다. 그값이랑 키 스케줄러에 의해 만드러진 각각의 라운드 키랑 XOR을 취한다. 키 스케줄러는 좀있다 설명하려고 한다. XOR취한 값은 48비트로, 48비트는 6비트를 8개로 쪼개어 분류한다. 각각의 6비트는 S박스를 통해 4비트로 축소된다(4비트 * 8개, 32비트). 32비트 의 값은 치환과정을 거쳐 아웃풋으로 나오게된다.




마지막으로 위 사진은 키 스케줄러의 구조이다. 위 과정을 통해 각각의 라운드에 맞는 각각의 라운트키가 생성이 된다.

여기서 키(56비트)는 PC를 통해 각각 28, 28비트로 나뉘어진다. 나뉜 값은 각각 쉬프트 연산을 통해 48비트로 변환 된다.

이 과정을 16번(16라운드)를 통해서 각각의 라운드에 맞는 라운드키가 생성이 된다.


이글은 내 머리속에서 나온내용이라 다소 내용이 틀릴수도 있으니, 읽다가 내용이 이상하면 언제든지 댓글로 남겨주시면 감사하겠습니다.





'Etc > Cipher' 카테고리의 다른 글

AES(Advanced Encryption Standard) 구조  (0) 2017.09.27
HMAC 에 대해서...  (0) 2014.10.03
,