개요

블록 암호화기법을 사용할 경우 만약 블록의 내용이 겹치거나 같을 경우 같은 암호문을 생성해 낼 수 있다. 만야 공격자가 동일한 암호문을 발견할 경우 원문을 추적해 낼 수 있다는 가능성이 존재한다. 더 나아가 동일 암호문 블록의 발견에 더해서 하위 프로토콜 구조에 대한 지식까지 활용하면 전체 메시지를 복호화 해 낼 수 있다. 이 문제를 해결하기 위해서 평문 블록이 동일하더라도 다른 암호문 블록이 생성될 수 있도록 기존 암호화 기술에 임의성을 추가할 수 있다.

CBC (Cipher Block Chaining)

기본 아이디어는 첫 번째 메시지와 함께 임의의 수를 단 한번만 전송하고 이후의 임의의 수로는 직전에 계산된 암호문 블록을 대신 사용하는 것이다.

  1. 메시지를 암호화하기 전에 송신자는 초기화 벡터 (IV, Initialization Vector)라 불리는 임의의 k 비트열을 생성한다. 이 초기화 벡터를 c(0)라 하면 송신자는 이 초기화 벡터를 평문 형태로 수신자에게 보낸다.
  2. 첫 번째 블록에 대해서 송신자는 평문의 첫 번째 블록과 IV의 배타적 논리합을 구한다. 그 다음, 그 결과를 블록 암호 알고리즘의 입력으로 사용하여 해당하는 암호문 블록을 얻는다. 송신자는 이 암호화된 블록 c(1)을 수신자로 전송한다.
  3. i 번째 블록에 대해서 송신자는 [math] c(i) = Ks(m(i)) \bigoplus c(i-1)) [/math] 의 식을 이용해서 i 번째 암호문 블록을 만들어 낸다.

결과

수신자는 Ks 로 복호화 하여 [math] s(i) = m(i) \bigoplus c(i - 1) [/math]를 얻어 낸다.

  1. 수신자는 여전히 원래 메시지를 복구해 낼 수 있다.
  2. 두 평문 블록이 동일하더라도 해당 암호문은 거의 모든 경우 서로 달라진다.
  3. IV를 암호화 하지 않고 보내더라도 침입자는 Ks를 모르기 때문에 암호문 블록을 연전히 해독해 낼 수 없다.