"DES"의 두 판 사이의 차이
(→특징) |
(→동작 과정) |
||
(사용자 2명의 중간 판 16개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | '''DES'''(Data Encryption Standard)는 64비트의 평문을 46비트의 암호문으로 만드는 [[ | + | '''DES'''(Data Encryption Standard)는 64비트의 평문을 46비트의 암호문으로 만드는 [[블록암호]] 시스템으로 64비트의 키를 사용한다. '''데이터 암호화 표준'''이라고 한다. 64비트의 키(외부 키)중에서 56비트는 실제의 키(내부 키)가 되고 나머지는 거사용 비트로 사용된다. |
== 개요 == | == 개요 == | ||
− | 갑자기 나온 | + | 갑자기 나온 [[알고리즘]]은 아니고 DES가 나오기 이전인 1971년에 IBM에서 '루시퍼'라는 [[암호]] 알고리즘을 개발했는데 이를 개량하여 NIST가 국가 표준으로 지정한 알고리즘이 DES 이다. 이름부터가 'Data Encryption Standard'로 표준임을 어필하고 있다. 21세기에 와서는 이미 낡아도 한참 낡은 알고리즘이지만 70~80년대 당시에는 강력한 알고리즘이어서 워낙 오랫동안 표준으로 쓰여왔던 터라 오늘날에도 종종 이 기술의 흔적을 마주칠 수 있을 정도이다. |
− | 블록 암호 기법을 사용하며 16단계의 파이스텔 네트워크(Feistel Network)를 거쳐 | + | [[블록]] 암호 기법을 사용하며 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 등등)을 사용하면 수 시간 만에 뚫을 수 있다. 따라서 현대에는 기존에 암호화된 문서를 복호화하는 용도로만 사용하고 신규 암호화 문서를 생성하는 데는 절대로 사용하지 말 것을 권장하는 암호화 알고리즘이다.<ref name="나무위키> 〈[https://namu.wiki/w/DES DES]〉,《나무위키》 </ref> |
==역사== | ==역사== | ||
18번째 줄: | 18번째 줄: | ||
== 동작 과정 == | == 동작 과정 == | ||
− | #먼저 64비트의 평문이 첫 라운드를 거치지 전, IP(initial permutation, 초기치환)를 거친다. | + | # 먼저 64비트의 평문이 첫 라운드를 거치지 전, IP(initial permutation, 초기치환)를 거친다. |
− | #IP를 거친 후 나온 64비트 값은 각 L0와 R0로 32비트씩 나뉘어 들어간다. | + | # IP를 거친 후 나온 64비트 값은 각 L0와 R0로 32비트씩 나뉘어 들어간다. |
− | #R0에 해당하는 32비트는 각 키 스케줄에 의해 나온 첫번째 48비트 키와 F 함수에 들어가고 F 함수는 결국 32비트를 도출해낸다. | + | # R0에 해당하는 32비트는 각 키 스케줄에 의해 나온 첫번째 48비트 키와 F 함수에 들어가고 F 함수는 결국 32비트를 도출해낸다. |
− | #이렇게 생성된 32비트와 L0의 32비트를 XOR해준다. | + | # 이렇게 생성된 32비트와 L0의 32비트를 XOR해준다. |
− | #마지막으로 생성된 32비트를 또 R1에 보내준다. 이 과정을 16라운드까지 반복해준다. | + | # 마지막으로 생성된 32비트를 또 R1에 보내준다. 이 과정을 16라운드까지 반복해준다. |
− | # 마지막 라운드를 거칠때는 L과 R이 반대로 들어가게 된다. | + | # 마지막 라운드를 거칠때는 L과 R이 반대로 들어가게 된다. |
− | #이후 IP의 역에 들어가게 되고 마지막으로 output인 64비트 암호문을 얻게 된다. <ref name="크로커스"></ref> | + | # 이후 IP의 역에 들어가게 되고 마지막으로 output인 64비트 암호문을 얻게 된다.<ref name="크로커스"></ref> |
== 취약점 == | == 취약점 == | ||
34번째 줄: | 34번째 줄: | ||
== 활용 == | == 활용 == | ||
− | === | + | === 2중 DES === |
− | === | + | 2중 DES는 DES의 2배 키길이긴 하지만 메모리 용량이 충분하면 57비트의 효과 밖에 얻질 못한다. 따라서 말만 중이고 그냥 DES나 2중 DES나 별차이 없다. 1비트 높아져서 DES보다 조금 강화됐다고 보면 된다.<ref> 물한방울, 〈[http://blog.naver.com/PostView.nhn?blogId=asd7979&logNo=30181627741&redirect=Dlog&widgetTypeCall=true DES(Data Encryption Standard)]〉, 《네이버 블로그》, 2013-12-20</ref> |
+ | |||
+ | === 3중 DES === | ||
Triple DES(3DES) 또는 Triple Data Encryption Algorithm(TDEA)는 FIPS 승인된 DES 알고리즘의 개선이다. | Triple DES(3DES) 또는 Triple Data Encryption Algorithm(TDEA)는 FIPS 승인된 DES 알고리즘의 개선이다. | ||
44번째 줄: | 46번째 줄: | ||
ANSI X9.52는 묶음으로 키 선택에 대한 3가지 옵션을 가진다. | ANSI X9.52는 묶음으로 키 선택에 대한 3가지 옵션을 가진다. | ||
− | + | *3개 상호 독립적인 키 | |
− | + | *2개 상호 독립적인 키, 3번째 키는 1번째와 같다. | |
− | + | *3개 동일한 키의 묶음을 사용한다.<ref> 코드구루구루, 〈[https://iloveaired.tistory.com/entry/3DESTriple-Data-Encryption-Algorithm 3DES(Triple Data Encryption Algorithm)]〉, 《티스토리》, 2010-04-21</ref> | |
{{ 각주 }} | {{ 각주 }} | ||
== 참고자료 == | == 참고자료 == | ||
− | + | * 양대일, 〈[https://terms.naver.com/entry.nhn?docId=3431991&cid=58437&categoryId=58437&expCategoryId=58437 DES 알고리즘]〉, 《정보 보안 개론》, 한빛아카데미㈜, 2013-06-28 | |
+ | * crocus, 〈[https://www.crocus.co.kr/1210 DES 암호 알고리즘]〉, 《개인 블로그》, 2018-03-20 | ||
+ | * 물한방울, 〈[http://blog.naver.com/PostView.nhn?blogId=asd7979&logNo=30181627741&redirect=Dlog&widgetTypeCall=true DES(Data Encryption Standard)]〉, 《네이버 블로그》, 2013-12-20 | ||
+ | * 코드구루구루, 〈[https://iloveaired.tistory.com/entry/3DESTriple-Data-Encryption-Algorithm 3DES(Triple Data Encryption Algorithm)]〉, 《티스토리》, 2010-04-21 | ||
+ | * 〈[https://namu.wiki/w/DES DES]〉, 《나무위키》 | ||
== 같이 보기 == | == 같이 보기 == | ||
57번째 줄: | 63번째 줄: | ||
* [[SEED]] | * [[SEED]] | ||
− | {{암호 알고리즘| | + | {{암호 알고리즘|검토 필요}} |
2020년 8월 28일 (금) 12:19 기준 최신판
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]
동작 과정[편집]
- 먼저 64비트의 평문이 첫 라운드를 거치지 전, IP(initial permutation, 초기치환)를 거친다.
- IP를 거친 후 나온 64비트 값은 각 L0와 R0로 32비트씩 나뉘어 들어간다.
- R0에 해당하는 32비트는 각 키 스케줄에 의해 나온 첫번째 48비트 키와 F 함수에 들어가고 F 함수는 결국 32비트를 도출해낸다.
- 이렇게 생성된 32비트와 L0의 32비트를 XOR해준다.
- 마지막으로 생성된 32비트를 또 R1에 보내준다. 이 과정을 16라운드까지 반복해준다.
- 마지막 라운드를 거칠때는 L과 R이 반대로 들어가게 된다.
- 이후 IP의 역에 들어가게 되고 마지막으로 output인 64비트 암호문을 얻게 된다.[2]
취약점[편집]
선형 공격(Linear Cryptanalysis)[편집]
DES는 선형 공격에 취약하다. DES 알고리즘에 대한 공격으로 선형 공격이 가장 강력한 것으로 알려져있다. 이를 방지하기 위해 DES 직후에 개발된 알고리즘은 대부분 SPN(Substitution-Permutation-Network) 구조로 설계되었다.[1]
차분 공격(Differential Cryptanalysis)[편집]
DES는 차분 공격에 취약하다. 선형 공격에 안전하기 위해서는 차분 공격에 대한 안전성을 조금은 포기해야하는데, 이를 최소화하기 위한 방법으로 AES의 S-box가 설계되었다.[1]
활용[편집]
2중 DES[편집]
2중 DES는 DES의 2배 키길이긴 하지만 메모리 용량이 충분하면 57비트의 효과 밖에 얻질 못한다. 따라서 말만 중이고 그냥 DES나 2중 DES나 별차이 없다. 1비트 높아져서 DES보다 조금 강화됐다고 보면 된다.[3]
3중 DES[편집]
Triple DES(3DES) 또는 Triple Data Encryption Algorithm(TDEA)는 FIPS 승인된 DES 알고리즘의 개선이다.
3DES는 NIST Special Publication 800-67에 기술되어 있다. 원래 명세서는 ANSI X9.52이다. 3DES는 암호화-복호화-암호화(EDE) 모드로 3개의 64비트 DES 키(K1, K2, K3)를 사용한다. 즉, 평문은 K1으로 암호화되고, K2로 복호화되고, K3로 암호화된다. DES-EDE 모드라고도 한다. 3DES 키는 3개(K1, K2, K3)로 구성된다. 3개 키는 키 묶음으로 참조된다. 키 묶음은 3 x 64 = 192비트이다.
ANSI X9.52는 묶음으로 키 선택에 대한 3가지 옵션을 가진다.
- 3개 상호 독립적인 키
- 2개 상호 독립적인 키, 3번째 키는 1번째와 같다.
- 3개 동일한 키의 묶음을 사용한다.[4]
각주[편집]
- ↑ 1.0 1.1 1.2 〈DES〉,《나무위키》
- ↑ 2.0 2.1 crocus, 〈DES 암호 알고리즘〉, 《개인 블로그》, 2018-03-20
- ↑ 물한방울, 〈DES(Data Encryption Standard)〉, 《네이버 블로그》, 2013-12-20
- ↑ 코드구루구루, 〈3DES(Triple Data Encryption Algorithm)〉, 《티스토리》, 2010-04-21
참고자료[편집]
- 양대일, 〈DES 알고리즘〉, 《정보 보안 개론》, 한빛아카데미㈜, 2013-06-28
- crocus, 〈DES 암호 알고리즘〉, 《개인 블로그》, 2018-03-20
- 물한방울, 〈DES(Data Encryption Standard)〉, 《네이버 블로그》, 2013-12-20
- 코드구루구루, 〈3DES(Triple Data Encryption Algorithm)〉, 《티스토리》, 2010-04-21
- 〈DES〉, 《나무위키》
같이 보기[편집]