[암호화] 블록 암호화 모드 정리(ECB, CBC, CFB, OFB, CTR, GCM)

이영재·2025년 10월 23일
0

Basis

목록 보기
4/4

0. 용어 정리

  • 모드(Mode) : 블록 암호화 모드란 긴 평문 데이터를 여러 개의 블럭 단위로 나누어, 이 블록들을 어떻게 암호화하고 연결할지를 정의 한 운용 방식이다.
  • 패딩(padding) : 데이터 블록의 크기를 맞추기 위해서 추가하는 값이다. 암호화 알고리즘이 요구하는 블록 크기에 정확히 맞지 않을 때, 남는 공간을 채워주는 과정이다.

패딩 방식 종류
1. PKCS5Padding

  • 설명: 부족한 바이트 수 N만큼 모두 값 N으로 채워 넣는 방식.
  • 특징: 항상 복원 가능하고 널리 쓰이나, 패딩 오라클 취약점에 취약할 수 있음.
  1. Zero padding (제로패딩)
  • 설명: 부족한 바이트를 모두 0x00으로 채워 넣는 방식.
  • 특징: 구현이 단순하지만 평문이 0x00으로 끝나면 모호성이 생겨 안전하지 않음.
  1. ANSI X.923
  • 설명: 부족 바이트를 0x00으로 채우고 마지막 바이트에 패딩 길이 N을 기록.
  • 특징: 제로패딩의 모호성 해결, PKCS#7보다 덜 보편적이지만 복원 안정성 확보.
  1. ISO/IEC 7816-4 (비트 패딩)
  • 설명: 첫 패딩 바이트에 0x80을 넣고 나머지를 0x00으로 채우는 방식.
  • 특징: 패딩 경계를 명확히 찾을 수 있어 안전하고 카드/임베디드에서 자주 사용됨.

가능하면 직접 패딩 구현하지 않고, 표준 라이브러리 사용을 권장한다.

  • 초기화 백터 : IV(Initialization Vector)는 블록 암호 모드에서 첫 번째 블록의 암호화를 무작위화하고 블록간 반복/패턴을 막기 위해 사용하는 값이다.
    • IV는 암호화의 무작위성으로 같은 평문키라도 서로 다른 암호문을 만들고, 잘못 생성/재사용하면 보안이 파괴된다.
  • 패딩 오라클 공격 : 블록 암호의 패딩을 이용한 공격을 말한다. 블록 암호에서는 평문의 길이가 블록 길이의 정수배가 되지 않을 때 마지막 블록에 패딩을 추가하는데, 이 때 패딩 내용을 조금씩 변경시켜서 암호문을 여러번 송신한다.
    • 이때 응답으로 오는 오류 정보를 가지고 평문의 정보를 일부 얻는 공격 방식이다.

🤔 오류의 정보란 무엇일까?
타이밍(시간) 차이, 에러 발생 위치에 따른 부수적 차이, 응답 크기/헤더/상태 코드 차이 여러 부가적인 정보를 통해 공격자는 평문의 정보를 얻으려고 한다.

1. ECB(Electronic Code Book) 모드

평문을 일정한 크기로 나눠, 각 블록을 독립적으로 암호화한다.

그래서 평문 블록1 → 암호문 블록1, 평문 블록2 → 암호문 블록2 처럼 1:1 대응 관계가 생기고, 각 블록이 완전히 독립적으로 처리된다.

  • 특징
    • 가장 기밀성이 낮은 모드
    • 구조가 단순하고 병렬 처리 가능
    • 같은 평문 블록 → 같은 암호문 블록 → 패턴 노출 (보안 취약)

2. CBC(Cipher Block Chaining) 모드

1개의 암호문과 블록과 평문 블록의 내용을 뒤섞은 다음 암호화를 수행한다.

  • 특징
    • chain 형태로 이전의 블록을 사용한다.
      • 따라서 첫 블록에 오류가 발생하면 모든 블록에도 오류가 전파된다.
    • IV 를 필수로 사용한다. (암호화 이전에 사용)
      • 따라서 암호화시 ECB 처럼 동일한 평문을 암호화해도 결과 값이 매번 다르게 계산된다.
      • IV 는 공개한다.
        • 절대 IV 를 재사용해서는 안된다.
          • 재사용시 패턴 노출(ECB와 같은 문제)이 발생한다.
  • 만약 IV 를 암호화 후 적용한다면 어떤 특징이 생길까?
    • IV 랜덤성의 효과가 감소
      • 결국 키의 종속적이게 되고, 오히려 취약점이 늘어난다.
    • 가장 먼저 첫번째 블록의 패턴이 노출될 수 있다.
      • 동일한 키로 여러 메시지를 암호화할 때 첫 블록 패턴이 드러난다.

3. CTS() 모드

블록 암호(예: AES)를 블록 크기(예: 128bit)의 배수로 맞추기 위해 마지막 블록이 짧을 때 패딩을 쓰지 않고 처리하는 기법.

3.1 등장 배경

일반적인 블록 암호는 고정된 크기(예: 128bit)로 데이터를 암호화한다.
하지만 평문의 길이가 블록 크기의 배수가 아닐 경우, 마지막 블록이 짧게 남는다.
이때 대부분은 패딩(Padding)을 추가하지만, CTS는 패딩 없이 처리하여

암호문 길이를 평문과 동일하게 유지한다.

3.2 기본 동작 원리 (CBC-CTS 기준)

CTS는 CBC 모드와 거의 동일하게 동작하지만, 마지막 두 블록 처리 방식만 다르다.

  1. 평문을 블록 단위로 나눈다.
  2. 마지막 블록이 블록 크기보다 짧으면, 마지막 두 블록을 특별한 방식으로 재조합한다.
  3. 재조합 후 암호문을 생성하면, 암호문의 길이가 평문과 동일하다.
  4. 복호화 시에도 동일한 과정을 역순으로 수행하여 원래 평문을 복원한다.

3.3 활용 사례

  • 파일 암호화(파일 크기 유지가 필요한 경우)
  • 디스크 암호화
  • 프로토콜상 고정 길이 제약이 있는 데이터 전송

4. CFB 모드

CFB모드를 이용하면 어떤 블록 암호도 스트림 암호로 바꿀 수 있다. 스트림 암호의 경우 메시지의 길이가 블록의 정수배가 되도록 패딩을 할 필요가 없으며 실시간으로 사용할 수 있다. 따라서 한 문자를 전송하는 경우 문자 중심 스트림 암호를 이용하여 각 문자가 암호화되는 즉시 전송할 수 있다.

  • CFB 모드가 DES와 AES와 같은 블록 암호를 이용한 운영 모드지만, 그 결과는 스트림 암호와 같다.
  • 초기화 벡터는 의사난수 생성기의 seed 에 해당
  • CFB는 키 스트림이 암호문에 의존하는 비동기식 스트림 암호이다.

4.1 CBC vs CFB

5. OFB 모드(Output Feedback Mode)

OFB 모드는 평문 블록이 동일하면 암호문이 같아지는 ECB 모드의 단점/오류 전파가 발생하는 CBC 모드와 CFB 모드를 개선한 동작 모드이다.

  • OFB 모드 동작은 암호기의 출력과 평문을 EX-OR하여 암호문을 생성하고 있으므로
    • 오류 전파가 발생하지 않는다
  • 암호문 송신자와 수신자 사이에 동기를 조절해야 한다.
    • 즉 전송중인 암호문의 비트 손실이나 삽입 등에 유의해야 하는 방식이다.
  • OFB 모드에서도 IV를 사용한다

5.1 CFBvs OFB

6. CTR 모드

카운터값을 암호화해서 키스트림으로 사용하는 모드.
CTR 모드는 OFB 모드와 마찬가지로 이전 암호문 블록과 독립적인 키 스트림을 생성 하지만 피드백을 사용하지 않는다.

  • CTR은 IV + 카운터(counter) 를 암호화해서 키스트림을 만든다.
  • 하지만 IV(Nonce) 를 중복 사용하면 GCM처럼 완전히 취약해진다.
  • OFB보다 명확하게 병렬화가 가능

7. GCM 모드

CTR을 기반으로 “데이터가 중간에 변조되지 않았는지 확인하는 기능”이 추가된 모드

  • CTR처럼 암호화는 E(Key, IV+counter)로 이루어진다.
  • 동시에 암호문 전체를 Galois Field (GF(2¹²⁸)) 라는 수학 연산으로 해시해서 인증 태그(Authentication Tag) 를 만든다.
  • 이 태그는 “메시지가 바뀌지 않았는지” 검증할 때 사용된다.

0개의 댓글