정보보안심화 · 13분 읽기
블록암호 운영 모드와 인증 태그: ECB·CBC·CTR·GCM
블록암호 한 번의 계산을 긴 메시지에 적용하는 방법을 식으로 비교한다. IV·Nonce·패딩·오류 전파와 인증 태그가 실제로 어떤 문제를 해결하는지 다룬다.
개념부터 찾아보기
정의·역할·동작 원리를 독립 페이지에서 확인하세요. 본문의 밑줄 용어에도 설명이 있습니다.
이 노트에서 설명할 수 있게 되는 것
- 각 모드에서 이전 암호문·카운터·내부 출력 중 무엇을 입력으로 쓰는지 설명한다.
- 병렬 처리와 오류 전파를 계산식으로 연결한다.
- 기밀성 모드와 AEAD의 검증 결과를 구분한다.
01개념과 구성 요소
- 운영 모드고정 크기 블록암호를 긴 메시지에 적용하는 연결 규칙이다.
- 추가 입력IV··counter·padding··인증 태그의 역할과 요구조건은 모드마다 다르다.
- 보장 구분···의 기밀성 처리와 의 인증된 암호화를 구분한다.
02CBC 암호화와 복호화의 순서
- 입력 준비블록 길이에 맞는 패딩 규칙과 요구에 맞는 예측 불가능한 IV를 준비한다. 이면 정확한 배수에도 한 블록을 덧붙인다.
- 첫 블록 암호화P1과 IV를 XOR한 값을 E_K에 넣어 C1을 만든다.
- 다음 블록 연결각 P_i와 직전 C_(i-1)을 XOR한 뒤 암호화한다. 앞 암호문이 다음 블록 계산의 입력 문맥이 된다.
- 블록 복호화먼저 D_K(C_i)를 계산한 뒤 C_(i-1) 또는 IV와 XOR해 P_i를 복원한다.
- 패딩과 인증 경계패딩을 해석하되 자체가 변조 검증을 제공하지 않음을 구분한다. 패딩 유효성의 외부 차이가 오라클이 되지 않도록 인증 설계를 적용한다.
03블록을 이어 붙이는 방법도 보안 설계다
- 고정 블록의 E_K는 16바이트를 받아 16바이트로 바꾸는 가역 변환이다. 웹 본문과 파일은 그보다 길거나 짧으므로 블록을 어떻게 나누고 연결할지 정해야 한다.
- 모드별 성질이 방식이 운영 모드다. 같은 키를 사용해도 ···은 추가 입력, 병렬 처리 가능성, 암호문 변조의 영향이 다르다.
- 기호여기서 P_i는 평문 블록, C_i는 암호문 블록, E_K와 D_K는 블록암호의 암호화와 복호화다. XOR는 같은 값으로 두 번 적용하면 취소된다.
- 패딩·태그패딩은 메시지 길이를 블록 크기에 맞추는 규칙이고, 인증 태그는 변조를 판정하는 값이므로 둘의 역할을 바꾸어 설명하지 않는다. IV·는 일반적으로 암호문과 함께 전달할 수 있지만 모드별 조건을 지켜야 한다.
04ECB: 동일 블록의 관계가 그대로 남는다
- 식는 C_i=E_K(P_i)로 각 블록을 독립 처리한다. 같은 키에서 같은 평문 블록은 같은 암호문 블록이 된다.
- 패턴 노출따라서 암호문으로 내용을 바로 읽지 못하더라도 반복되는 구조와 동일 여부가 드러난다. 각 블록을 병렬 처리하고 임의 블록을 독립 복호화할 수 있다는 계산 특성은 이러한 패턴 노출을 없애지 않는다.
- 결정적 변환이 모드를 배우는 핵심은 “키가 같아서 모든 모드가 취약하다”가 아니라 각 블록을 다른 문맥 없이 결정적으로 처리한다는 데 있다. 같은 키의 에서 P1=P3이면 C1=C3이다.
- 모드 선택일반적인 긴 메시지의 기밀성 설계에서 이러한 관계 노출을 피하려고 다른 모드를 사용한다.
text
P1 = 같은 16바이트 블록
P2 = 다른 16바이트 블록
P3 = P1
ECB: C1=E_K(P1), C2=E_K(P2), C3=E_K(P3)
결과: C1 = C3패턴 노출을 보여 주는 가상 블록 예시다. 실제 암호화 코드를 실행하는 예제는 아니다.
05CBC: 이전 암호문을 XOR한 뒤 암호화한다
- 연결에서 첫 블록은 IV와 XOR한 뒤 암호화하고 다음 블록은 직전 암호문과 XOR한 뒤 암호화한다. 같은 평문 블록이어도 앞의 암호문 상태가 다르면 다른 암호문이 된다.
- IV·의존성암호화는 C_i를 계산해야 C_(i+1)을 만들 수 있으므로 연결 의존성이 있다. 의 IV는 해당 에 맞게 예측 불가능하게 생성해야 하며 비밀키를 대신하는 값이 아니다.
- 복호화 순서복호화는 먼저 D_K(C_i)를 구한 뒤 C_(i-1)과 XOR한다. 이전 암호문 블록이 있으면 해당 블록을 독립 복호화할 수 있고 블록 복호화 계산은 병렬화할 수 있다.
- 병렬 복호화“는 무조건 첫 블록부터만 복호화한다”는 설명도 정확하지 않다.
text
C0 = IV
C_i = E_K(P_i XOR C_(i-1))
P_i = D_K(C_i) XOR C_(i-1)
복호화 순서: 블록 복호화 → 이전 암호문과 XOR의 연결과 복호화 순서를 직접 보여 주는 식이다.
06CBC 패딩과 패딩 오라클의 성립 조건
- 블록 크기가 16바이트인 에서 메시지 끝이 남으면 사용하는 규칙에 따라 패딩을 붙인다. 을 예로 들면 두 바이트가 부족할 때 02 02를 넣고, 이미 정확한 배수인 경우에도 16개의 10(16진수)을 추가한다.
- 패딩 제거수신자는 복호화 뒤 끝의 패딩 형식을 검사하고 제거한다. 값 02 02가 항상 붙는다는 뜻은 아니다.
- 오라클 조건공격자가 암호문을 조작하여 보내고 패딩이 유효한 경우와 아닌 경우를 오류·응답·시간 차이로 구별할 수 있다면 복호화 결과에 대한 단서를 얻는 오라클이 될 수 있다. 이는 일반적으로 블록암호 키 자체를 즉시 복구하는 것과 다른 문제다.
- 인증 설계방어의 핵심은 인증되지 않은 암호문을 상위 처리에 사용하지 않고 적절한 인증 암호 설계를 적용하는 데 있다. 오류 문구만 숨겨도 모든 시간 차이나 처리 차이가 자동으로 사라지는 것은 아니다.
07CTR: 블록암호로 만든 키스트림과 XOR한다
- 키스트림 생성은 서로 다른 카운터 블록 T_i를 암호화하여 O_i=E_K(T_i)를 만들고 P_i XOR O_i로 암호문을 만든다. 복호화도 같은 O_i와 XOR하므로 블록암호의 복호화 함수를 쓸 필요가 없다.
- 마지막 블록메시지의 마지막 부분은 필요한 길이만 키스트림과 XOR하면 되므로 방식의 길이 패딩이 필요하지 않다. 카운터 입력이 독립적으로 정해지면 병렬 처리와 특정 위치 접근이 가능하다.
- 재사용 XOR동일 키 아래 같은 카운터 블록을 두 메시지에 재사용하면 같은 O가 나온다. C=P XOR O와 C′=P′ XOR O를 XOR하면 C XOR C′=P XOR P′가 되어 두 평문의 관계가 노출된다.
- ·변조·카운터 구성은 전체 카운터 블록이 키 아래 중복되지 않게 만들어야 한다. 암호문 한 비트를 뒤집으면 해당 평문 비트도 뒤집히므로 자체에는 변조 탐지가 없다.
- 카운터 블록 준비동일 키 아래 중복되지 않을 T_i를 만든다. 와 카운터 전체 구성이 유일성 조건을 만족해야 한다.
- 키스트림 계산O_i=E_K(T_i)로 각 블록의 키스트림을 생성한다.
- 평문과 XORC_i=P_i XOR O_i를 계산하며 마지막 부분은 필요한 길이만 사용한다.
- 복호화같은 O_i를 다시 계산해 암호문과 XOR한다. 별도 인증이 없다면 암호문 비트 변화가 평문에도 반영된다.
text
O_i = E_K(T_i)
C_i = P_i XOR O_i
P_i = C_i XOR O_i
키스트림 재사용:
C XOR C′ = (P XOR O) XOR (P′ XOR O)
= P XOR P′재사용이 위험한 이유를 XOR의 성질로 설명한다.
08CFB와 OFB는 무엇을 되먹임하는가
- CFB전체 블록 CFB에서는 이전 암호문을 블록암호에 넣어 출력한 값과 평문을 XOR한다. 첫 입력은 IV다.
- 피드백 크기암호화에는 앞 암호문이 필요하지만, 복호화자는 전달받은 암호문을 사용하여 필요한 블록암호 출력을 계산할 수 있다. CFB는 피드백 세그먼트 크기에 따라 상세 동작과 오류 전파 길이가 달라지므로 모든 구성을 단순히 “두 블록 오류”로 외우면 안 된다.
- OFBOFB는 이전 블록암호 출력 자체를 다음 입력으로 사용한다. 이 키스트림은 평문과 암호문 내용에 독립적이다.
- 동기·재사용암호문 비트 오류는 같은 위치의 평문에 영향을 주지만 바이트가 빠져 동기가 틀어지는 문제는 따로 다뤄야 한다. OFB에서도 같은 키와 IV를 다시 사용하면 키스트림이 반복된다.
- 기밀성 범위이 모드들은 기밀성 구성의 역사와 원리를 읽는 대상이며 무결성을 자동 제공하지 않는다.
09GCM: CTR의 기밀성에 인증 태그를 결합한다
- 은 카운터 방식의 암호화와 기반 인증 계산을 결합하는 방식이다. 평문뿐 아니라 암호화하지 않고 무결성만 보호할 도 입력할 수 있다.
- 예를 들어 레코드 유형과 같은 헤더 정보는 전달되어야 하므로 숨기지 않더라도 메시지와 함께 인증할 수 있다. 암호문 길이와 길이도 인증 계산 문맥에 포함된다.
- 태그 검증수신자는 키··암호문··태그로 검증하고, 성공한 경우에만 평문을 상위 기능에 전달해야 한다. 인증 실패가 “읽을 수 있는 부분만 사용해도 된다”는 뜻은 아니다.
- 재사용같은 키에서 를 재사용하면 기밀성뿐 아니라 인증 안전성까지 심각하게 훼손할 수 있다. 재시작, 복제 인스턴스, 병렬 송신자가 카운터를 다시 쓰는 상황도 같은 키 문맥에 포함된다.
- 입력 구성키··평문·를 준비한다. 는 숨기지 않지만 메시지와 함께 인증할 자료다.
- 암호화·태그 생성이 카운터 암호화와 기반 계산으로 암호문·인증 태그를 만든다.
- 수신 검증수신 측이 같은 키·· 문맥에서 태그를 검증한다.
- 검증 후 사용검증 성공 시에만 평문을 상위 기능에 전달한다. 실패 자료를 부분적으로 사용하거나 같은 키에서 를 재사용하지 않는다.
원리 심화
10GCM의 암호화 입력과 인증 입력
- 경로은 Counter 블록을 암호화해 만든 키스트림과 평문을 XOR하여 암호문을 만든다. 같은 키에서 가 재사용되면 핵심 가정이 깨진다.
- 경로인증에는 Additional Authenticated Data와 암호문·길이 정보가 들어간다. 는 암호화하지 않아도 변조 검증에 포함된다.
- 인증 키의 H는 블록암호로 0 블록을 암호화해 얻는다. 인증 태그는 결과와 초기 Counter 관련 암호화 값을 결합해 만든다.
- 96비트 IV96비트 IV의 경우 초기 Counter J0는 IV 뒤에 0^31과 1을 붙이는 형태다. 다른 IV 길이는 별도의 도출 과정을 거친다.
- 검증 순서수신자는 태그 검증이 성공한 평문만 후속 처리에 사용해야 한다. 복호화 API가 바이트를 내놓았다는 사실과 인증 성공을 구분한다.
예제로 추적
11가상 17바이트 평문의 CBC·AEAD 길이 비교
- 조건-에 패딩을 적용하면 블록 크기는 16바이트다. 평문 17바이트에는 15바이트를 덧붙여 32바이트를 만든다.
- 패딩 값추가하는 각 바이트 값은 15, 즉 0x0F다. 추가 길이와 각 바이트 값이 같다는 규칙으로 패딩을 해석한다.
- 포장교육용 포맷이 IV 16바이트와 암호문 32바이트를 붙인다면 48바이트다. 이 계산에는 별도 MAC·헤더가 없다.
- 포장다른 교육용 포맷이 12바이트·암호문 17바이트·태그 16바이트를 붙이면 45바이트다. 은 이 평문에 블록 패딩을 붙이지 않는다.
- 비교 조건포맷·태그 길이·헤더 정책이 달라지면 총 길이도 달라진다. 45와 48이라는 예를 모든 프로토콜의 고정 오버헤드로 일반화하지 않는다.
검증·예외
12인증 실패와 패딩 실패의 진단 경계
- 키· 문맥키 세대·방향· 구성·재시작 후 Counter 초기화를 확인한다. 같은 값 재사용을 피하는 설계는 수명보다 넓은 범위가 필요할 수 있다.
- 일치송수신자가 헤더·길이·문자 인코딩을 같은 바이트로 구성했는지 본다. 눈에 같은 문자열도 바이트가 다르면 태그가 다르다.
- 오류 응답의 패딩·MAC 오류가 외부 응답이나 시간으로 세밀하게 구분되지 않도록 검증 경로를 설계한다.
- 평문 사용인증 전에 복호화된 데이터를 파일로 실행·파싱·업무 처리하지 않는다. 실패한 데이터가 이미 부수 효과를 만들면 뒤늦은 오류 반환으로 복구되지 않는다.
13오류 전파·동기·인증 실패를 함께 비교하기
- 비트 오류 전파 암호문의 한 블록에 비트 오류가 있으면 해당 평문 블록은 복호화 결과가 크게 바뀌고 다음 평문 블록에는 같은 위치의 비트 반전이 나타날 수 있다. 과 OFB는 대응하는 비트가 바뀌는 구조다.
- 오류와 인증이러한 오류 전파 특성은 공격자 변조를 탐지한다는 보장이 아니다. 수신자가 잘못된 평문을 정상 데이터로 사용하면 오류가 제한적으로 퍼져도 보안 사고가 될 수 있다.
- 동기 상실동기 상실은 단순 비트 반전과 다르다. 길이 정보가 틀리거나 바이트가 누락되어 블록·카운터 위치가 밀리면 이후의 해석도 무너진다.
- 레코드 정책프로토콜은 레코드 길이와 순서, 생성, 인증 실패의 연결 종료 정책까지 규정해야 한다. 이 때문에 을 호출하는 한 줄과 안전한 레코드 계층을 구현하는 일은 범위가 다르다.
| 방식 | 다음 처리의 입력 문맥 | 인증 태그 자체 제공 |
|---|---|---|
| 해당 평문 블록 | 아니오 | |
| 직전 암호문·IV | 아니오 | |
| 유일한 카운터 블록 | 아니오 | |
| CFB | 직전 암호문·피드백 상태 | 아니오 |
| OFB | 직전 블록암호 출력 | 아니오 |
| 카운터와 인증 계산 | 예 |
READ · OBSERVE · CONNECT
함께 보는 학습 자료
아래 공식 자료를 본문의 개념·예제와 함께 읽어 보세요. 자료별로 확인할 위치와 관찰할 내용을 적었습니다.
NIST SP 800-38D: GCM 입력·출력과 처리 도해
7절의 암호화·복호화 도해에서 처리와 인증의 역할을 나누고 8절의 IV 조건을 연결한다.
읽으면서 확인할 것
- P·A·IV·C·T 입력과 출력의 대응
- 와 암호문이 인증 계산에 들어가는 경로
- 동일 키의 IV 재사용을 금지해야 하는 이유
학습 확인
이해했는지 확인하기
- CBC 복호화에서 블록 복호화와 XOR의 순서를 설명한다.
- CTR 키스트림 재사용 시 두 평문의 관계가 노출되는 이유를 계산한다.
- 태그 검증 실패와 패딩 오류가 상위 기능에 노출되는 경계를 구분한다.