다양한 기록

블록 암호 - 운용모드 본문

정보보호이론

블록 암호 - 운용모드

라구넹 2024. 10. 28. 00:16

다수의 블록을 암호화하려면?

- 각 블록마다 새로운 키로 암호화?

- 각 블록을 독립적으로 암호화?

- 각 블록들이 체인 형태로 연결되도록 암호화?

- 블록에서 남은 부분은?

 

실제 운용환경에서는 평문의 길이가 AES의 8바이트, 16바이트보다 길고 가변적임

임의의 길이의 데이터를 암호화하고 복호화하는 방법 필요

=> 블록 암호의 운용 모드(modes of operation)

- ECB, CBC, CFB, OFB, CTR


ECB (Electronic CodeBook) 방식

- 긴 평문을 n비트씩 m개의 블록으로 자르고 마지막 블록에 패딩

- 각 블록별로 동일한 키에 의해 독립적으로 암호화

- 동일한 평문 블록은 동일한 암호문으로 암호화됨

 

안전성

- 각 블록이 독립적으로 암/복호화 => 병렬처리 가능

- 블록 단위의 패턴이 유지됨

- 에러 파급 없음 .. 해당 블록만 에러

 

CBC (Cipher-Block Chaining) 방식

- 각각의 평문 블록은 암호화되기 전에 이전 블록의 암호문과 XOR

- 암호화된 블록은 전송된 후 다음 블록의 암호화에 사용되기 위해서 메모리에 저장되어야 함

- 첫번째 블록을 암호화하기 위해 초기벡터(IV) 값이 필요

- 초기벡터 값은 송신자와 수신자가 사전에 공유

 

암호화 : ci = Ek(pi XOR ci-1), i = 1, 2, 3, 4, .... m

복호화 : pi = Dk(ci) XOR ci-1 ; IV (=c0)

 

안전성

- 평문의 동일한 블록들은 암호문에서 서로 다른 블록으로 암호화됨 * 암호 시 전 단계의 암호 블록을 이용하기 때문

- 암호문 블록 ci의 한 비트 오류 시?

- 복호화 과정에서 pi, pi+1에 오류 ... XOR은 이전 암호문과 되기 때문

 

CFB (Cipher FeedBack) 방식

- 블록 크기가 작은 경우 ECB나 CBC는 비효율적임

- 64비트(DES)나 128비트(AES) 블록을 입력받을 때까지 기다려야 함

- 평문 블록의 크기가 n보다 작은 r비트 처리 시 CFB 사용

- 블록 암호를 이용하지만 결과는 스트림 암호와 같음

 

- 평문을 암호화하거나 복호화하지 않음

- n비트 시프트 레지스트의 값 Si를 암호화 및 복호화에 사용

- n비트 시프트 레지스터의 값 Si를 암호화 => Ti

- Ti의 왼쪽 r비트만 사용하여 r비트의 평문 pi와 XOR => ci

- 각 블록의 시프트 레지스터 Si는 이전 시프트 레지스터 Si-1을 r비트 왼쪽으로 이동, 오른쪽에 ci-1을 채워서 만듦

 

복호화

초기벡터를 암호화하고 나온 출력값을 암호문과 XOR

그 다음은 암호문에서 떼와서 시프트 레지스터

 

예시

S1(IV) 1000 1101 0100 c1 1010
s2 1101 0100 1010 c2 0011
s3 0100 1010 0011 c3 1110
s4 1010 0011 1110 c4  

 

안전성

- 단일 비트 오류 발생 시 복호화 과정에서 그에 해당하는 평문에 한 비트 오류

- 그 이후 시프트 레지스터를 빠져나갈 때까지 오류 확산

- 4비트 평문, 12비트 시프트 레지스터 예시

- ci에서 오류 1비트

- pi에 한비트 오류, pi+1~3까지 평문 전체 오류

 

OFB (Output FeedBack) 방식

- CFB 모드와 유사하게 블록을 한 바이트나 비트 단위로 쪼개어 작은 단위로 암호화 가능

- 첫번째 시프트 레지스터에는 초기 벡터가 사용

- 시프트 레지스터에 채워지는 값은 이전 블록의 암호문이 아닌 이전 블록에서 평문 블록과 XOR 연산에 사용된 값

 

안전성

- 복호화 과정에서 암호문 한 블록은 다른 평문 및 암호문 블록에 영향을 주지 않음

- 한 블록의 암호문에서 발생한 오류는 해당 블록의 해당 비트에만 영향

 

CTR (Counter) 방식

- 블록을 암호화할 때마다 1씩 증가하는 카운터를 암호화해서 평문 블록과의 XOR

- 암/복호화는 완전히 같은 구조가 됨

- 병렬처리 가능

암호화: ci = Ek(ctr) XOR pi

복호화: pi = Ek(ctr) XOR ci  

 

오류 확산의 특성은 OFB과 동일

- 암호문의 한 비트 오류는 대응되는 평문에 한 비트 오류 발생시킴


안전성: ECB는 블록 패턴을 유지한다는 문제점

효율성: OFB와 CTR은 평문과 암호문이 결정되지 않아도 암호화 전처리가 가능

오류 확산: CBC, CFB는 ci 오류 발생 시 다른 블록에도 영향

암호화 단위: CFB, OFB, CTR은 암호 알고리즘이 제공하는 블록 사이즈보다 작은 사이즈 처리 가능

 

  ECB CBC CFB OFB CTR
블록 패턴 유지 O X X X X
전처리 가능성 X X X O O
병렬 처리 O 복호화 시 가능 복호화 시 가능 X O
오류 확산 X pi, pi+1 영향 가변 X X
암호화 단위 n n r <= n r <= n r <= n

* 복호화 시 가능 저건 암호문을 다 받은 경우