Gae Ko's Blog

[암호] 블록암호의 운용모드 본문

암호

[암호] 블록암호의 운용모드

Gae Ko 2018. 1. 15. 15:04

※ 블록암호의 운용모드


1. ECB (Electronic Code Book, 전자코드북) 


- 가장 단순하며 기본적인 모드 

- 운용방식 중 가장 간단한 구조로, 암호화하려는 메세지를 여러 블록으로 나누어 각각 암호화하는 방식.


- 각 블록이 독립적으로 동작하므로 한 블록에서 에러가 난다고 해도 다른 블록에 영향을 주지 않음 (암/복호화 모두 병렬처리 가능)

- 모든 블록이 같은 암호화 키를 사용하기 때문에 보안에 취약.

- 만약 암호화 메세지를 여러 부분으로 나누었을 때 두 불록이 같은 값을 가진다면, 암호화한 결과 역시 같음.

  이는 공격자가 비슷한 메세지를 반복적으로 암호화하는 반복공격에도 취약. 


2. CBC (Cipher Block Chaining, 암호 블록 체인)


- 블록암호 운용모드 중에서 가장 보안성이 높은 모드로 가장 많이 사용되고 있음.

- 각 블록은 암호화되기 전에 이전 블록의 암호화한 결과과 XOR되며, 첫 블록의 경우에는 초기화 벡터(Initial Vector)가 사용됨.

- 초기화 벡터같은 경우 출력 결과가 항상 같기 때문에, 매 암호화마다 다른 초기화 벡터를 사용해야함.


  


- CBC방식은 현재 널리 사용되는 운용방식 중 하나로 ECB와 달리 동일 평문이 동일한 암호문으로 되지 않는다.

- 암호화는 병렬처리가 불가능하지만 복호화의 경우 병렬처리가 가능 // ?

- 그리고 메세지는 암호블록 사이즈의 배수로 패딩되어야한다.

- 평문 블록 내의 한 비트가 변경될 경우, 이어지는 모든 암호 블록에 영향을 주게 됨. 


3. CFB (Cipher Feedback, 암호 피드백)


- CBC의 변형인 모드로 동일 평문이 동일한 암호문이 되지 않도록 하며, 블록암호가 스트링암호처럼 구성하여 평문과 암호문의 길이가 같다. (== 패딩이 필요없음)  // ?

- IV를 암호화한 값과 평문 블록을 XOR하여 암호블럭을 생성하고 그 암호문을 초기값으로 하여 그걸 다시 암호화한 값과 다음 평문블록을 XOR하여 암호블록을 반복하여 생성하는 방식.


 ()


- CBC와 마찬가지로 암호화는 순차적이고, 복호화는 병렬적으로 처리 가능.

ECB와 CBC모드에서는 암호 알고리즘을 이용하여 평문블록을 암호화한 반면, CFB모드에서는 평문블록을 암호 알고리즘으로 직접 암호화하지 않았음. 

- 암호화, 복호화 모두 암호화(Encryption)로만 처리 가능.

- CFB모드와 스트림암호 : CFB모드에서는 암호 알고리즘이 생성하는 비트열을 키 스트림(key stream)이라 부른다. 키 스트림을 생성하기 위한 의사난수 생성기로서 암호알고리즘을 이용하고 있으며 초기화 벡터가 의사난수 생성기의 seed에 해당한다. 이 모드에서는 평문의 데이터를 1비트씩 암호화할 수 있으며 CFB모드는 블록암호를 사용하여 생성한 키를 이용하는 스트림암호라고 간주할 수 있다.


4. OFB (Output Feedback, 암호 피드백)


- 암호알고리즘의 출력을 암호 알고리즘의 입력으로 피드백 

-  블록암호가 스트링암호처럼 구성하여 평문과 암호문의 길이가 같다. (== 패딩이 필요없음) // ?

- 초기값 IV를 암호화하고 그 값을 다시 암호화하는 과정을 반복함으로써 생성된 값과 평문블록을 XOR하여 암호문을 생성하는 방식.

- 평문블록은 암호알고리즘에 의해 직접 암호화되는 것이 아니라 평문블록과 암호알고리즘의 출력을 XOR하여 암호블록을 만듬.


 ()


- 암호화방법과 복호화방법이 동일하기 때문에 암호문을 한 번 더 암호화하면 평문이 나온다. (복호화시에 암호화)

- 주로 블록암호 시스템을 스트림암호 시스템처럼 사용하고자 할 때 이용.

- 암호문의 오류는 복호화 과정에서 대응되는 한 블록에만 영향을 미치므로, 영상이나 음성과 같은 digitied analog신호에 자주 사용.

- CBC모드에서는 암호블록을 피드백하기 위해서 처음의 평문블록부터 순서대로 암호화해야하지만, OFB모드에서는 평문블록과 관계없이 암호 알고리즘을 미리 돌려서 XOR하기 위한 비트열(키 스트림)을 준비할 수 있음.

  → 키 스트림을 미리 준비하면 평문으로부터 암호문을 만들 때 암호알고리즘을 작동시키지 않고 평문과 키 스트림의 XOR만 취하면 됨. 

CFB와의 차이점은 암호알고리즘의 입력 만이 다르다. CFB모드에서는 바로 이전의 암호블록이 암호 알고리즘의 입력이고, OFB모드에서의 암호 알고리즘 입력으로 사용되는 것은 암호 알고리즘의 한 단계 앞의 출력값이다.


5. CTR (Conter, 카운터)


 - OFB와 같이 블록암호를 스트림암호처럼 사용하기 위한 목적으로 사용.(== 패딩이 필요없음. 암호화와 복호화가 같은 구조)

- 초기값 IV와 Counter를 1씩 증가한 값을 연결한 것을 암호화하여 생성된 값과 평문블록을 XOR하여 암호문 생성.

   


   (구성도의 Nonce는 다른 곳의 초기화 벡터인 IV와 동일)

- 병렬성이 뛰어나고, 비밀키와 IV가 주어지면 미리 계산할 수 있어서 바로 평문을 가지로 암호문을 만들 수 있음.

- 동일한 비밀키와 IV를 반복하여 사용할 경우 안전성에 문제가 생긴다는 취약점

- CFB 와 OFB모드보다는 CTR 모드를 사용하는 편이 나음

'암호' 카테고리의 다른 글

[암호] SEED  (0) 2018.01.16
[암호] AES  (0) 2018.01.15
[암호] XOR 블록암호 구현하기  (0) 2018.01.11
[암호] DES  (0) 2018.01.10
[암호] 블록암호(Block cipher)  (0) 2018.01.10