정보보안심화 · 13분 읽기

블록암호 운영 모드와 인증 태그: ECB·CBC·CTR·GCM

블록암호 한 번의 계산을 긴 메시지에 적용하는 방법을 식으로 비교한다. IV·Nonce·패딩·오류 전파와 인증 태그가 실제로 어떤 문제를 해결하는지 다룬다.

개념부터 찾아보기

정의·역할·동작 원리를 독립 페이지에서 확인하세요. 본문의 밑줄 용어에도 설명이 있습니다.

이 노트에서 설명할 수 있게 되는 것

  1. 각 모드에서 이전 암호문·카운터·내부 출력 중 무엇을 입력으로 쓰는지 설명한다.
  2. 병렬 처리와 오류 전파를 계산식으로 연결한다.
  3. 기밀성 모드와 AEAD의 검증 결과를 구분한다.

01개념과 구성 요소

  • 고정 크기 블록암호를 긴 메시지에 적용하는 연결 규칙이다.
  • IV··counter·padding··인증 태그의 역할과 요구조건은 모드마다 다르다.
  • ···의 기밀성 처리와 의 인증된 암호화를 구분한다.

02CBC 암호화와 복호화의 순서

  1. 블록 길이에 맞는 패딩 규칙과 요구에 맞는 예측 불가능한 IV를 준비한다. 이면 정확한 배수에도 한 블록을 덧붙인다.
  2. P1과 IV를 XOR한 값을 E_K에 넣어 C1을 만든다.
  3. 각 P_i와 직전 C_(i-1)을 XOR한 뒤 암호화한다. 앞 암호문이 다음 블록 계산의 입력 문맥이 된다.
  4. 먼저 D_K(C_i)를 계산한 뒤 C_(i-1) 또는 IV와 XOR해 P_i를 복원한다.
  5. 패딩을 해석하되 자체가 변조 검증을 제공하지 않음을 구분한다. 패딩 유효성의 외부 차이가 오라클이 되지 않도록 인증 설계를 적용한다.

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한 뒤 암호화한다. 같은 평문 블록이어도 앞의 암호문 상태가 다르면 다른 암호문이 된다.
  • 암호화는 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하면 되므로 방식의 길이 패딩이 필요하지 않다. 카운터 입력이 독립적으로 정해지면 병렬 처리와 특정 위치 접근이 가능하다.
  • 동일 키 아래 같은 카운터 블록을 두 메시지에 재사용하면 같은 O가 나온다. C=P XOR O와 C′=P′ XOR O를 XOR하면 C XOR C′=P XOR P′가 되어 두 평문의 관계가 노출된다.
  • ·카운터 구성은 전체 카운터 블록이 키 아래 중복되지 않게 만들어야 한다. 암호문 한 비트를 뒤집으면 해당 평문 비트도 뒤집히므로 자체에는 변조 탐지가 없다.
  1. 동일 키 아래 중복되지 않을 T_i를 만든다. 와 카운터 전체 구성이 유일성 조건을 만족해야 한다.
  2. O_i=E_K(T_i)로 각 블록의 키스트림을 생성한다.
  3. C_i=P_i XOR O_i를 계산하며 마지막 부분은 필요한 길이만 사용한다.
  4. 같은 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에서는 이전 암호문을 블록암호에 넣어 출력한 값과 평문을 XOR한다. 첫 입력은 IV다.
  • 암호화에는 앞 암호문이 필요하지만, 복호화자는 전달받은 암호문을 사용하여 필요한 블록암호 출력을 계산할 수 있다. CFB는 피드백 세그먼트 크기에 따라 상세 동작과 오류 전파 길이가 달라지므로 모든 구성을 단순히 “두 블록 오류”로 외우면 안 된다.
  • OFB는 이전 블록암호 출력 자체를 다음 입력으로 사용한다. 이 키스트림은 평문과 암호문 내용에 독립적이다.
  • 암호문 비트 오류는 같은 위치의 평문에 영향을 주지만 바이트가 빠져 동기가 틀어지는 문제는 따로 다뤄야 한다. OFB에서도 같은 키와 IV를 다시 사용하면 키스트림이 반복된다.
  • 이 모드들은 기밀성 구성의 역사와 원리를 읽는 대상이며 무결성을 자동 제공하지 않는다.

09GCM: CTR의 기밀성에 인증 태그를 결합한다

  • 은 카운터 방식의 암호화와 기반 인증 계산을 결합하는 방식이다. 평문뿐 아니라 암호화하지 않고 무결성만 보호할 도 입력할 수 있다.
  • 예를 들어 레코드 유형과 같은 헤더 정보는 전달되어야 하므로 숨기지 않더라도 메시지와 함께 인증할 수 있다. 암호문 길이와 길이도 인증 계산 문맥에 포함된다.
  • 수신자는 키··암호문··태그로 검증하고, 성공한 경우에만 평문을 상위 기능에 전달해야 한다. 인증 실패가 “읽을 수 있는 부분만 사용해도 된다”는 뜻은 아니다.
  • 같은 키에서 를 재사용하면 기밀성뿐 아니라 인증 안전성까지 심각하게 훼손할 수 있다. 재시작, 복제 인스턴스, 병렬 송신자가 카운터를 다시 쓰는 상황도 같은 키 문맥에 포함된다.
  1. 키··평문·를 준비한다. 는 숨기지 않지만 메시지와 함께 인증할 자료다.
  2. 이 카운터 암호화와 기반 계산으로 암호문·인증 태그를 만든다.
  3. 수신 측이 같은 키·· 문맥에서 태그를 검증한다.
  4. 검증 성공 시에만 평문을 상위 기능에 전달한다. 실패 자료를 부분적으로 사용하거나 같은 키에서 를 재사용하지 않는다.
원리 심화

10GCM의 암호화 입력과 인증 입력

  • 은 Counter 블록을 암호화해 만든 키스트림과 평문을 XOR하여 암호문을 만든다. 같은 키에서 가 재사용되면 핵심 가정이 깨진다.
  • 인증에는 Additional Authenticated Data와 암호문·길이 정보가 들어간다. 는 암호화하지 않아도 변조 검증에 포함된다.
  • 의 H는 블록암호로 0 블록을 암호화해 얻는다. 인증 태그는 결과와 초기 Counter 관련 암호화 값을 결합해 만든다.
  • 96비트 IV의 경우 초기 Counter J0는 IV 뒤에 0^31과 1을 붙이는 형태다. 다른 IV 길이는 별도의 도출 과정을 거친다.
  • 수신자는 태그 검증이 성공한 평문만 후속 처리에 사용해야 한다. 복호화 API가 바이트를 내놓았다는 사실과 인증 성공을 구분한다.
예제로 추적

11가상 17바이트 평문의 CBC·AEAD 길이 비교

  1. -에 패딩을 적용하면 블록 크기는 16바이트다. 평문 17바이트에는 15바이트를 덧붙여 32바이트를 만든다.
  2. 추가하는 각 바이트 값은 15, 즉 0x0F다. 추가 길이와 각 바이트 값이 같다는 규칙으로 패딩을 해석한다.
  3. 교육용 포맷이 IV 16바이트와 암호문 32바이트를 붙인다면 48바이트다. 이 계산에는 별도 MAC·헤더가 없다.
  4. 다른 교육용 포맷이 12바이트·암호문 17바이트·태그 16바이트를 붙이면 45바이트다. 은 이 평문에 블록 패딩을 붙이지 않는다.
  5. 포맷·태그 길이·헤더 정책이 달라지면 총 길이도 달라진다. 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 키스트림 재사용 시 두 평문의 관계가 노출되는 이유를 계산한다.
  • 태그 검증 실패와 패딩 오류가 상위 기능에 노출되는 경계를 구분한다.

함께 확인할 공식 자료