IT/정보보안

[암호학] 대칭키 암호 - 현대 대칭키 암호 #스트림 암호

액트 2019. 11. 13. 17:42

[암호학] 대칭키 암호 - 현대 대칭키 암호 #스트림 암호


1. 현대 스트림 암호

(1) 개요

1) 기본 개념

  • 이진 수열 발생기로 평문을 일련의 비트열로 취급하여 한 번에 1비트씩(혹은 바이트/워드 단위) 암호화시키는 암호 시스템. 
  • 스트림 암호는 빠르게 디자인될 수 있고 실제로 어떠한 블록 암호보다도 빠르기 때문에 무선통신 기기에 주로 사용된다. 
  • 블록 암호는 큰 블록 데이터를 사용하지만 스트림 암호는 일반적으로 평문의 작은 단위인 비트를 사용한다. 
  • 암호화는 일반적으로 비트 단위 배타적 논리합(XOR) 연산으로 평문과 키 스트림과의 결합에 의해서 생성된다.

2) 스트림 암호 설계 시 고려사항

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

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

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

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

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

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

(2) 동기식 스트림 암호

1) 개요

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

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

2) One-Time Pad (OTP)

 동기식 스트림 암호 중에서 가장 간단하고 안전한 암호 방식이다. 

② 해독 불가능하다는 것이 샤논에 의해 1949년 수학적으로 증명되었다. 일회용 패드는 무조건 안전하며, 이론적으로 해독 불가능하다고 알려져 있다.

③ 암호화 알고리즘과 복호화 알고리즘은 각각 배타적 논리합 연산을 사용한다. 이 암호에서 배타적 논리합 연산을 한 번에 한 비트씩 적용된다.

※ OTP 안전성을 위한 조건

  • 한 번만 사용되어야 한다.
  • 메시지 길이만큼 길어야 한다.
  • 목적지로 안전하게 배포되고 보호되어야 한다.
  • 순수하게 임의 값으로 만들어져야 한다.

3) 시프트 레지스터(shift register)

  • 매 클록 주기로 모든 비트를 한 자리 옮기게 하는 레지스터(전자 회로). 레지스터가 선형(linear)인 경우(LFSR)에는 한 비트가 한쪽 끝에서 삽입되고 반대쪽 끝에서 한 비트가 떨어져 나간다. 레지스터가 순환형인 경우(FSR)에는 한쪽 끝에서 떨어져 나간 비트가 시작에서 다시 삽입된다. 

3-1) 귀한 시프트 레지스터(Feedback Shift Register)

 one-time pad의 절충안은 귀한 시프트 레지스터(FSR)이다. FSR은 소프트웨어와 하드웨어 환경에서 모두 구현될 수 있지만 하드웨어 구현이 더욱 용이하다.

 귀한 시프트 레지스터는 시프트(shift) 레지스터와 귀한(feedback) 함수로 구성된다.

3-2) 선형 귀한 시프트 레지스터(LFSR, linear feedback shift register)

  • LFSR은 하드웨어로 쉽게 구현되며 모든 스트림 암호는 아니지만 많은 스트림 암호가 LFSR을 이용한다.

4) 비선형 귀한 시프트 레지스터(NLFSR, Nonlinear Feedback Shift Register)

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

 

(3) 비동기식 스트림 암호

  • 비동기식 스트림 암호에서 키 스트림의 각 비트는 이전의 평문이나 암호문에 종속적으로 결정된다.
  • 블록 암호에서 다른 운영 모드를 생성하기 위해 사용되는 한 가지 방법인 CFB 모드는 실제로 스트림 암호를 생성한다.