본문 바로가기

정보보안기사/암호학

대칭키 암호 #1


1. 현대 대칭키 암호 


 (1)현대 블록암호

   1)현대 블록암호의 구성요소

현대 블록암호는 확산[각주:1]과 혼돈[각주:2]과 같은 성질을 만족 시키기 위하여 전치요소 (P-박스) 와 치환요소 (S-박스) 그리고 그 밖의 구성요소를 결합하여 설계된다. 

현대의 블록암호는 이동요소 (shift), 교환요소(swap), 분할요소(split), 조합요소 뿐 아니라 전지장치(Transposition, P-box) 와 치환장치(Substitution, S-box)와 XOR 연산(exclusive-OR)의 조합으로 만들어진다.


 ▷ P-box : P-box는 문자단위로 암호화 했던 고전 전치 암호를 병렬적으로 수행 합니다. 

                     단순(straight) , 확장(expansion) , 축소 (compression)의 세종류가 있습니다. 


 


   

단순 P-box

  n 비트를 입력받아 변환된 m비트를 출력합니다. 

 축소 P-box 

  n 비트를 입력받아 변환된 m비트를 출력합니다. n > m 을 만족합니다.(출력되는 값이 입력값보다 적기 때문에 축소) 

  입력 비트중 몇몇비트는 소실됩니다.

 확장 P-box 

  n 비트를 입력받아 변환된 m비트를 출력합니다. n < m 을 만족합니다.(출력되는 값이 입력값보다 많기 때문에 확장)

  입력비트는 여러개의 출력비트와 연결됩니다. 비트를 치환하고 양을 늘릴때 사용합니다. 

 ※ 역방향의 존재 

단순 P-box의 경우 역방향이 존재합니다. 1:1 대응이기 때문에 거슬러 올라가 평문을 알아내기 쉽겟죠 

하지만 축소,확장 P-box는 역방향이 존재하지 않는 일방향 암호화라는것이 특징입니다.



   2)S-박스

      S-box는 치환암호의 축소 모형이라고 생각할 수 있다. 암호화 상자라고 생각해보자. 입력된 평문이 상자에 들어가면 암호문이 되어 나온다. 

입력과 출력의 개수는 달라도 된다. 다시 말하면 S-box에서 입력은 n 비트이고 출력은 m 일때 , n 과 m이 같을 필요는 없다. 


역함수의 존재성 : S-box는 입력값과 출력값 사이의 관계가 테이블 혹은 수학적 관계로 정의되는 치환 암호이다. S-box는 역함수가 존재 할 수 도있고, 존재하지 않을 수 도 있다. 역함수가 존재하는 S-box는 입력비트와 출력비트의 개수가 동일하다.


S-box의 구성요소 

  - substitution

  - Exclusive-OR

  - Shift

  - Swap

  - Split

  - Combine

→ 이 구성요소들을 사용해서 암호화한다.



   3)합성암호(by shannon[각주:3])

치환, 전치, 그리고 그밖의 구성요소를 결합한 복합적인 암호


확산(Diffusion)과 혼돈(Confusion)

  shannon 이 도입한 합성암호의 주된 개념은 설계된 블록 암호가 확산과 혼돈이라는 두 가지 중요한 성질을 갖도록 하는 것이다. 

확산의 개념은 암호문과 평문 사이의 관계를 숨기는 것이다. 

혼돈의 개념은 암호문과 키 사이의 관계를 숨기는 것이다. 


라운드 (Round)

확산과 혼돈은 각 반복이 S-box, P-box 그리고 기타 구성요소의 결합을 의미하는 반복적 합성 암호를 사용하여 얻어진다. 반복적으로 사용되는 합성암호를 라운드(Round)라고 칭한다.  



   4)두 가지 종류의 합성암호

① Feistel 암호

  DES 를 포함한 대부분의 대칭블록암호 알고리즘은 Feistel의 구조를 따름

  이 구조에서 네트워크라는 이름은 그 구성도가 그물을 짜는것과 같이 교환되는 형태로 구성되어 있기 때문에 붙여진 이름.

  이 구조는 3라운드 이상이며 짝수로 구성된다. 암복호화의 과정이 같기 때문에 역변환이 가능하다. 두번의 수행으로 완전한 확산(Diffusion)이 이루어지며, 아직 구조상   에 문제점이 발견되지 않고 있다는 장점이 있다.


(  입력을 좌우 블록으로 분할 →  블록을 라운드 함수에 적용 → 출력값을 다른 블록에 적용 ) 이 과정을 좌우 블록에 반복적으로 시행.

암호강도를 결정짓는 요소 

  - 평문 블록의 길이 (64비트 이상)

  - 키 K의 길이 (64비트 내외, 최근에는 128비트의 키 길이 권장) 

  - 라운드의 수  (16회 이상)

  (길이수가 늘어나는 이유는 전사적 공격의 성능이 높아지기 때문)


암호화방식

암호화와 복호화 과정이 동일하다. 


특징 

Feistel 구조에서 입력 n비트를 두 개의 블록(L, R)으로 나누어 함수를 F, 라운드키를 K라 할때 i번째의 과정은 다음과 같다. 

(주의, 마지막라운드에서 좌우 블록 한번 더 교체)


페이스텔 네트워크는 많은 블록암호 알고리즘에서 이용되고 있다. 


SPN(Substition Permutation Network) 구조 

 Substition Cipher와 Permutation Cipher를 중첩하는 형태, 입력을 여러개의 소블럭으로 나누고 각 소블록을 S-box로 입력하여 대치 시키고 S-box의 출력을 P-box로 전치하는 과정을 반복하는 방식. 




※ 양자 암호학

양자 역학의 원리를 응용한 암호방식으로, 하이젠베르크의 불확정성 원리를 이용한 암호화방식이다. 물리학자들이 생각해낸 방법으로 정보를 보낼 때 아무도 알수 없게 하는것이 아니라 . 엿보려고 하면 정보의 내용이 변해버려 폐기시켜 버리는 방법이다.


왜 변하는것일까 ? 하이젠베르크의 불확정성의 원리에서 언제나 관측시마다 결과값이 일치하지않는 ( 아주 자세하게 분석해보면 결과적으로 다르다! ) 는 이론에 근거한다. 양자역학에 의한 암호방식에서는 이 원리가 적용되기 때문에 공격자가 엿보는 순간 관측값이 변해버린다는 말이다.


불확정성 원리는 관측 행위의 순서가 관측하고자 하는 상태에 영향을 주는 양자현상의 특징을 함축하고 있기도 하다. 교환관계에 있지 않은 두 연산자에 의한 관측을 연속적으로 수행하는 경우, 즉 한번의 관측을 수행한 후 다른 관측을 수행할 때 두 관측 순서를 바꾸면 각각은 다른 결과가 얻어지게 된다. 이것은 처음의 관측에 의해 상태가 변화하게 되어 다음 관측에서는 처음과 같지 않은 상태에 대해 측정을 수행하기 때문에 발생하는 현상이다. 이렇게 초기 상태가 관측에 의해 다른 상태로 바뀌는 것을 파동 함수 붕괴 (wave function collapse)라고 말한다. 양자 현상의 상태는 파동함수로 표현되므로, 그 파동 함수가 변화했다는 것은 수학적 계산에 의해 전과 같은 관측량을 얻을 수 없다는 것을 뜻한다.



 (2)현대 스트림암호

   1)개념 

블록암호와 스트림 암호의 차이는 입력되는 평문과 키 암호문의 형태가 블록단위로 처리되냐 스트림 형태로 처리되냐의 차이이다. 

스트림암호는 동기식과 비동기식 두가지 종류로 분류된다. 


설계시 고려사항 

1. 암호화의 연속은 긴 주기를 가져야 한다. 

  : 의사 난수 생성기는 언젠가는 반복되는 비트 스트림을 생산하는 함수를 사용한다. 즉, 반복주기가 길다는것은 암호를 해독하는것이 그만큼 어렵다는 것을 의미한다. 


2. 키 스트림은 진 난수 스트림과 최대한 비슷해야 한다.

  : 예를들어 1과 0의 개수가 거의 동일해야한다. 만약 키 스트림이 바이트의 스트림으로 처리되었다면, 256개의 모든 가능한 바이트 값은 대략 거의 같은 빈도로 나타나       야 한다.  키 스트림이 랜덤하게 나타날수록 암호문은 더 랜덤화 되며 암호해독은 더욱 어려워진다.


3. 전사적 공격에 대응하기 위해서는 키가 충분히 길어야 한다. 

  : 블록암호에도 적용 할 수 있기 때문에 현재 기술 수준을 볼때 키 길이가 적어도 128비트인것이 바람직하다.


   2)동기식 스트림 암호

동기식 스트림 암호에서 키 스트림은 평문 혹은 암호문 스트림과 독립적이다.

키 스트림 평문 혹은 암호문 비트와 키 비트 사이에 어떠한 관계도 없이 생성되고 사용한다. 


One-Time Pad 

동기식 스트림 암호중에서 가장 간단하고 안전한 암호. 암호화를 수행할 때마다 랜덤하게 선택된 키 스트림을 사용한다.

해독이 불가능하다는것이 Shannon에 의해 수학적으로 증명됨.

암호화 알고리즘과 복호화 알고리즘은 각각 베타적 논리합 연산을 사용. 베타적 논리합 연산의 성질에 의해 암호화 알고리즘과 복호화 알고리즘은 서로 역관계이다.

이 암호에서 배타적 논리합 연산을 한번에 한 비트씩 적용된다. 


귀환 시프트 레지스터 (Feedback Shift Register)

OTP는 키의 보관과 전달이 문제가 된다.  비교적 짧은 키를 이용하여 무작위로 생성되는 긴 키를 생성할 수 있다.

One Time Pad의 절충안 FSR은 소프트웨어와 하드웨어환경 모두에서 구현 가능하지만 하드웨어 구현이 더욱 용이하다.

시프트 레지스터귀환 함수로 구성된다. 



선형 귀환 시프트 레지스터 (LFSR, Linear feedback shift register)



비선형 귀환 시프트 레지스터(NLFSR , NonLinear Feedback Shift Register)

주로 LFSR은 선형성 때문에 공격에 취약하다. NLSFR을 이용하여 NFSR보다 안전한 스트림암호를 설계할 수 있다.


   3)비 동기식 스트림 암호

비동기식의 키 스트림의 각 비트는 이전의 평문이나 암호문에 종속적으로 결정된다. 

블록암호에서 다른 운영 모드를 생성하기 위해 사용되는 한가지 방법인 CFB(Cipher Feedback Mode)모드는 실제로 스트림암호를 생성한다.



= 각주 =



  1. 확산 : 평문의 통계적 성질을 암호문 전반에 퍼트려 숨김 [본문으로]
  2. 혼돈 : 암호문의 키와 상관관계를 숨김 [본문으로]
  3. 확률론을 기초로한 정보이론의 창시자, 일회용패드(One-Time-pad)의 안전성을 증명, 혼돈과 확산을 정의 [본문으로]