블록 암호 (Block Cipher)

핵심 인사이트 (3줄 요약)

  1. 본질: 블록 암호는 고정된 크기의 블록 (예: AES는 128비트)을 단위로 암호화를 수행한다. 동일하지 않은 입력을 동일하게 출력하지 않도록 다양한 모드로 운용되며, 실용적인 대칭키 암호의 대표적 유형이다.
  2. 가치: AES (Advanced Encryption Standard)와 같은 블록 암호는高速で実装が简单이며、 NIST 표준으로全세계에서 사용된다. 파일 암호화, 디스크 암호화, 네트워크 프로토콜 등几乎すべての领域で使用される。
  3. 운용 모드: ECB, CBC, CTR, GCM 등 다양한 운용 모드가 있어, 각각 다른 보안 특성과 사용 시나리오를 갖는다. ECB 모드는 패턴 노출 문제가 있어 사용하지 않아야 하며, 인증까지 제공하는 GCM 모드가 권장된다.

Ⅰ. 개요 및 필요성

개념 정의

**블록 암호 (Block Cipher)**는 다음과 같이 정의된다:

  • 고정 크기 입력: 고정된 크기의 평문 블록을 입력으로 받음
  • 대칭키 사용: 암호화와 복호화에 동일한 키 사용
  • 확정적 변환: 동일한 평문과 키는 항상 동일한 암호문 출력 (블록 자체만)
  • 블록 크기: DES는 64비트, AES는 128비트

기본 동작:

암호화: C = E_K(P)    (P: 평문 블록, C: 암호문 블록, K: 키)
복호화: P = D_K(C)    (D_K는 E_K의 역함수)

필요성

블록 암호가 필요한 이유:

  1. 데이터 보호:固定大小로 나누어 처리하므로 대용량 데이터 암호화에 적합
  2. 표준화: NIST 표준으로 검증되고 widely 채택
  3. 효율성: 하드웨어/소프트웨어 모두에서高速実装可能
  4. 안전성: 수십 년간 검증되어 안전한 것으로 간주

비유

블록 암호는 일정한 크기의 쿠키 틀과 같다. 반죽 (평문)을 정해진 크기의 틀에 넣어 구우면 일정한 모양의 쿠키 (암호문)가 나온다. 각 쿠키는 틀의 모양 (키)에 따라 다르게成型되고,同一の反物하면同一のクッキーができる。しかし、パターンが見つかるため、实战では異なる位置に配置して焼く(CBCモード)とmixする。

📢 비유: 블록 암호는 " thérapeut 성냥갑"과 같다. 성냥을 꺼내 쓸 때 한 개씩 꺼내는 것이 아니라, 항상 같은 크기의 조각으로 뚫어져 있다. 뚫는 모양 (키)이 같으면 같은 위치에 구멍이 나는데, 이것만으로는 아직 뚫은 종이 위에 무언가 알아볼 수 있는 패턴이 보일 수 있어서 실제로는 다른 위치에 겹쳐 사용한다.

등장 배경

블록 암호의 발전 역사:

  • 1970년대: DES (Data Encryption Standard)가 미국 표준으로 채택 (64비트 블록, 56비트 키)
  • 1990년대: DES의 짧은 키와 64비트 블록의弱点 발견, 3DES 개발
  • 2001년: AES (Advanced Encryption Standard)가 새로운 미국 표준으로確定 (128비트 블록, 128/192/256비트 키)
  • 현재: AES가 全세계에서 가장 널리使用되는 블록 암호
  ┌────────────────────────────────────────────────────────────────────┐
  │                    블록 암호의 기본 구조                              │
  ├────────────────────────────────────────────────────────────────────┤
  │
  │  【블록 암호示意】                                                    │
  │  ───────────────────────────────────────────────────────────────    │
  │                                                                      │
  │       평문 블록 (128비트)                                            │
  │              │                                                      │
  │              ▼                                                      │
  │       ┌─────────────────┐                                          │
  │       │   라운드 함수    │  × N회 반복                              │
  │       │  (Round Function) │                                          │
  │       └─────────────────┘                                          │
  │              │                                                      │
  │              ▼                                                      │
  │       암호문 블록 (128비트)                                          │
  │                                                                      │
  │  【AES 구조】                                                        │
  │  ───────────────────────────────────────────────────────────────    │
  │                                                                      │
  │       SubBytes → ShiftRows → MixColumns → AddRoundKey               │
  │           │           │            │              │                │
  │           └───────────┴────────────┘              │                │
  │                         ↑                          │                │
  │                         └──────────────────────────┘                │
  │                              (逆関数)                                │
  │                                                                      │
  │  【키 스케줄】                                                       │
  │  ───────────────────────────────────────────────────────────────    │
  │                                                                      │
  │       원본 키 (128/192/256비트)                                       │
  │              │                                                      │
  │              ▼                                                      │
  │       ┌─────────────────┐                                          │
  │       │  키 스케줄 함수  │  (라운드 키 생성)                           │
  │       └─────────────────┘                                          │
  │              │                                                      │
  │              ▼                                                      │
  │       라운드 키 1, 라운드 키 2, ..., 라운드 키 N+1                    │
  │                                                                      │
  └────────────────────────────────────────────────────────────────────┘

[다이어그램 해설] AES의加密プロセスは複数回の 라운드로 구성된다. 각 라운드는 SubBytes (바이트 대체), ShiftRows (행 이동), MixColumns (열混合), AddRoundKey (키 XOR)의 4단계로 구성되며, 마지막 라운드에서는 MixColumns가 생략된다. 키 스케줄 함수는 원본 키에서 각 라운드마다 다른 라운드 키를 생성한다. 이 구조는 SPA (Simple Power Analysis) 등의 부채널 공격을 방지하기 위해設計되었다。


Ⅱ. 아키텍처 및 핵심 원리

주요 블록 암호 알고리즘

1. AES (Advanced Encryption Standard)

  • 블록 크기: 128비트 (고정)
  • 키 길이: 128, 192, 256비트
  • 라운드 수: 10, 12, 14 (키 길이에 따라)
  • 구조: SPN (Substitution-Permutation Network)
  • 표준: NIST, 2001년 표준화

2. DES (Data Encryption Standard)

  • 블록 크기: 64비트
  • 키 길이: 56비트 (64비트 중 8비트는 패리티)
  • 라운드 수: 16
  • 상태: 안전하지 않아 사용 중지 (3DES로 대체)

3. 3DES (Triple DES)

  • 블록 크기: 64비트
  • 키 길이: 168비트 (3×56비트)
  • 구조: DES를 3번 적용 (EDE 모드)
  • 상태: 느리고 安全でない担心、使用 권장하지 않음

블록 암호 운용 모드

모드이름특징용도
ECBElectronic Codebook같은 평문 = 같은 암호문비권장
CBCCipher Block Chaining이전 블록과 XOR파일 암호화
CFBCipher Feedback스트림처럼 사용 가능레지스터
OFBOutput Feedback출력 기반古いシステム
CTRCounter카운터 기반 병렬 처리高速通信
GCMGalois/Counter Mode인증 포함TLS 1.3

운용 모드 상세

ECB 모드의 문제점:

평문:  ["hello", "hello", "world"]
ECB:   [E(k,"hello"), E(k,"hello"), E(k,"world")]

→ 두 번째 "hello"가 동일하게 암호화 → 패턴 노출!

CBC 모드의 해결책:

평문:  ["hello", "hello", "world"]
CBC:   IV = random()
       C[0] = E(k, P[0] ⊕ IV)
       C[1] = E(k, P[1] ⊕ C[0])  ← 이전 암호문과 XOR
       C[2] = E(k, P[2] ⊕ C[1])

📢 아날로그: 블록 암호 모드는 "쿠키를 굽는 방법"과 같다. ECB는 동일한 틀에 동일한 위치로 구워서 패턴이 드러나고, CBC는 각 쿠키를 약간 다른 위치에 놓거나 다른 맛으로 만들어서 구울 때마다 다른 결과를 만든다. GCM은 여기에 다시 쿠키가 진짜인지 검증까지 가능한 표시까지inator 달아서 완전하게 만든다.


Ⅲ. 융합 비교 및 다각도 분석

운용 모드 비교

모드병렬 처리오류 전파인증권장 용도
ECB가능없음없음비권장
CBC불가능1블록없음레거시
CTR가능없음없음高速通信
GCM가능없음있음TLS 1.3
CCM불가능1블록있음저전력

블록 크기의 중요성

블록 크기가 짧으면Birthday 공격에 노출된다:

  • 64비트 블록 (DES, 3DES): 2^32블록 후 충돌 가능성 증가
  • 128비트 블록 (AES): 2^64블록까지 안전
  • ** Birthday Bound**: n비트 블록에서 2^(n/2)개의 블록 후 충돌 가능

키 길이와 안전성

키 길이브루트 포스 연산 횟수비고
56비트 (DES)2^56 ≈ 7×10^161998년 EFF machine로 수일 내 break
128비트 (AES-128)2^128 ≈ 3×10^38目前는 안전
256비트 (AES-256)2^256 ≈ 1×10^77양자 컴퓨터 대비

Ⅳ. 실무 적용 및 기술사적 판단

권장 구성

일반적인 데이터 보호:

AES-256-GCM: AES 256비트 키 + GCM 운용 모드
- 인증된 암호화로 무결성 + 기밀성 동시 제공
- NIST 권장 구성

성능이 중요한 경우:

AES-128-GCM: AES 128비트 키 + GCM 운용 모드
- 여전히安全으로 인정
- AES-NI 하드웨어 가속 시 매우高速

안티패턴

  • ECB 모드 사용: 패턴 노출로 인한 정보 유출
  • CBC 모드 단독 사용: 무결성 보호 없어 변조 가능
  • DES 사용: 키 길이가 너무 짧아 현재是不安全
  • 비밀번호를 키로 직접 사용: PBKDF2 등으로 파생 필요

파일 암호화 실용

올바른 구성:

1. 키 파일 (256비트) 생성
2. IV (96비트) 무작위 생성
3. AES-256-GCM으로 암호화 (IV + 인증 태그 포함)
4. 저장: IV || 인증 태그 || 암호문

Ⅴ. 기대효과 및 결론

AES vslegacy 암호

구분DES3DESAES
블록 크기64비트64비트128비트
키 길이56비트168비트128/192/256비트
라운드 수1648 (3×16)10/12/14
安全性不安全安全
性能普通低速高速
하드웨어 지원限られている限られているAES-NI

미래 전망

  • 양자 컴퓨터 대비: Grover 알고리즘으로 AES-128의 安全性が64비트 수준으로 감소하므로, AES-256 사용 권장
  • AEAD 모드 권장: GCM, ChaCha20-Poly1305 등 인증된 모드 필수
  • NIST 후量子 암호: AES는 양자 컴퓨터의 위협에도 비교적強い (Grover로 강도 半감)

📢 정리: 블록 암호는 현대 대칭키 암호의 핵심이다. AES는 현재 가장 널리 사용되는 표준 블록 암호로, 다양한 운용 모드와 결합하여 데이터 보호에 사용된다. ECB 모드는 절대 사용하지 말고, 인증을 제공하는 GCM 모드를 권장한다. 양자 컴퓨터의 위협에 대비하여 AES-256 사용이 권장된다.


📌 관련 개념 맵 (Knowledge Graph)

개념 명칭관계 및 시너지 설명
AES현재 표준 블록 암호로, 128비트 블록에 128/192/256비트 키 사용
운용 모드ECB, CBC, CTR, GCM 등 블록 암호를 운용하는 방식으로 각각 다른 특성을 갖는다
GCM인증된 암호화 모드로, AES와 결합하여 기밀성과 무결성을 동시에 제공한다
SPN 구조AES의 내부 구조로, Substitution과 Permutation을 반복한다
키 스케줄원본 키에서 각 라운드마다 다른 라운드 키를 生成する
양자 컴퓨터 위협Grover 알고리즘으로 대칭키 암호의 강도가 半감되지만 AES-256은 여전히 kuat하다

👶 어린이를 위한 3줄 비유 설명

  1. 블록 암호는**"정해진 크기의 쿠키 틀"**과 같아. 반죽을 넣으면 항상 같은 크기의 쿠키가 나오는데, 틀의 모양 (키)이 다르면 쿠키 모양도 달라진다. 그래서 알록달록한 반죽을 넣어도 틀 모양이 다르면 다른 결과가 나온다.
  2. 하지만 ECB 모드로 구우면**"같은 위치에 같은 맛 쿠키가 반복"**되어서 패턴이 보여버린다. 마치 "초콜릿칩 쿠키만 따로, 오트밀 쿠키만 따로" 구우면 어떤 위치에 무엇이 있을지 예측할 수 있는 것처럼.
  3. 그래서 실제 컴퓨터에서는**"CBC나 GCM 모드"**를 사용하여, 각 쿠키를 다른 위치에서 다른 맛으로 겹쳐서 구워서 패턴이完全に見えないようにする。그리고 GCM은 여기에 다시 "이 쿠키가 진짜 맞는지 확인하는 표시"까지 만들어서 정말完善的인 방법이야!