[암호학] 대칭키 암호 - 현대 대칭키 암호 #블록 암호
1. 고전 대칭키 암호와의 차이점
(1) 고전 대칭키 암호
문자 기반(Character-oriented)의 암호이다.
(2) 현대 대칭키 암호
비트 기반(Bit-oriented)의 암호이다.
암호 대상이 텍스트에서 그래픽, 오디오, 비디오 등으로 확대
이들 데이터를 비트 스트림으로 변환하고 암호화하여 전송한다.
2. 현대 블록 암호
(1) 암호 설계 방식
1) 전치 암호 방식
- 평문 비트의 순서를 재배열하여 암호 한다.
- 평문의 0 또는 1의 개수는 암호문의 0 또는 1개의 가수와 같다.
- 전수 조서(Exhaustive search) 공격에 취약한다.
- 공격자는 64bit 평문 블록 중에 1비트 개수가 10개인 평문만 조사하면 되어 해독 시간이 빠르다.
2) 치환 암호 방식
- 평문의 비트 값 0과 1을 다른 비트값 1과 0으로 치환한다.
- 평문의 0 또는 1의 개수가 암호문의 0 또는 1의 개수와 다르다.
- 0의 개수가 12개, 1의 개수가 52개인 64bit 평문 블록이 0의 개수가 34개, 1의 개수가 30개인 암호 블록으로 암호 될 수 있다.
- 공격자가 64bit 블록 암호문을 가로챈 후 암호를 분석한다고 가정했을 때, 공격자는 이 암호문에 해당하는 평문에 1비트가 몇 개 있는지 알 수 없다. 암호를 분석하기 위해 64bit 블록에 대하여 최대 2^64번의 경우의 수를 모두 분석해야 한다.
(2) 현대 블록 암호의 구성요소
1) 개요
- 현대 블록 암호는 확산(암호문과 평문 사이의 관계를 숨김)과 혼돈(암호문과 키 사이의 관계를 숨심)과 같은 성질을 만족시키기 위하여 전치 요소(P-박스로 불림)와 치환 요소(S-박스로 불림) 그리고 그 밖의 구성 요소를 결합하여 설계된다.
- 공격 방지 암호를 제공하기 위해 현대의 블록 암호는 이동 요소(shift), 교환 요소(swap), 분할 요소(split), 조합 요소뿐만 아니라 전치 장치(Transposition, P-box)와 치환 장치(substitution, S-box)와 XOR연산의 조합으로 만들어진다.
2) P-박스(Permutation box)
- 평문 비트를 전치시키는(위치를 바꾼다) 기능을 한다
- 단순 P-박스, 확장 P-박스, 축소 P-박스 등 3가지 종류가 있다
① 단순 P-박스
- n비트를 입력받아 n비트를 출력한다
② 확장 P-박스
- n비트를 입력 받아 m 비트를 출력하는 P-박스로서 n <m을 만족한다.
- 입력 비트 중 특정 비트를 한 번 이상 출력한다.
- 비트를 치환하고 동시에 다음 단계에서 비트의 양을 증가시키고자 할 때 사용한다.
③ 축소 P-박스
- n비트를 입력받아 m비트를 출력하는 P-박스로서 n> m을 만족한다.
- 입력 비트 중 특정 비트는 소실되어 출력되지 않는다.
3) S-박스(Substitution box)
- 평문 비트를 치환시키는 (다른 문자로 바꾼다) 기능을 한다.
- 입력은 n비트 워드이고 출력은 m비트 워드 일 때, n과 m이 서로 달라도 된다.
- 역함수의 존재성 : S-박스는 입력값과 출력 값 사이의 관계가 테이블 혹은 수학적 관계로 정의되는 치환 암호이다. S-박스는 역함수가 존재할 수도 있고, 존재하지 않을 수도 있다. 역함수가 존재하는 S-박스는 입력 비트와 출력 비트의 개수가 동일하다.
4) 순환이동(Circular Shift) 연산
- 왼쪽 순환이동, 오른쪽 순환이동 연산이 있다.
- 평문 비트를 서로 섞는 역할을 한다.
- 왼쪽 순황이동 연산은 평문 n 비트를 왼쪽으로 k 비트만큼 순환한다.
5) 스왑(Swap) 연산
- 평문 입력 비트의 절반이 오른쪽 왼쪽으로 바뀌는 연산이다.
- 평문 비트가 짝수인 경우에만 연산이 이루어진다.
6) 배타적 논리합 (Exclusive-OR) 연산
- 평문과 키가 베타적 논리합 연산을 한다
(3) 현대 블록 암호 용어
1) 확산 (Diffusion)
- 암호문과 평문 사이의 관계를 숨기는 기능을 한다
- 확산 기능을 통해 공격자가 언어의 출현 빈도에 의한 암호문 해독을 불가능하게 한다
2) 혼돈(Confusion)
- 암호문과 키 사이의 관계를 숨기는 기능을 한다.
- 공격자가 암호문을 이용하여 키를 찾는 것을 불가능하게 한다.
3) 합성 암호(Product Cipher)
- 전치(P-박스), 치환(S-박스), 기타 다른 구성 요소들이 결합된 복합 암호이다.
- 합성 암호의 반복적인 사용으로 확산과 혼돈을 얻을 수 있다.
4) 라운드(Round)
- 합성 암호의 반복적 사용을 라운드라 칭한다.
- 각 라운드에서 암호가 이루어지기 때문에 N라운드의 암호에서는 N번의 암호가 이루어진다.
※ 양자 암호학
튼튼해서 누구도 열 수 없는 암호 전송용 상자를 만드는 것이 아닌,
통신 당사자가 아닌 다른 누군가가 엿보려고 시도하는 순간 부서져 버리는 매우 약한 상자를 만드는 원리
ex) 2개 라운드 처리 과정
① 8비트 평문이 라운드 키와 XOR 연산으로 서로 섞인다.
② 2비트씩 분할되어 4개의 S-박스로 입력된다.
③ S-박스의 출력 값은 P-박스의 통해 전치된 후, 다음 라운드의 입력 값이 된다.
(4) 두 가지 종류의 합성 암호
1) Feistel 암호
3라운드 이상의 구조로, 짝수 라운드로 구성된다. 입력을 좌우 블록으로 분할하여 한 블록을 라운드 함수에 적용시킨 후의 출력 값을 다른 블록에 적용하는 과정을 좌우 블록에 대해 반복적으로 시행하는 방식이다.
복호화 과정은 암호화 과정의 역순으로 작용한다.
2) Feistel 암호 특징
- Feistel 구조에서 입력 n비트를 두 개의 블록(L, R)으로 나누어 함수를 F, 라운드 키를 K라 할 때 i번째의 과정은 다음과 같다. (주의, 마지막 라운드에서 좌우 블록 한번 더 교체)
- 페이스 텔 네트워크는 많은 블록 암호 알고리즘에서 이용되고 있다.
Tip) 암호 강도를 결정짓는 요소
① 블록 크기(Block size) : 블록 길이가 크다는 것은 더 강한 보안을 의미 하지만 길이가 길면 암호화, 복호화 속도가 떨어진다. 128비트의 블록 크기는 이 두 가지를 조화시키는 합리적인 크기이고, 블록 암호 설계에서는 거의 공통적으로 이 크기의 블록을 사용한다.
② 키 길이(Key size): 키 길이가 길다는 것은 더 강한 보안을 의미하지만 암호/복호화 속도는 떨어진다. 현대 알고리즘에서 쓰이는 가장 보편적인 키 길이는 128비트이다.
③ 라운드 수(Number of rounds) : 단일 과정으로는 보안이 부족하지만 라운드 수를 증가시켜 여러 번 수행하면 보안을 강화할 수 있다는 것이 Feistel 암호의 핵심이다. 전형적인 라운드 수는 16이다.
④ 서브 키 생성 알고리즘(Subkey generation algorithm) : 이 알고리즘이 복잡하면 복잡할수록 암호해독이 어려워진다.
⑤ 라운드 함수(Round function) : 이 함수 역시 복잡하면 복잡할수록 암호해독이 어려워진다.
3) SPN 구조
① 대부분의 블록 암호는 라운드 함수를 반복적으로 적용하는 방법에 따라 크게 두 가지 형태로 구별된다. 하나는 SPN (Substitution Permutation Network)와 Feistel 구조이다.
② Substition Cipher와 Permutation Cipher를 중첩하는 형태, 입력을 여러 개의 소블록으로 나누고 각 소블록을 S-box로 입력하여 대치시키고 S-box의 출력을 P-box로 전치하는 과정을 반복하는 방식이다.
(5) 블록 암호에 대한 공격
1) 차분 분석(차분 해독법, Differential Cryptanalysis)
① 블록 암호를 보면 입력되는 평문이 한 비트라도 달라지면 암호문은 전혀 다른 비트 패턴으로 변화하게 된다. 그래서 암호문의 변화 형태를 조사하여 해독의 실마리를 얻는 해독 방법이다.
② Biham Shamir가 개발한 것, 블록 암호에 대하 암호 해독법 중의 하나
2) 선형 분석(선형 해독법, Linear Cryptanalysis)
① 마츠이(Matsui)가 개발한 방법으로, "평문과 암호문 비트를 몇 개 정도 XOR 해서 0이 되는 확률을 조사"하는 해독 방법
② 암호문이 충분히 랜덤 하게 되어 있으며, 평문과 암호문의 비트를 몇 개 XOR 한 결과가 0이 되는 확률은 1/2이 될 것이다. 그래서 1/2로부터 크게 벗어난 비트의 개수를 조사하여 키에 관한 정보를 얻는 것이다.
3) 선택 평문 공격(CPA, Chosen Plaintext Attack)
① 평문을 선택하면 대응하는 암호문을 얻을 수 있는 상황에서의 공격이다. 공격자가 한꺼번에 선택한 평문들에 대한 암호문이 주어진다는 가정 하에 복호화 키를 찾는 공격이다.
4) 전수 공격법(Exhaustive key search)
① Diffie와 Hellman이 제안한 방법, 암호화할 때 일어날 수 있는 가능한 모든 경우에 대하여 조하는 방법이며, 경우의 수가 적을 때는 가장 정확한 방법이지만, 일반적으로 경우의 수가 많은 경우에는 실현 불가능한 방법이다.
5) 통계적 분석(Statistical analysis)
① 암호문에 대한 평문의 각 단어별 빈도에 관한 자료와 더불어 지금까지 알려진 모든 통계적인 자료를 이용하여 해독하는 방법이다.
6) 수학적 분석(Mathematical analysis)
① 통계적인 방법을 포함하며 수학적 이론을 이용하여 해독하는 방법이다.