블록암호 운영 모드
ECB·CBC·CFB·OFB·CTR의 연결 방식, 초기값, 오류 전파를 비교합니다.
1. 운영 모드는 블록을 연결하는 규칙이다
블록 암호는 한 블록의 변환을 정의한다. 긴 메시지의 여러 블록을 어떤 입력·이전 결과와 연결할지 정하는 것이 운영 모드다. 아래에서 E_K는 암호화 변환, D_K는 역변환, P_i·C_i는 i번째 평문·암호문이다.
ECB·CBC·CFB·OFB·CTR은 기밀성 모드다. 이 모드 이름만으로 변조 탐지나 발신자 인증이 있다고 판단하지 않는다.
2. ECB와 CBC
ECB는 각 블록을 독립적으로 암호화한다.
C_i = E_K(P_i)
P_i = D_K(C_i)
같은 키에서 같은 평문 블록은 같은 암호문이 된다. 반복 패턴이 드러나므로 구조화된 긴 데이터를 숨기는 데 부적합하다. 암호화·복호화 병렬 처리는 가능하다.
CBC는 평문을 이전 암호문과 XOR한 뒤 암호화한다. 첫 블록에는 이전 암호문 대신 IV를 사용한다.
C_0 = IV
C_i = E_K(P_i XOR C_(i-1))
P_i = D_K(C_i) XOR C_(i-1)
CBC의 IV는 비밀일 필요는 없지만 예측 불가능해야 하고 무결성도 보호해야 한다. 암호화는 이전 결과를 기다려야 하므로 순차적이다. 복호화는 암호문들이 이미 있으면 각 역변환을 병렬로 수행할 수 있다.
3. CFB와 OFB
CFB는 이전 암호문을 암호화한 출력과 현재 평문을 XOR한다. 전체 블록 단위 CFB를 단순화하면 다음과 같다.
C_0 = IV
C_i = P_i XOR E_K(C_(i-1))
P_i = C_i XOR E_K(C_(i-1))
복호화에도 D_K가 아닌 E_K를 사용한다. CFB에는 세그먼트 크기가 다른 방식도 있으며 오류 영향 범위는 그 크기에 따라 달라진다. IV는 예측 불가능해야 한다.
OFB는 암호문이 아니라 직전 암호화 출력 자체를 피드백한다.
O_0 = IV
O_i = E_K(O_(i-1))
C_i = P_i XOR O_i
P_i = C_i XOR O_i
키스트림은 메시지와 무관하게 미리 만들 수 있지만 이전 출력에 의존하므로 생성은 순차적이다. 같은 키에서 IV를 재사용하면 같은 키스트림이 반복되므로 IV의 고유성이 중요하다.
4. CTR과 모드별 피드백 비교
CTR은 각 블록에 대응하는 고유한 카운터 블록을 암호화한다.
O_i = E_K(T_i)
C_i = P_i XOR O_i
P_i = C_i XOR O_i
같은 키로 보호하는 모든 메시지에서 카운터 블록 전체가 중복되지 않아야 한다. 메시지마다 카운터를 0으로 되돌리기만 하면 충분하지 않다. 보통 nonce와 블록 번호를 결합해 구별한다. 각 계산이 이전 암호문에 의존하지 않으므로 암호화·복호화 병렬 처리와 임의 위치 처리가 가능하다.
| 모드 | 암호화 입력의 특징 | 초기값 조건 | 복호화 변환 |
|---|---|---|---|
| ECB | 현재 평문만 처리 | IV 없음 | D_K |
| CBC | 평문 XOR 이전 암호문 | 예측 불가능한 IV | D_K 후 XOR |
| CFB | 이전 암호문을 암호화 | 예측 불가능한 IV | E_K 후 XOR |
| OFB | 이전 암호 출력 재사용 | 같은 키에서 고유한 IV | E_K로 같은 키스트림 |
| CTR | 고유한 카운터 블록 | 같은 키에서 전체 값 중복 금지 | E_K로 같은 키스트림 |
5. 병렬 처리·패딩·오류 전파
아래 오류는 전송 중 암호문 한 비트가 뒤집히고 인증 검증 없이 복호화했을 때의 성질이다. 비트 삽입·삭제나 별도의 인증 실패 처리와 혼동하지 않는다.
| 모드 | 암호화 / 복호화 병렬성 | 기본 처리 단위의 길이 조건 | 암호문 한 비트 오류의 영향 |
|---|---|---|---|
| ECB | 가능 / 가능 | 블록 정렬·보통 패딩 필요 | 해당 평문 블록 손상 |
| CBC | 순차 / 가능 | 블록 정렬·보통 패딩 필요 | 해당 블록 손상 + 다음 블록 같은 위치 반전 |
| CFB | 순차 / 수신 암호문으로 병렬 계산 가능 | 세그먼트 정렬 | 해당 위치 반전 + 뒤 일정 구간 손상 |
| OFB | 키스트림 생성은 순차 | 마지막 부분 블록 처리 가능 | 해당 위치만 반전 |
| CTR | 가능 / 가능 | 마지막 부분 블록 처리 가능 | 해당 위치만 반전 |
전체 블록 CFB에서는 현재 평문 블록의 해당 비트가 반전되고 다음 블록이 손상된다. CBC는 현재 블록이 손상되고 다음 블록의 해당 비트가 반전된다. 두 모드의 오류 방향을 바꾸어 외우지 않는다. OFB도 미리 만든 키스트림과의 XOR는 병렬화할 수 있지만 키스트림 생성의 순차성은 남는다.
6. 계산 예시와 인증된 암호화
학습용 CTR에서 어떤 카운터의 암호 출력이 10101100, 평문이 11001010이라면 XOR 결과는 01100110이다. 다시 같은 출력과 XOR하면 평문이 복원된다. 실제 AES 블록은 128비트이며 이 8비트 예시는 XOR만 설명한다.
GCM·CCM은 암호화와 인증 태그를 결합하는 AEAD 방식이다. 부가 인증 데이터(AAD)는 암호화하지 않더라도 무결성을 보호할 수 있다. 태그 검증 없이 복호화된 내용을 신뢰하면 안 된다. 모드별 nonce 조건도 필요하며, 특히 GCM에서 같은 키·nonce의 재사용은 기밀성과 인증을 함께 손상시킬 수 있다.
개념 확인 문제
문제를 누르면 바로 아래에서 정답과 해설을 확인할 수 있습니다.
01이전 암호문을 암호화하는 CFB와 이전 암호 출력 자체를 암호화하는 OFB를 어떻게 구분하는가?
CFB는 암호문 피드백, OFB는 출력 피드백이다. 두 방식 모두 복호화에 블록 암호의 정방향 함수 E_K를 사용한다.
02CBC 암호문 Ci의 한 비트가 바뀌면 인증 없이 복호화한 평문에는 어떤 영향이 생기는가?
P_i 블록이 손상되고 P_(i+1)의 같은 위치 비트가 반전된다. P_(i+2) 이후로 그 비트 오류가 계속 전파되는 것은 아니다.