CBC

반응형


  블록 암호는 고정된 n 비트 블록을 n 비트 블록으로 변환시키는 함수이다. 블록 암호를 이용하여 평문을 암호화할 때에는 암호 알고리즘만 있으면 되는 것이 아니고, 사용 방식도 규정해야 다. 이것을 블록 암호 운용 방식이라고 다. 암호학에서 블록 암호 운용 방식(Block Cipher Modes of Operation)은, 하나의 키 하에서 블록 암호를 반복적으로 안전하게 이용하게 하는 절차를 의미다. 이 블록 암호 운용 방식에는, ECB, CBC, CFB, OFB, CTR 모드들이 있다. 이 모드들은 DES나 AES 등의 어떤 대칭 블록 암호에도 적용할 수 있다.


  ECB(Electronic CodeBook) 모드는, 블록 암호 운용 방식 중에서 가장 간단한 모드로, 평문을 N 개의 n 비트 블록으로 분할다. 만약 평문 크기가 블록 크기(n 비트)의 배수가 아니라면, 평문의 마지막 블록에는 padding을 덧붙여서 다른 블록들과 동일하게 크기를 맞춘다. 이렇게 분할한 블록을 암호화 또는 복호화 하기 위해 사용되는 키는 동일하다. 동일한 평문 블록은 동일한 암호문 블록을 갖게 되며, 평문의 각 블록은 다른 블록들과 아무 관계없이 암호화된다. 따라서 암호문 블록을 재배열하여 복호화 하면, 재배열된 평문 블록이 나온다. 그리고 각 블록들이 서로 관련 없이 암호화되기 때문에, 암호문의 한 블록에서 에러가 발생하면, 대응되는 평문 블록에서만 에러가 발생다. ECB 모드의 장점은, 구현이 간단하며, 많은 데이터베이스들을 암호화 또는 복호화 할 때 병렬적으로 처리할 수 있다는 것이다. 데이터베이스의 레코드를 암호화 또는 복호화 할 때, 다른 레코드들에게 영향을 끼치지 않고 중간부터 암호화 또는 복호화 할 수 있기 때문에 적합하다.


  CBC(Cipher Block Chaining) 모드는, 1976년 IBM에 의해서 개발된 모드이다. 각 평문 블록은, 암호화되기 전에 이전 블록의 암호화 결과와 XOR 된다. 따라서 생성되는 각각의 암호문 블록은, 현재 평문 블록뿐만 아니라 그 이전의 평문 블록들의 영향도 받는 것이다. 각 블록에는 동일한 키를 사용하게 된다. 첫 블록의 경우에는 초기화 벡터(Initial Vector, IV)를 이용다. 송신자와 수신자가 사전에 공유한 IV를 사용하게 되는 것이다. 이 초기화 벡터는 제3자가 알게 해서는 안된다. 블록이 암호화되면, 다음 평문 블록과 XOR이 수행되어야 하기 때문에, 블록의 암호화 결과를 메모리에 저장해야 다. 그리고 초기화 벡터가 같을 경우에는, 출력 결과가 항상 같게 된다. 만약 특정 암호문에서 에러가 발생하면, 그에 대응하는 평문과 그다음 평문에서 에러가 발생다. 그다음다음 평문에서는 정상적으로 복호화 된다. 즉, 복호화 할 때, CBC 모드의 암호문 블록이 1개 파손된 경우에는, 2개의 평문 블록에 영향을 주게 되는 것이다. 이와 다르게, 평문 블록에서 한 비트라도 오류가 나면, 모든 암호문에 영향을 주게 된다. CBC 모드는, 복호화 할 때만 병렬 처리가 가능하다. IPSec는 인터넷에서 보안을 제공하는 프로토콜 중 하나인데, 통신의 기밀성을 위해서 CBC 모드를 사용하고 있다. 또한 인증을 수행하는 Kerberos version 5에서도 CBC 모드를 사용하고 있다.


  CFB(Cipher FeedBack) 모드는, CBC의 변형으로서, 블록 암호를 자기 동기 스트림 암호(비동기식 스트림 암호)를 변환다. 스트림 암호는, 메시지의 길이가 블록의 크기의 배수가 되도록 패딩을 덧붙일 필요가 없기 때문에 실시간으로 사용 가능하다. 따라서 한 문자가 암호화되면 즉시 전송할 수 있다. CFB 모드에서 암호화 또는 복호화 기법은 DES나 AES와 같은 블록 암호화 함수를 사용다. 복호화 할 때에도 암호화 함수를 사용하며, 복호화 할 때만 병렬처리가 가능다.


  OFB(Output FeedBack) 모드는, 평문 블록이 동일하면 암호문이 같아지는 ECB 모드의 단점과 오류 전파가 발생하는 CBC 모드와 CFB 모드의 단점을 개선한 모드이다. OFB 모드에서는, 암호화한 결과(암호기의 출력)와 평문을 EX-OR하여 암호문을 생성하고 있으므로 오류 전파가 발생하지 않는다. 다시 말해 특정 암호문 블록에 오류가 발생했다면, 그것을 복호화 한 평문 블록에만 영향을 미치며, 그 이후에 복호화 된 다른 평문 블록들에는 아무 영향을 주지 않는다. OFB 모드는 CFB 모드처럼 블록 암호를 기반으로 하는 스트림 암호이다. 키 스트림이 평문 및 암호문과 독립적으로 생성되므로 동기식 스트림 암호이다. OFB 모드 또한 패딩 처리가 필요 없다. 그러나 병렬 처리가 불가하다는 단점이 있다.


  CTR(CounTeR) 모드는, 블록 암호를 스트림 암호로 바꾸는 구조이지만, CFB나 OFB 모드처럼 피드백이 존재하지 않는다. 각 블록마다 현재 블록이 몇 번째인지 값을 얻어, 그 숫자와 nonce(비표)를 결합해서 블록 암호의 입력으로 사용다. 그렇게 각 블록 암호에서 연속적인 난수를 얻은 결과를 평문과 XOR 하여 암호문을 만들어낸다. CTR 모드는, 각 블록의 암호화 및 복호화가 이전 블록에 의존하지 않으므로 병렬적으로 처리가 가능하다.

반응형

+ Recent posts