3. DES 란?
대칭 암호
* 블록 암호 : DES/3DES, AES
* 스트림 암호
비대칭 암호
* 공개키 암호
* 공개키 서명
해시 암호
DES(Data Encryption Standard)란?
DES/3DES(TDES) => AES
1) 대칭/비대칭, 대칭키/비밀키
대칭(Symmetric) 암호 알고리즘 <--> 비대칭(Asymmetric) 암호 알고리즘
비공개키 암호 알고리즘 <--> 공개키 암호 알고리즘
대칭키(Symmetric Key) <--> 비대칭키(Asymmetric Key)
= 비밀키(Secret Key)/공유키 <--> 공개키(Public Key)/개인키(Private Key)
- DES 알고리즘은 암호문을 작성할 때 사용하는 암호키와 암호문을 해독할 때 사용하는 해독키가 같다. 따라서, 이 키는 절대로 외부에 유출되지 않도록 관리해야 하여 비밀키(Secret Key)라고 부른다.
- 또한, 양쪽 시스템이 동일 키를 사용한다고 해서 대칭키(Symmetric Key)라고도 한다. 이처럼 외부 사용자에게 노출되지 않아야 하는 암호키로 암호화하는 알고리즘을 비공개키 알고리즘이라고 한다.
2) DES(Data Encryption Standard)
https://en.wikipedia.org/wiki/Data_Encryption_Standard
DES(Data Encryption Standard)는 1977년에 미국의 연방 정보 처리 표준 규격(FIPS)으로 채택된 대칭 암호이다.
DES는 64비트(8비트 parity, 56비트 + 8비트)의 키를 적용하여 64비트의 평문을 64비트의 암호문으로 암호화 시키는 대칭형 블록 암호이다.
이때, 암호문은 16번(16라운드)의 반복을 통해 만들어지는데, 이때 16번의 반복 동안 라운드 함수를 적용하고, 이때 라운드 함수에 적용되는 키는 라운트 키이다. 라운트 키는 키 스케줄에 의해 라운드 키를 발생시킨다.
DES의 블록 암호 구조는 파이스텔(Feistel Cipher) 방식이다.
(AES의 블록 암호 구조는 SPN(Substitution Permutation Network) 구조이다.)
DES 알고리즘에서 사용하는 함수
- 대체(Substitution)
- 치환(Permutation)
대체와 치환은 1949년도에 클라우드 샤논(Claude Shanon)이 제시한 혼돈(Confusion)과 확산(Diffusion)이라는 두 가지 개념에 기반을 두고 있다.
전사 공격으로 해독 할 수 있는 수준
DES 콘테스트(DES Challenge)
- 1997년 DES Challenge I => 96일
- 1998년 DES Challenge II-1 => 41일
- 1998년 DES Challenge II-2 => 56시간
- 1999년 DES Challenge III => 22시간 15분
DES 암호화/복호화
- 64비트 평문을 64비트 암호문으로 암호화하는 대칭 암호 알고리즘
- 키의 비트 길이는 56비트(64비트 = 56비트 + 8비트 parity)
- 64비트 평문(비트열)을 하나의 단위로 모아서 암호화
블록 암호(Block Cipher)
- 블록 단위로 처리를 하는 암호 알고리즘
- 긴 비트 길이의 평문을 암호화하기 위해서는 평문을 64비트 블록으로 나누고 각각을 DES로 암호화 한다.
대칭키 기반 암호
스트림 암호(Stream Ciphers)
- 스트림 암호(Stream Cipher)는 평문과 동일한 길이의 키스트림(key stream) 수열을 생성하여, 평문과의 XOR연산을 통하여 암ㆍ복호화를 수행한다.
- 키스트림 수열을 생성할 때, 평문과 독립적으로 생성하는 경우를 동기식 스트림 암호라고 하며, 반대로 평문이 키스트림 수열에 영향을 미치는 경우를 비동기식(혹은 자기동기) 스트림 암호라고 한다.
- 구현 여건이 제약되는 환경에서 구현이 용이하며, 무선 통신 등의 환경에 주로 사용된다.
- 한번에 1비트 or 1바이트의 디지털 데이터 스트림을 암호화 하는 방식
- Steam Ciphers 예: ARC4, ChaCha20, XChaCha20, Salsa20 등
- Stream ciphers + MAC 예: ChaCha20-Poly1305, XchaCha20-Poly1305 등
블록 암호 기법
- 블록 암호(Block Cipher)는 평문을 고정된 크기의 블록단위로 암ㆍ복호화를 수행하며, 각 블록마다 동일한 키가 사용된다.
- 블록 암호는 고정된 크기로 평문을 나누기 때문에, 원하는 길이를 맞추기 위하여 패딩(padding)이라는 기법을 이용한다. 또한, 하나의 키로 여러 블록을 안전하게 처리하기 위하여 운용 방식(mode of operation)이라는 절차를 이용한다.
- 평문 블록 전체를 가지고 같은 크기의 암호문 블록을 생성
- 모드를 이용하여 스트림 암호 기법과 동일한 효과
파이스텔(Feistel) 암호 방식(혼돈과 확산: Confusion & Diffusion)
- Calude Shannon 소개(SHAN49): 매우 이상적인 암호는 암호문에 대한 모든 통계적 정보가 사용된 키와 독립적이어야 한다.
- 통계적 분석에 기초한 암호 해독 방지
- 혼돈
* 키를 발견하기 어렵게 하기 위해 암호문에 대한 통계 값과 암호 키 값 사이에 관계를 복잡하게 하는 것
- 확산
* 평문의 통계적 구조가 암호문의 광범위한 통계값에 분산
* 키를 추론하기 어렵게 하기 위해 평문과 암호문 사이에 통계적인 관계를 가능한 복잡하게 만드는 것
- Block Cipher 예:*DES/3DES, AES 등
- Block Cipher + MAC funtion 예:* GCM, CCM, EAX, SIV, OCB 등
파이스텔(Feistel) 네트워크의 매개 변수와 설계 특성
- 블록 크기 : 64비트가 일반적이나 현재는 가변적 블록 크기로 128비트로 이용함.
- 키 크기 : 64비트 또는 128비트의 크기를 이용함
- 반복수 : Feistel 암호 방식은 다중 반복 과정은 보안성을 증가, 일반화는 16회
- 서브키 생성 알고리즘 : 알고리즘이 복잡할 수록 암호해독이 더욱 더 어려움
- 반복함수 : 함수가 복잡할 수록 일반적으로 암호해독이 더욱 더 어려움
- 빠른 소프트웨어 암호화/복호화 : 프로그램 실행 속도가 관심사
- 분석의 용이성
DES 암호 알고리즘 동작 과정
(출처: https://www.crocus.co.kr/1210)
페스탈(Feistel) 구조 (ㄱ) 먼저 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 참고) (O) 이후 IP의 역에 들어가게 되고, 마지막으로 output인 64비트 암호문을 얻게 된다. |
F 함수
(출처: https://www.crocus.co.kr/1210)
(ㄱ) 각 라운드마다 오른쪽(R)의 32비트가 E(expansion)을 거쳐 48비트가 된다. (ㄴ) 이렇게 얻은 48비트와 키 스케줄을 거친 키 48비트가 XOR을 거치고 F 함수로 들어간다. (ㄷ) XOR로 얻은 48비트는 8부분으로 나누어 각각 6비트씩 S-BOX에 들어간다. (ㄹ) S-BOX에 들어갔다 나온 값들은 4비트로 나오게 되고, 결국 모두 합치면 32비트(8*4=32)가 나온다. (ㅁ) 결국 32비트는 P(Permutation)을 거쳐 F 함수의 결과인 32비트를 도출한다. |
키 스케줄(Key Schedule)
(출처: https://www.crocus.co.kr/1210)
(ㄱ) 처음 64비트 Key는 PC1을 거쳐 56비트의 키가 된다. 이때 사용되지 않은 8비트는 패러티 비트로 사용된다. (ㄴ) 56비트는 left, right로 28비트씩 반반 가는데, 이때 각 라운드마다 키 회전 스케줄에 따라 왼쪽으로 1비트 혹은 2비트 회전하게 된다. (1, 2, 9, 16번째는 1번 Shift, 나머지는 2번 Shift 한다.) (ㄷ) 첫번째 키는 1번 Shift하고, 두 부분을 합쳐 PC2를 통과시켜 48비트가 된다. (ㄹ) 두번째 키는 1번 Shift하고, 두 부분을 합쳐 PC2를 통과시켜 48비트가 된다. (ㅁ) 세번째 키는 2번 Shift하고, 두 부분을 합쳐 PC2를 통과시켜 48비트가 된다. .... (ㅂ) 열여섯번째 키는 1번 shift를 하고 두 부분을 합쳐 PC2를 통과시켜 48비트가 된다. |
'현대 암호학' 카테고리의 다른 글
[현대 암호학] 04-5. AES 선정 과정 (0) | 2021.06.22 |
---|---|
[현대 암호학] 04-4. 트리플 DES (0) | 2021.06.22 |
[현대 암호학] 04-2. 일회용 패드 - 절대 해독 불가능한 암호 (0) | 2021.06.22 |
[현대 암호학] 04. 대칭(Symmetric) 암호 -1. 문자 암호에서 비트열 암호로 (0) | 2021.06.22 |
[현대 암호학] 03. 실습(4) (0) | 2021.06.22 |