×
Crocus
공부한 내용을 정리하는 블로그로 시작한
Crocus는 2014년 1월 14일 부터 시작하여
현재 월 6만명, 총 1,583,131명의 방문자 수를 기록하고 있습니다.
Donation
이제 많은 사용자들이 이용하는 만큼
더 다양한 서비스 개발/제공을 위해 후원금을 모금하고자 합니다.
후원을 해주시는 분들은 Donators 명단에 성명, 후원금을 기입해드리며
Crocus 블로그가 아닌 다른 곳에 정리해둔 저만의 내용을 공유해 드리고자 합니다.
Account
예금주 : 고관우
신한은행 : 110-334-866541
카카오뱅크 : 3333-01-7888060

👉 후원 페이지 바로가기 Donators
익명 : 5000원(Crocus응원합니다.)
busyhuman: 5000원(유용한 지식 감사합니다.)
익명 : 5000원(알고리즘 학습러)
728x90
반응형

1. DES ( Data Encryption Standard ) 암호 알고리즘이란?


DES 알고리즘은 암호문을 작성할 때 사용하는 암호키와 암호문을 해독할 때 사용하는 해독키같다


따라서 이 키는 절대로 외부에 유출되지 않도록 관리해야 하여 비밀키(Secret Key)라고 부른다. 


또한 양쪽이 동일 키를 사용한다고 해서 대칭키(Symmetric Key)라고도 한다. 이처럼 외부 사용자에게 노출되지 않아야 하는 암호키로 암호화하는 알고리즘을 비공개키 알고리즘이라고 한다.


비공개키 방식의 DES(Data Encryption Standard) 알고리즘은 미국 정부가 개발하여 여러 하드웨어와 소프트웨어에서 사용되어 왔다. 대체 암호화와 위치 암호화를 복잡하게 조합하여 개발한 DES 알고리즘은 암호화를 64비트 단위로 수행하며, 암호키의 크기는 56비트다.

[네이버 지식백과] DES 알고리즘 (데이터 통신과 컴퓨터 네트워크, 2013. 9. 10., 한빛아카데미(주))

http://terms.naver.com/entry.nhn?docId=2271970&cid=51207&categoryId=51207



2. DES 암호 알고리즘 특징


DES는 평문을 64비트로 나눠 56비트의 키를 이용하여 다시 64비트의 암호문을 만들어 내는 암호 알고리즘이다.


이때 암호문은 16번의 반복을 통해 만들어지는데 이때 16번의 반복동안 라운드 함수를 적용하고 이때 라운드 함수에 적용되는 키는 라운드 키이다.


이때 라운드 키는 키 스케줄에 의해 라운드 키를 발생시킨다.


DES Feistel Cipher 방식으로 암호화를 한다. (AES는 SPN(Substitution-Permutation Network) 방식으로 암호화를 한다.)




3. DES 암호 알고리즘 동작 과정


1. 먼저 64비트의 평문이 첫 라운드를 거치지 전, IP(initial permutation, 초기치환)를 거친다.


2. IP를 거친 후 나온 64비트 값은 각 L0와 R0로 32비트씩 나뉘어 들어간다.


3. R0에 해당하는 32비트각 키 스케줄에 의해 나온 첫번째 48비트 키와 F 함수에 들어가고 F 함수는 결국 32비트를 도출해낸다.


4. 이렇게 생성된 32비트와 L0의 32비트를 XOR해준다.


5. 마지막으로 생성된 32비트를 또 R1에 보내준다.


이 과정을 16라운드까지 반복해준다.


6. 마지막 라운드를 거칠때는 L과 R이 반대로 들어가게 된다.(R16, L16 참고)


7. 이후 IP의 역에 들어가게 되고 마지막으로 output인 64비트 암호문을 얻게 된다. 





4. F함수



1. 각 라운드마다 오른쪽(R)의 32비트가 E(expansion)을 거쳐 48비트가 된다.


2. 이렇게 얻은 48비트와 키 스케줄을 거친 키 48비트XOR을 거치고 F함수로 들어간다.


3. XOR로 얻은 48비트는 8부분으로 나뉘어 각각 6비트씩 S-BOX에 들어간다.


4. S-BOX에 들어갔다 나온 값들은 4비트로 나오게 되고 결국 모두 합치면 8*4인 32비트가 나온다.


5. 결국 32비트는 P(permutation)을 거쳐 F함수의 결과인 32비트를 도출해낸다.


(SBOX 참고 :: http://terms.naver.com/entry.nhn?docId=3431991&cid=58437&categoryId=58437)






5. 키 스케줄



처음 64비트 key는 PC1을 거쳐 56비트의 키가 된다. 이때 사용되지 않은 8비트는 패리티 비트로 사용된다.


56비트는 left, right로 28비트씩 반반 가는데 이때  각 라운드마다 키 회전 스케쥴에따라 왼쪽으로 1비트 혹은 2비트 회전하게 된다.

(1,2,9,16번째는 한번 쉬프트, 나머지는 두번 쉬프트한다.)


첫번째 키는 1번 쉬프트를 하고 두 부분을 합쳐 PC 2를 통과시켜 48비트가 된다.


두번째 키는 1번 쉬프트를 하고 두 부분을 합쳐 PC 2를 통과시켜 48비트가 된다.


세번째 키는 2번 쉬프트를 하고 두 부분을 합쳐 PC 2를 통과시켜 48비트가 된다.


...

열여섯번째 키는 1번 쉬프트를 하고 두 부분을 합쳐 PC 2를 통과시켜 48비트가 된다.






6. DES 복호화(DES 취약점) 


반대 방향으로. 16번째 키, 15번째 키, ... 를 이용해 16라운드를 다시 거친 뒤 IP의 역연산을 거치면 처음 평문을 얻을 수 있다.






반응형

'Applied > Hacking and Security' 카테고리의 다른 글

타원 곡선 암호학(Elliptic Curve Cryptography)  (3) 2018.04.10
일방향 해시 함수  (0) 2018.03.24
DES 암호 알고리즘  (5) 2018.03.20
RSA 암호 알고리즘  (9) 2018.03.14
2의 보수, 보수(Complements)를 이용한 값 구하기  (6) 2016.10.20
진법 변환  (2) 2016.10.20
  1. BB 2019.04.25 19:41

    열여섯번째 키는 2번 쉬프트를 하고 두 부분을 합쳐 PC 2를 통과시켜 48비트가 된다.

    2번이 아니라 1번 쉬프트인거 같네요

  2. ㄴㅇ 2019.10.12 16:53

    와진짜 엄청 큰 도움됐습니다.

    • 가누 2019.10.12 22:05 신고

      저도 처음엔 힘들었던 기억이있네요ㅎㅎ
      감사합니다!

  3. 2020.05.04 18:43

    비밀댓글입니다