본문 바로가기

[암호학] 현대 대칭키 암호를 이용한 암호화 기법 - ECB, CBC, CFB, OFB, CTR 모드

액트 2019. 11. 21.
반응형

[암호학] 현대 대칭키 암호를 이용한 암호화 기법 - ECB, CBC, CFB, OFB, CTR 모드


블록 암호의 사용 방식

  • 블록 암호는 고정된 n비트 블록을 n비트 블록으로 변환시키는 함수이다. 임의 길이의 평문을 암호화시키기 위해서는 평문을 특정한 길이로 분할하여 블록 암호에 입력시켜야 한다. 즉 블록 암호를 이용하여 평문을 암호화할 때에는 단순히 암호 알고리즘만이 있으면 해결되는 것이 아니고 사용 방식도 규정하여야 한다.
  • 블록 암호를 다양한 응용에 사용하기 위해 NIST에서는 5가지 운영 모드를 정의하였다. 이 5가지 모드는 사실상 블록 암호가 사용되는 모든 암호 응용에 적용할 수 있도록 만들어졌다.
  • 이 모드는 DES나 AES를 포함한 어떤 대칭 블록 암호에도 적용할 수 있다. 블록 암호의 주요 모드는 다음과 같다.
  1. ECB 모드 : Electronic CodeBook mode (전자 부호표 모드)
  2. CBC 모드 : Cipher Block Chaining mode (암호 블록 연쇄 모드)
  3. CFB 모드 : Cipher-FeedBack mode (암호 피드백 모드)
  4. OFB 모드 : Output-FeedBack mode (출력 피드백 모드)
  5. CTR 모드 : CounTeR mode (카운터 모드)

 

블록 모드와 스트림 암호방식의 블록 암호 모드

  • 블록 모드: ECB, CBC
  • 스트림 암호방식의 블록 암호모드: CFB, OFB, CTR

 

평문 블록과 암호문 블록

(1) 평문 블록

  • 블록 암호 알고리즘에서 암호화의 대상이 되는 평문을 말한다.
  • 평문 블록의 길이는 블록 암호 알고리즘의 블록 길이와 같다.

(2) 암호문 블록

  • 블록 암호 알고리즘을 써서 평문 블록을 암호화한 암호문을 말한다.

평문 블록과 암호문 블록

 

1. ECB 모드 (Electronic CodeBook mode) - 전자 부호표 모드

(1) 개요

  • 평문 블록을 그대로 암호화하는 것이 ECB 모드이다.
  • 동일한 내용을 갖는 평문 블록은 이에 대응하는 동일한 암호문 블록으로 변환되며 평문블록과 암호문 블록이 일대일 대응표를 갖게 된다. 
  • 만약 평문 크기가 블록 크기의 배수가 아니라면, 평문의 마지막 블록에는 다른 블록들과 동일한 크기로 만들기 위하여 덧붙이기(padding)가 필요하다. 
  • 각각의 블록을 암호화 혹은 복호화하기 위하여 사용되는 키는 동일하다.

ECB 모드에 의한 암호화
ECB 모드에 의한 복호화

 

(2) 특징 

  • 긴 평문을 암호화하는 가장 간단한 방법이다.
  • 가장 기밀성이 낮은 모드이다.
  • ECB 모드에서는 평문 블록과 암호문 블록이 일대일의 관계를 유지하게 된다.
  • 암호문을 살펴보는 것만으로도 평문 속에 패턴의 반복이 있다는 것을 알게 되며, 이것을 실마리로 암호 해독을 할 수 있게 된다.
  • 이 모드는 안전하지 않다.

(2-1) 응용

  • ECB 모드의 장점은 매우 많은 데이터베이스를 암호화할 때 병렬적으로 처리할 수 있다.
  • 데이터베이스에 암호화된 레코드를 저장하거나 암호화된 레코드를 복호화해야 하는 분야에서는 암호문 블록의 독립성이 유용하기 때문이다. 다른 레코드에 영향을 주지 않고도 수정된 이후의 레코드를 중간에서부터 암호화하거나 복호화할 수 있다.

(3) ECB 모드와 다른 모드의 차이

ECB 모드와 다른 모드의 차이

 

(4) ECB 모드에 대한 공격

  • 모든 평문 블록이 각각 개별적으로 암호화되고, 복호화 때에는 개별적으로 복호화된다.
  • 적극적 공격자가 악의를 가지고 암호물 블록을 서로 바꾸었다면, 수신자가 그 암호문을 복호화하면 바뀐 암호문 블록에 대응하는 평문 블록도 바뀌게 된다.
  • 즉, 암호를 해독할 필요도 없고 블록 암호 알고리즘에 대해 알고 있을 필요도 없으며 해커는 어느 블록에 어떤 종류의 내용이 있는지를 알고 있으면 된다.

 

2. CBC 모드 (Cipher Block Chaining mode) - 암호 블록 연쇄 모드

(1) 개요

  • 1 단계 앞에서 수행되어 결과로 출력된 암호문 블록에 평문 블록을 XOR하고 나서 암호화를 수행한다.
  • 따라서 생성되는 각각의 암호문 블록은 단지 현재 평문 블록 뿐만 아니라 그 이전의 평문 블록들의 영향도 받게 된다.
  • 암호문 블록을 마치 체인처럼 연결시킨다.

(1-1) 초기화 벡터(initialization vector, IV)

  • 최초의 평문 블록을 암호화할 때는 "1단계 앞의 암호문 블록"이 존재하지 않으므로 "1단계 앞의 암호문 블록"을 대신할 비트열인 한 개의 블록을 준비할 필요가 있다.
  • 이 비트열을 초기화 벡터(initialization vector) 또는 앞 글자를 따서 IV라고 부른다.
  • 초기화 벡터는 비밀키와 마찬가지로 송신자와 수신자간에 미리 약속되어 있어야 하지만 공개된 값을 사용해도 무방하다. 또한 초기화 벡터는 암호화 때마다 다른 랜덤 비트열을 이용하는 것이 보통이다.

(1-2) 패딩

  • 실제 CBC모드를 적용할 경우, 암호화될 평문의 길이는 가변적이기 때문에 마지막 블록의 길이와 항상 딱맞아 떨어지지 않게 된다.
  • 이 경우에는 부족한 길이 만큼을 '0'으로 채우거나 임의의 비트들로 채워 넣는다.

CBC 모드 패팅

(1-3) CBC 모드에 의한 암호화

CBC 모드에 의한 암호화

(1-4) CBC 모드에 의한 복호화

CBC 모드에 의한 복화화

(1-5) ECB 모드와 CBC 모드의 비교

ECB 모드와 CBC 모드의 비교

(2) 암호화와 복호화

  • 1단계 전에 수행되어 결과로 출력된 암호문 블록에 평문 블록을 XOR하고 나서 암호화를 수행한다.
  • 따라서 생성되는 각각의 암호문 블록은 현재 평문 블록뿐만 아니라 그 이전의 평문 블록들의 영향도 받게 된다.
  • 복호화할 때 CBC모드의 암호문 블록이 1개 파손된 경우, 암호문 블록의 길이가 바뀌지 않았다면 평문 블록에 미치는 영향은 2개 블록에 머문다.
  • 반면 평문 블록의 한 비트 오류는 출력되는 모든 암호문에 영향을 미친다.

CBC 모드, 암호문 블록의 파손된 비트에 영향을 받는 평문

  • 암호문 블록에서 비트 누락이 생기면 그 이후의 평문 블록 전체에 영향을 미친다.

CBC 모드, 비트가 누락된 암호문이 생기면 그 이후의 평문 블록 전체에 영향을 미친다

 

(3) CBC 모드에 대한 공격(초기화 벡터의 비트 반전)

  • 적극적 공격자가 암호문을 고쳐 써서 수신자가 암호문을 복호화했을 때의 평문을 조작하고 싶어 한다고 해보자.
  • 공격자가 초기화 벡터의 임의의 비트를 반전(1->0, 0->1) 시킬 수 있다면, 암호 블록 1에 대응하는 평문 블록1의 비트를 반전시킬 수 있다.

CBC 모드에 대한 공격(초기화 벡터의 비트 반전)
CBC 모드에서 초기벡터의 비트반천에 대한 영향

 

(4) CBC 모드의 활용

  • 인터넷에서 보안을 제공하는 프로토콜 중 하나인 IPSec에서는 통신의 기밀성을 지키기 위해 CBC 모드를 사용하고 있다.
  • 예를 들어 3DES를 CBC 모드로 사용한 3DES-CBC나, AES를 CBC모드로 사용한 AES-CBC 등이 여기에 해당된다.
  • 인증을 수행하는 대칭키 암호 시스템의 하나인 Kerberos version 5에서도 사용되고 있다.

 

3. CFB 모드 (Cipher-FeedBack mode) - 암호 피드백 모드 

(1) 개요

  • CFB 모드에서는 1단계 앞의 암호문 블록을 암호 알고리즘의 입력으로 사용한다.
  • 피드백이라는 것은 암호화의 입력으로 사용한다는 것을 의미한다.

(2) CFB 모드의 암호화, 복호화

CFB 모드 암호화

 

CFB 모드에 의한 복호화

(3) CBC 모드와 CFB 모드의 비교

CBC 모드와 CFB 모드의 비교

(4) 초기화 벡터

  • 최초의 암호문 블록을 만들어낼 때는 1단계 앞의 출력이 존재하지 않으므로 대신에 초기화 벡터(IV)를 사용
  • 이것은 CBC 모드 때와 동일하다.
  • 초기화 벡터는 보통 암호화 때마다 다른 랜덤 비트열을 사용한다.

(5) 특징

  • 블록 암호를 스트림 암호화처럼 구성해 평문과 암호문의 길이가 같다 (패딩이 필요 없다.)
  • 최초의 키 생성 버퍼로 IV가 사용되며, 이때 IV는 제 2의 키가 될 수 있다.
  • 스트림의 기본 단위를 Bit 단위로 설정할 수 있으며, Bit 단위에 따라 CFB8~CFB128로 쓰인다.
  • 암호화, 복호화 모두 암호화로만 처리할 수 있다.
  • CBC모드와 마찬가지로 암호화는 순차적이고, 복호화는 병렬적으로 처리할 수 있다.

(6) CFB 모드와 스트림 암호

  • CFB 모드를 이용하면 어떤 블록 암호도 스트림 암호로 바꿀 수 있다. 스트림 암호의 경우 메시지의 길이가 블록의 정수배가 되도록 패딩을 할 필요가 없으며 실시간으로 사용할 수 있다. 따라서 한 문자를 전송하는 경우 문자 중심 스트림 암호를 이용하여 각 문자가 암호화되는 즉시 전송할 수 있다.
  • CFB 모드의 구조는 일회용 패드와 비슷하다.
  • 일회용 패드에서는 평문과 랜덤한 비트열을 XOR해서 암호문을 만들어 냈다.
  • CFB 모드에서는 평문 블록과 암호 알고리즘의 출력을 XOR해서 암호문 블록을 만든다.

(7) CFB 모드에 대한 공격

  • CFB 모드에 대해서는 재전송 공격(replay attack)이 가능하다.

CFB 모드에 대한 재전송 공격

4. OFB 모드 (Output-FeedBack mode) - 출력 피드백 모드

(1) 개요

  • 평문 블록이 동일하면 암호문이 같아지는 ECB 모드의 단점과 오류 전파가 발생하는 CBC 모드와 CFB 모드를 개선한 동작 모드이다.
  • OFB 모드에서는 암호 알고리즘의 출력을 암호 알고리즘의 입력으로 피드백한다.
  • 평문 블록은 암호 알고리즘에 의해 직접 암호화되는 것이 아니라, 평문 블록과 암호 알고리즘의 출력을 XOR해서 암호문 블록을 만들어낸다.
  • OFB 모드 동작은 암호기의 출력과 평문을 EX-OR 하여 암호문을 생성하고 있으므로 오류 전파가 발생하지 않는다. 그러나 암호문 송신자와 수신자 사이에 동기를 조절해야 한다. 즉, 전송중인 암호문의 비트 손실이나 삽입 등에 유의해야 하는 방식이다.

(2) 초기화 벡터(IV)

  • OFB 모드에서도 CBC 모드나 CFB 모드와 마찬가지고 초기화 벡터(IV)를 사용한다.
  • 초기화 벡터는 암호화 때마다 다른 랜덤 비트열을 이용하는 것이 보통이다.

(3) 암호화와 복호화

CFB 모드에 의한 암호화
CFB 모드에 의한 복호화

(4) 특징

  • 초기치가 바뀌면 암호문은 모두 바뀐다.
  • 암호 알고리즘의 출력은 평문과 무관하다.
  • 전송 중의 비트 오류가 전파되지 않는다. (Ci에 비트 오류가 발생했다면, 복원된 Pi의 값에만 영향을 미치며, 이후의 복원된 평문에는 아무런 영향도 주지 않는다.)
  • 암호문 Ci에서 비트 손실이 발생하면 그 다음에 오는 평문은 모두 에러가 발생하기 때문에 동기를 새로 맞추어야 한다.

(5) CFB 모드와 OFB 모드의 비교

  • OFB(Output FeedBack) 모드와 CFB (Cipher FeedBack) 모드에서는 암호 알고리즘으로의 입력만이 다르다.
  • CFB 모드에서는 1개 앞의 암호문 블록이 암호 알고리즘으로의 입력이었다. 암호문 블록을 암호 알고리즘으로 피드백한 것이다. 
  • 한편, OFB 모드에서는 암호 알고리즘의 입력으로 사용되는 것은 암호 알고리즘의 한 단계 앞의 출력이다. 

CFB 모드와 OFB 모드의 비교

5. CTR 모드 (CounTeR mode) - 카운터 모드

(1) 개요

  • CTR 모드가 ATM 네트워크 보안과 IPSec에 응용되면서 최근 들어 관심이 늘어났다.
  • CTR 모드는 암호화 시 피드백이 존재하지 않는다. 그러지만 키 스트림의 의사난수성은 카운터를 사용함으로써 성취될 수 있다. 
  • CTR 모드에서는 블록을 암호화할 때마다 1씩 증가해 가는 카운터를 암호화해서 키 스트림을 만든다.
  • 즉, 카운터를 암호화한 비트열과, 평문 블록과의 XOR 을 취한 결과가 암호문 블록이 된다.

(2) 카운터 만드는 법

  • 카운터의 초기값은 암호화 때마다 다른 값(비표)을 기초로 해서 만든다.
  • 예를 들어 블록 길이가 128비트(16바이트)인 경우 카운터의 초기값은 다음과 같다. 

비표

  • 앞부분의 8바이트는 비표로 암호화 때마다 값이 다르다.
  • 후반 8바이트는 블록 번호로 이 부분을 카운트해서 하나씩 증가시키가면 된다.
  • 암호화가 진행됨에 따라 카운터의 값은 다음과 같이 변환한다.

카운터 값

(3) 암호화와 복호화

CTR 모드에 의한 암호화
CTR 모드에 의한 복호화

(4) OFB 모드와 CTR 모드의 비교

  • CRT 모드는 OFB 모드와 같은 스트림 암호의 일종이다
  • 1개의 블록의 암호화하는 부분만을 추출해서 OFB 모드와 CTR 모드를 비교하면 차이를 잘 알 수 있을 것이다.
  • OFB 모드에서는 암호화의 출력을 입력으로 피드백하고 있지만, CTR 모드에서는 카운터의 값이 암호화의 입력이 된다.

OFB 모드와 CTR 모드의 비교

(5) CTR 모드의 특징

  • CTR 모드의 암호화와 복호화는 완전히 같은 구조이므로, 프로그램으로 구현하는 것이 매우 간단하다.
  • 블록을 임의의 순서로 암호화 복호화할 수 있다.

 

블록 암호 모드 비교 정리

  이름 장점 단점
ECB모드

전자 부호표 모드

(Electronic CodeBook)

1) 간단

2) 고속

3) 병렬 처리 가능

(암호화, 복호화 양쪽)

1) 평문 속의 반복이 암호문에 반영된다

2) 비트 단위의 에러가 있는 암호문을 복화하면 대응하는 블록이 에러가 난다

3) 재전송 공격이 가능

CBC 모드

암호 블록 연쇄 모드

(Cipher Block chainig)

1) 평문의 반복은 암호문에 반영되지 않는다. 

2) 병렬 처리 가능(복호화만)

3) 임의의 암호문 블록을 복호화 가능

1) 전송 도중 암호문 블록 C(i) 에서 한 비트 오류가 발생하면 평문 블록 P(i)에는 대부분의 비트에서 오류가 발생되고, 평문 블록 P(i+1)에서는 C(i)의 오류비트와 같은 위치에서 한 비트 오류가 발생한다.

2) 암호화에서는 병렬 처리 불가능

CFB 모드

암호 피드백 모드

(Cipher FeedBack)

1) 패딩이 필요 없다

2) 병렬처리 가능(복호화만)

3) 임의의 암호문 블록을 복호화 가능

1) 암호화에서는 병렬 처리 불가능

2) 전송 도중 암호문 블록 C(i)에서 한 비트 오류가 발생하면 평문 블록 P(j)에는 C(j)의 오류 비트와 같은 위치에서 한 비트 유류가 발생된다. 하지만 C(j)의 비트는 시프트 레지스터에 오류가 존재하는 한 다음 평문 블록의 대부분의 비트에 오류가 발생한다. (확률적으로 50%)

3) 재전송 공격이 가능

OFB 모드

출력 피드백 모드

(Output FeedBack)

1) 패딩이 필요 없다.

2) 암호화 복호화의 사전 준비 가능

3) 암호화 복호화가 같은 구조

4) 비트 단위의 에러가 있는 암호문을 복호화하면 평문의 대응하는 비트만 에러가 난다

1) 병렬 처리 불가능

2) 적극적 공격자가 암호문 블록의 비트를 반전시키면 대응하는 평문 블록의 비트가 반전된다.

CTR 모드

카운터 모드

(CounTeR)

1) 패딩이 필요 없다

2) 암호화 복호화의 사전 준비 가능

3) 암호화 복호화가 같은 구조

4) 비트 단위의 에러가 있는 암호문을 복호화하면 평문의 대응하는 비트만 에러가 난다.

5) 병렬 처리 가능(암호화 복호화 양쪽)

1) 적극적 공격자가 암호문 블록의 비트를 반전시키면 대응하는 평문 블록의 비트가 반전된다.

 

반응형

댓글