IT/정보보안

[암호학] 대칭키 암호 - 현대 대칭키 암호 #블록 암호

액트 2019. 11. 13. 17:19

[암호학] 대칭키 암호 - 현대 대칭키 암호 #블록암호

 


 

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-박스

  확장 P-박스

  • n비트를 입력 받아 m 비트를 출력하는 P-박스로서 n <m을 만족한다.
  • 입력 비트 중 특정 비트를 한 번 이상 출력한다. 
  • 비트를 치환하고 동시에 다음 단계에서 비트의 양을 증가시키고자 할 때 사용한다.

확장 P-박스

  축소 P-박스

  • n비트를 입력받아 m비트를 출력하는 P-박스로서 n> m을 만족한다.
  • 입력 비트 중 특정 비트는 소실되어 출력되지 않는다.

축소 P-박스

3) S-박스(Substitution box)

  • 평문 비트를 치환시키는 (다른 문자로 바꾼다) 기능을 한다.
  • 입력은 n비트 워드이고 출력은 m비트 워드 일 때, n과 m이 서로 달라도 된다.
  • 역함수의 존재성 : S-박스는 입력값과 출력 값 사이의 관계가 테이블 혹은 수학적 관계로 정의되는 치환 암호이다. S-박스는 역함수가 존재할 수도 있고, 존재하지 않을 수도 있다. 역함수가 존재하는 S-박스는 입력 비트와 출력 비트의 개수가 동일하다.

4) 순환이동(Circular Shift) 연산

  • 왼쪽 순환이동, 오른쪽 순환이동 연산이 있다.
  • 평문 비트를 서로 섞는 역할을 한다.
  • 왼쪽 순황이동 연산은 평문 n 비트를 왼쪽으로 k 비트만큼 순환한다.

순환이동(Circular Shift) 연산

5) 스왑(Swap) 연산

  • 평문 입력 비트의 절반이 오른쪽 왼쪽으로 바뀌는 연산이다.
  • 평문 비트가 짝수인 경우에만 연산이 이루어진다.

스왑(Swap) 연산

6) 배타적 논리합 (Exclusive-OR) 연산

  • 평문과 키가 베타적 논리합 연산을 한다

베타적 논리합 (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)

통계적인 방법을 포함하며 수학적 이론을 이용하여 해독하는 방법이다.