정보보호 스터디
[블록 암호 모드] 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을 취하기 때문)
- 암호문 블록에 대해서는 맬로리가 원하는 한 비트만을 변화시키는 것은 불가능
5. 패딩 오라클 공격
- 블록 암호의 패딩을 이용한 공격
- 블록 암호에서는 평문 길이가 블록 길이의 정수배가 되지 않을 때, 마지마 블록에 패딩이라는 데이터를 추가
- 공격자는 패딩 내용을 조금씩 변화시켜 암호문을 몇번이고 송신함
- 수신자(서버)는 올바른 평문으로 복호화하지 못했을 경우 오류를 보내기 때문에 그것을 사용하여 평문 정보의 일부를 얻으려는 것
- 이 공격은 CBC 모드 뿐만 아니라 패딩을 실행하는 모든 모드에 사용 가능
- 암호문이 평문을 알고 있는 상대방에 의해 바르게 생성된 것임을 인증하면 공격을 막을 수 있음
6. 초기화 벡터(IV) 공격
- 초기화 벡터(IV)는 예측 불가능한 난수로 주어져야 함
7. CBC 모드 활용
- 인터넷에서 보안을 제공하는 프로토콜인 SSL/TLS에서는 통신의 기밀성을 지키기 위해 CBC 모드 사용 중
- 트리플 DES를 CBC 모드로 사용한 3DES-EDL-CBC, 키 길이가 256비트인 AES를 CBC 모드로 사용한 AES-256-CBC 등이 있음