의견.png

"DES"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
9번째 줄: 9번째 줄:
 
1972년 미국 [[NBS]]에서 보안 문제의 심각함이 대두됨에 따라서 1975년에 [[IBM]]의 바터 투흐만(Water Tuchman)과 칼 마이어(Carl Meyer)가 개발하고 1977년 [[NIST]]에 의해서 암호화 표준으로 결정된 암호이다. 그러나 2001년에 NIST는 새로운 암호 기술 표준을 정하고  AES(Advanced Encryption Standard)가 도입됨에 따라서 교체가 이루어졌다.
 
1972년 미국 [[NBS]]에서 보안 문제의 심각함이 대두됨에 따라서 1975년에 [[IBM]]의 바터 투흐만(Water Tuchman)과 칼 마이어(Carl Meyer)가 개발하고 1977년 [[NIST]]에 의해서 암호화 표준으로 결정된 암호이다. 그러나 2001년에 NIST는 새로운 암호 기술 표준을 정하고  AES(Advanced Encryption Standard)가 도입됨에 따라서 교체가 이루어졌다.
  
 +
== 특징 ==
 +
 +
DES는 평문을 64비트로 나눠 56비트의 키를 이용하여 다시 64비트의 암호문을 만들어 내는 암호 알고리즘이다.
 +
이때 암호문은 16번의 반복을 통해 만들어지는데 이때 16번의 반복동안 라운드 함수를 적용하고 이때 라운드 함수에 적용되는 키는 라운드 키이다.
 +
이때 라운드 키는 키 스케줄에 의해 라운드 키를 발생시킨다.
 +
 +
DES는 Feistel Cipher 방식으로 암호화를 한다. (AES는 SPN(Substitution-Permutation Network) 방식으로 암호화를 한다.)<ref name="크로커스"> crocus, 〈[https://www.crocus.co.kr/1210 DES 암호 알고리즘]〉, 《개인 블로그》</ref>
 +
 +
== 동작 과정 ==
 +
#먼저 64비트의 평문이 첫 라운드를 거치지 전, IP(initial permutation, 초기치환)를 거친다.
 +
#IP를 거친 후 나온 64비트 값은 각 L0와 R0로 32비트씩 나뉘어 들어간다.
 +
#R0에 해당하는 32비트는 각 키 스케줄에 의해 나온 첫번째 48비트 키와 F 함수에 들어가고 F 함수는 결국 32비트를 도출해낸다.
 +
#이렇게 생성된 32비트와 L0의 32비트를 XOR해준다.
 +
#마지막으로 생성된 32비트를 또 R1에 보내준다.
 +
이 과정을 16라운드까지 반복해준다.
 +
# 마지막 라운드를 거칠때는 L과 R이 반대로 들어가게 된다.(R16, L16 참고)
 +
#이후 IP의 역에 들어가게 되고 마지막으로 output인 64비트 암호문을 얻게 된다. <ref name="크로커스"></ref>
 +
 +
 +
 +
출처: https://www.crocus.co.kr/1210 [Crocus]
 
== 취약점 ==
 
== 취약점 ==
 
=== 선형 공격(Linear Cryptanalysis) ===
 
=== 선형 공격(Linear Cryptanalysis) ===

2019년 8월 1일 (목) 13:43 판

DES(Data Encryption Standard)는 64비트의 평문을 46비트의 암호문으로 만드는 블록 암호 시스템으로 64비트의 키를 사용한다. 데이터 암호화 표준이라고 한다. 64비트의 키(외부 키)중에서 56비트는 실제의 키(내부 키)가 되고 나머지는 거사용 비트로 사용된다.

개요

갑자기 나온 알고리즘은 아니고 DES가 나오기 이전인 1971년에 IBM에서 '루시퍼'라는 암호 알고리즘을 개발했는데 이를 개량하여 NIST가 국가 표준으로 지정한 알고리즘이 DES 이다. 이름부터가 'Data Encryption Standard'로 표준임을 어필하고 있다. 21세기에 와서는 이미 낡아도 한참 낡은 알고리즘이지만 70~80년대 당시에는 강력한 알고리즘이어서 워낙 오랫동안 표준으로 쓰여왔던 터라 오늘날에도 종종 이 기술의 흔적을 마주칠 수 있을 정도이다.

블록 암호 기법을 사용하며 16단계의 파이스텔 네트워크(Feistel Network)를 거쳐 암호화를 수행한다. 블록의 단위는 64비트로 평문을 64비트 단위로 암호화를 수행하여 64비트의 암호화 문서를 생성하며 키 길이는 64비트지만 실제로는 패리티 비트가 8비트 붙어있어서 실제 키 길이(=암호화 강도)는 56비트이다. 아직 기술적 근간인 파이스텔 네트워크(Feistel Network)상에서의 구조적인 취약점은 발견되지 않았으나 알고리즘 자체는 여전히 견고한 편이지만 56비트 키가 오늘날 컴퓨팅 환경에서는 너무 짧다는 것이 문제이다. 이미 1998년에 미화 25만불을 들여 만든 DES 공격장치를 통해, 무차별 공격(Brutal Force Attack)방식으로 2일 이내에 암호를 털어낼 수 있었다. 그 이후로도 이러한 공격 시도는 계속되어서, 2006년엔 미화 1만불만으로 COPACOBANA와 같은 더 강력한 장치가 개발되기도 했으며 그보다 컴퓨팅 환경이 훨씬 발전한 2015년 현재를 기준으로 하면 암호화의 의미가 없다. 평범한 개인용 PC로도 최적화된 방법(SIMD, GPGPU 등등)을 사용하면 수 시간 만에 뚫을 수 있다. 따라서 현대에는 기존에 암호화된 문서를 복호화하는 용도로만 사용하고 신규 암호화 문서를 생성하는데는 절대로 사용하지 말 것을 권장하는 암호화 알고리즘이다.[1]

역사

1972년 미국 NBS에서 보안 문제의 심각함이 대두됨에 따라서 1975년에 IBM의 바터 투흐만(Water Tuchman)과 칼 마이어(Carl Meyer)가 개발하고 1977년 NIST에 의해서 암호화 표준으로 결정된 암호이다. 그러나 2001년에 NIST는 새로운 암호 기술 표준을 정하고 AES(Advanced Encryption Standard)가 도입됨에 따라서 교체가 이루어졌다.

특징

DES는 평문을 64비트로 나눠 56비트의 키를 이용하여 다시 64비트의 암호문을 만들어 내는 암호 알고리즘이다. 이때 암호문은 16번의 반복을 통해 만들어지는데 이때 16번의 반복동안 라운드 함수를 적용하고 이때 라운드 함수에 적용되는 키는 라운드 키이다. 이때 라운드 키는 키 스케줄에 의해 라운드 키를 발생시킨다.

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

동작 과정

  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라운드까지 반복해준다.

  1. 마지막 라운드를 거칠때는 L과 R이 반대로 들어가게 된다.(R16, L16 참고)
  2. 이후 IP의 역에 들어가게 되고 마지막으로 output인 64비트 암호문을 얻게 된다. [2]


출처: https://www.crocus.co.kr/1210 [Crocus]

취약점

선형 공격(Linear Cryptanalysis)

DES는 선형 공격에 취약하다. DES 알고리즘에 대한 공격으로 선형 공격이 가장 강력한 것으로 알려져있다. 이를 방지하기 위해 DES 직후에 개발된 알고리즘은 대부분 SPN(Substitution-Permutation-Network) 구조로 설계되었다.[1]

차분 공격(Differential Cryptanalysis)

DES는 차분 공격에 취약하다. 선형 공격에 안전하기 위해서는 차분 공격에 대한 안전성을 조금은 포기해야하는데, 이를 최소화하기 위한 방법으로 AES의 S-box가 설계되었다.[1]

각주

  1. 1.0 1.1 1.2 DES〉,《나무위키》
  2. 2.0 2.1 crocus, 〈DES 암호 알고리즘〉, 《개인 블로그》

참고자료

같이 보기


  의견.png 이 DES 문서는 암호 알고리즘에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.