정보보호 스터디

[블록 암호 모드] CBC 모드

녕녕펀치 2024. 2. 28. 10:32

1. CBC 모드

  • Cipher Block Chaining 모드
  • 1단계 앞에서 수행되어 결과로 출력된 암호문 블록에 평문 블록을 XOR 하고 나서 암호화를 수행
  • 생성되는 각각의 암호문 블록은 단지 현재 평문 블록뿐만 아니라 그 이전 평문 블록들의 영향도 받게 됨

2. 초기화 벡터

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

3. CBC 모드의 특징

  • 평문 블록은 반드시 '1단계 앞의 암호문 블록'과 XOR을 취하고 나서 암호화됨 → 평문 블록1과 2의 값이 같은 경우라도 암호문 블록1과 2의 값이 같아진다고 볼 수 없음
  • 도중의 평문 블록만 뽑아내서 암호화할 수 없음

  • 암호문 블록 1개가 파손되었으나, 블록의 길이는 동일하게 유지하고 있다고 가정하면, 복호화 했을 때 평문 블록에 미치는 영향은 2개의 블록에 머뭄

  • 암호화한 암호문을 전송하는 도중에 비트 누락이 있다고 가정하면, 암호문을 수신한 수신측에서는 암호문을 블록으로 잘라내어 CBC 모드 복호화에 맞춰 복호화를 하게 되는데, 이 때 누락된 비트가 포함된 암호문 블록을 포함하여 그 이후의 암호문 블록은 전부 어긋나게 됨. → 이후의 암호문 블록은 전부 복호화할 수 없게 됨

4. CBC 모드에 대한 공격

  • 맬로리는 초기화 벡터 값의 임의의 비트를 반전시킬 수 있다면, 암호 블록 1에 대응하는 평문 블록 1의 비트를 반전시킬 수 있음 (초기화 벡터와 XOR을 취하기 때문)
  • 암호문 블록에 대해서는 맬로리가 원하는 한 비트만을 변화시키는 것은 불가능

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


5. 패딩 오라클 공격

  • 블록 암호의 패딩을 이용한 공격
  • 블록 암호에서는 평문 길이가 블록 길이의 정수배가 되지 않을 때, 마지마 블록에 패딩이라는 데이터를 추가
  • 공격자는 패딩 내용을 조금씩 변화시켜 암호문을 몇번이고 송신함
  • 수신자(서버)는 올바른 평문으로 복호화하지 못했을 경우 오류를 보내기 때문에 그것을 사용하여 평문 정보의 일부를 얻으려는 것
  • 이 공격은 CBC 모드 뿐만 아니라 패딩을 실행하는 모든 모드에 사용 가능
  • 암호문이 평문을 알고 있는 상대방에 의해 바르게 생성된 것임을 인증하면 공격을 막을 수 있음

6. 초기화 벡터(IV) 공격

  • 초기화 벡터(IV)는 예측 불가능한 난수로 주어져야 함

7. CBC 모드 활용

  • 인터넷에서 보안을 제공하는 프로토콜인 SSL/TLS에서는 통신의 기밀성을 지키기 위해 CBC 모드 사용 중
  • 트리플 DES를 CBC 모드로 사용한 3DES-EDL-CBC, 키 길이가 256비트인 AES를 CBC 모드로 사용한 AES-256-CBC 등이 있음