티스토리 뷰

Conventional Encryption에서는 Key size, Block size, Round 수가 보안성에 영향을 주는 요소입니다.
이 중에서 Block을 처리할 때의 운용 모드도 중요한 역할을 하는데요.

이런 블록 암호의 운용 모드(Block cipher modes of operation)에 대해서 정리해 봤습니다.

ECB(Electronic codebook)

가장 간단한 운용모드로서 평문을 일정 크기의 블록으로 나누어서 처리하며, 각 블록은 동일한 키로 암호화 한다. 즉 블록별로 별도로 암호화를 진행하며, 같은 평문 블록이 나타나면 같은 암호 블록도 나타나게 된다.
 
이 방식의 단점은 동일한 평문블록에 대해 동일한 암호문을 생성하게 되므로 안정성에 문제가 있다는 것이다. 즉, 기밀성에 문제가 있어 일반적으로 잘 사용하지는 않는다. 굳이 장점을 생각해보면 단순하고 구현하기가 쉽다는 점을 들 수 있을 것 같다. 한 비트의 오류가 발생했을 경우 암호화/복호화 모두 해당 블록만 영향을 받게 된다.


CBC(Cipher-block chaining)

현재의 평문블록과 바로 직전의 암호블록을 XOR한 것을 알고리즘의 입력으로 사용하며, 각 블록에서는 동일한 키를 사용한다. 첫번째 암호블록을 만들기 위해서는 초기화 벡터인 IV와 평문블록을 XOR 한다. 송신자와 수신자 모두 IV를 알고 있으며, 보안성을 강화하기 위해서 IV도 키처럼 보호해야 한다. 이 방식은 모든 암호블록이 그 이전의 평문블록에 의해 영향을 받게 된다.

CBC는 가장 널리 사용되는 방식이며 ECB와 달리 동일 평문이 동일한 암호문으로 되지 않는다. 단점으로는 암호화가 병렬처리가 아닌 순차적으로 수행되어야 한다는 점이다. 그리고 메시지는 암호블록 사이즈의 배수로로 패딩되어야 한다. 평문 블록내의 한 비트가 변경될 경우, 이어지는 모든 암호블록에 영향을 주게 된다.


PCBC(Propagating cipher-block chaining)

CBC 모드와 유사하며, 평문 블록이 암호화 될 때 이전의 평문 블록과 이전의 암호 블록을 XOR 해서 암호문의 입력으로 사용한다.
 
PCBC는 Keberos v4에서 주로 사용되지만 그 외의 경우는 거의 사용되지 않는다. CBC와 다른점은 이전 평문이 암호화의 입력으로 포함되면서 하나의 암호 블록에 에러가 발생하면 이어지는 모든 블록에도 영향을 주어 사용할 수 없도록 한다. 그럼으로써 암호화와 동시에 무결성을 보장할 수 있다. 그러나 PCBC모드로 메시지를 암호화 하면 두 개의 인접한 블록이 바뀌더라도 이어지는 블록에 영향을 주지 않게 된다. 그래서 Keberos v5에서는 더 이상 사용되지 않는다.


CFB(Cipher feedback)

CBC 모드와 비슷하게 동일 평문이 동일한 암호문이 되지 않도록 하며, 블록 암호가 스트링 암호처럼 동작한다. IV를 암호화한 값과 평문블럭을 XOR 하여 암호블럭을 생성하고 그 암호문을 초기값으로 하여 다시 암호화한 값과 평문블록을 XOR하여 암호블록을 반복하여 생성하는 방식이다.

CBC와 마찬가지로 암호화는 순차적이고, 복호화는 병렬적으로 처리할 수 있다. 암호화에서는 특정 입력이 이후로 영향을 미치지만, 복호화에서는 특정 암호문의 오류가 계속적으로 이후에 영향을 미치지는 않는다는 특징이 있다. 스트리밍 미디어와 같이 평문의 도착과 암호문 출력사이에 낮은 지연이 요구되는 어플리케이션에서 유용하게 사용할 수 있다.

CFB는 하나의 비트에서부터 블록 크기까지 어떠한 데이터 크기도 암호화 할 수 있으므로 CBC와 달리 메시지가 암호 블록 크기의 배수로 패딩될 필요가 없다. 또한, 암호화, 복호화 모두 암호화(Encryption)로만 처리할 수 있다.


OFB(Output feedback)

초기값 IV를 암호화하고 그 값을 다시 암호화하는 과정을 반복함으로써 생성된 값과 평문블록을 XOR하여 암호문을 생성하는 방식으로, 주로 블록암호 시스템을 스트림암호 시스템처럼 사용하고자 할 때 이용한다.

이 방식에서 암호문의 오류는 복호화 과정에서 대응되는 한 블록에만 영향을 미치므로, 영상이나 음성과 같은 digitized analog신호에 많이 사용된다. 복호화 할 때 IV가 다르면 전혀 다른 평문이 되므로 반드시 초기값을 같게 해야 한다.


CTR(Counter)

OFB와 같이 블록 암호를 스트림 암호처럼 사용하기 위해 CTR을 활용한다. 초기값 IV와 Counter를 1씩 증가한 값을 연결한 것을 암호화하여 생성된 값과 평문블록을 XOR하여 암호문을 생성하는 방식이다.

병렬성이 뛰어나고, 비밀키와 IV가 주어지면 미리 계산할 수 있어 평문이 주어지면 바로 암호문을 만들 수 있다는 장점이 있지만, 동일한 비밀키와 IV를 반복하여 사용할 경우 안전성에 문제가 생긴다는 약점이 있다

아래 구성도에서 Nonce는 다른 곳의 초기화 벡터인 IV와 같은 것으로 생각하면 된다.


댓글
댓글쓰기 폼