블록 암호와 스트림 암호의 구조·운영 모드·선택 기준

블록 암호와 스트림 암호의 처리 구조, 운영 모드, 대표 알고리즘, 성능과 보안 특성, 적용 환경별 선택 기준을 정리한다.

2026-08-14 · 최초 발행 2025-05-23

고정 크기 블록을 다루는 암호 방식

블록 암호는 평문을 일정한 크기의 블록으로 나눈 뒤, 각 블록에 같은 키와 알고리즘을 적용해 암호화한다. 일반적으로 64비트, 128비트, 256비트 등의 블록 크기를 사용한다.

동일한 평문 블록을 동일한 키로 처리하면 같은 암호문이 나오는 결정적 성질을 가진다. 설계에서는 한 비트의 변화가 전체 암호문에 영향을 주도록 확산(Diffusion)과 혼돈(Confusion)을 반영한다. 마지막 데이터가 블록 크기에 맞지 않으면 패딩도 필요하다.

블록 암호의 실제 특성은 어떤 운영 모드를 선택하는지에 따라 달라진다.

ECB는 블록을 독립적으로 처리한다

ECB(Electronic CodeBook)는 각 블록을 별개로 암호화하는 가장 단순한 방식이다. 같은 평문 블록은 같은 암호문 블록이 되므로 데이터 패턴이 노출될 수 있으며, 보안성은 낮다.

평문 블록1암호화암호문 블록1평문 블록2암호화암호문 블록2평문 블록3암호화암호문 블록3암호화

CBC는 앞선 암호문 블록을 연결한다

CBC(Cipher Block Chaining)는 현재 평문 블록을 이전 암호문 블록과 XOR 연산한 뒤 암호화한다. 첫 블록에는 초기화 벡터(IV)가 필요하며, 암호화 과정은 병렬 처리할 수 없다.

초기화 벡터XOR평문 블록1암호화암호문 블록1XOR평문 블록2암호화암호문 블록2암호화

CFB(Cipher FeedBack)는 이전 암호문을 암호화한 결과와 평문을 XOR 연산하므로 스트림 암호처럼 사용할 수 있다. OFB(Output FeedBack)는 키 스트림을 만들어 평문과 XOR 연산하며 전송 오류에 강하다. CTR(Counter)는 카운터 값을 암호화해 키 스트림을 만들고 병렬 처리가 가능하다.

대표 블록 암호의 특성

DES(Data Encryption Standard)는 1977년 미국 표준으로 채택됐으며, 56비트 키와 64비트 블록을 사용한다. 현재는 키 길이가 짧아 안전하지 않다.

3DES(Triple DES)는 DES를 3번 적용해 보안성을 강화한 방식이다. 유효 키 길이는 112비트 또는 168비트이고, DES보다 약 3배 느리다.

AES(Advanced Encryption Standard)는 2001년 NIST가 선정한 표준 암호 알고리즘이다. 128비트 블록과 128/192/256비트 키 길이를 사용하며, 현재 가장 널리 사용되는 대칭키 암호 알고리즘이다.

Blowfish와 Twofish는 Bruce Schneier가 설계했다. 가변 길이 키는 최대 448비트이며, Blowfish는 64비트 블록, Twofish는 128비트 블록을 사용한다.

키 스트림으로 순차 처리하는 암호 방식

스트림 암호는 데이터를 비트 또는 바이트 단위로 순차 암호화한다. 키 스트림 생성기가 의사 난수 시퀀스인 키 스트림을 만들고, 이를 평문과 비트 단위로 XOR 연산한다.

암호문 = 평문 ⊕ 키 스트림

비밀 스트림 생성기 스트림평문XOR암호문

일반적으로 블록 암호보다 빠르고 메모리 요구량이 적어 경량 환경에 맞는다. 한 비트의 오류가 다른 비트로 전파되지 않으며, 비트와 바이트 단위 처리 특성은 실시간 통신에도 적합하다.

동기식 스트림 암호는 평문과 암호문에서 독립적으로 키 스트림을 생성한다. 따라서 송신자와 수신자 사이의 동기화가 필요하지만 비트 오류는 전파되지 않는다.

자기 동기식, 즉 비동기식 스트림 암호는 이전 암호문에 의존해 키 스트림을 생성한다. 제한된 길이의 암호문만으로 자동 동기화할 수 있고, 오류 전파도 제한된다.

대표 스트림 암호의 특성

RC4(Rivest Cipher 4)는 1987년 Ron Rivest가 설계했으며, 1~256바이트의 가변 키 길이를 지원한다. 구현이 단순해 SSL/TLS와 WEP 등에서 사용됐지만, 취약점이 발견돼 현재는 사용을 권장하지 않는다.

A5/1과 A5/2는 GSM 이동통신에서 사용됐고 64비트 키 길이를 사용한다. 보안 취약점이 존재한다.

ChaCha20은 Daniel J. Bernstein이 설계한 현대적 스트림 암호다. 256비트 키와 96비트 논스를 사용하며 Google Chrome, OpenSSH 등에서 사용된다.

SNOW 3G는 3G 통신 보안을 위한 알고리즘으로, 128비트 키와 128비트 초기화 벡터를 사용한다.

처리 방식이 보안과 성능에 미치는 차이

특성 블록 암호 스트림 암호
처리 속도 상대적으로 느림 일반적으로 빠름
메모리 사용량 높음 낮음
병렬 처리 운영 모드에 따라 가능 대체로 어려움
하드웨어 구현 복잡함 단순함
암호 분석 내성 일반적으로 높음 키 스트림 생성 방식에 의존
오류 전파 운영 모드에 따라 다름 제한적 또는 없음
재사용 안전성 운영 모드에 따라 다름 동일 키 스트림 재사용 시 취약
무결성 보장 운영 모드에 따라 가능 추가 메커니즘 필요

스트림 암호에서는 동일한 키 스트림의 재사용이 취약점으로 이어질 수 있다. 블록 암호는 선택한 운영 모드에 따라 오류 전파, 병렬 처리, 무결성 보장 여부가 달라진다.

시스템 환경에서의 활용

금융 데이터 보호에서는 은행 거래와 신용카드 정보 암호화에 AES, 3DES를 사용하고 데이터베이스 암호화에는 CBC 모드를 많이 활용한다. 디스크 암호화에서는 BitLocker와 FileVault 등이 AES를 사용하며, 디스크 섹터 암호화에는 XTS 모드를 사용한다. IPsec VPN에서는 AES-CBC와 AES-GCM을 사용하고 기업 내부 통신 보안에도 활용한다.

무선 통신에서는 Wi-Fi 보안에 RC4(구형), ChaCha20-Poly1305(신형)를 사용하며 블루투스에는 E0 스트림 암호가 사용된다. 제한된 리소스의 IoT 기기에서는 경량 스트림 암호를 사용하고 MQTT 프로토콜에서 ChaCha20을 활용한다. 음성 통화 암호화와 WebRTC의 SRTP 프로토콜도 스트림 암호가 적용되는 영역이다.

선택 시 확인할 조건

암호 방식을 정할 때는 필요한 보안 수준과 예상 위협 모델을 먼저 평가해야 한다. 장기 보안이 필요하면 충분한 키 길이를 가진 블록 암호를 선택한다.

처리할 데이터 양과 속도 요구사항도 판단 기준이다. 저전력 또는 제한된 리소스 환경에서는 스트림 암호를 고려할 수 있다. 하드웨어 가속을 활용할 수 있는지, AES-NI와 같은 지원이 있는지도 구현 환경과 함께 확인한다.

산업 표준과 규제 요구사항도 고려 대상이다. NIST, FIPS, ISO 등의 권장 알고리즘을 참조하고, 전송 오류가 많은 환경에서는 오류 전파가 적은 알고리즘을 선택한다.

암호화 방식이 향하는 방향

양자 컴퓨팅에 대비한 새로운 암호화 알고리즘 연구가 진행되고 있으며, 블록 암호와 스트림 암호 모두 키 길이가 증가하는 추세다. IoT 확산은 저전력·저리소스 암호 알고리즘의 수요를 높이고 있고, NIST 경량 암호화 표준화도 진행 중이다.

AES-GCM과 ChaCha20-Poly1305처럼 암호화와 무결성 보장을 동시에 제공하는 인증 암호화 방식도 늘고 있다. 암호화된 상태에서 연산할 수 있는 동형 암호화 기술은 프라이버시 보존 계산에 활용된다.

블록 암호는 운영 모드를 통해 유연하게 적용할 수 있고, 스트림 암호는 속도와 효율성을 제공한다. 어느 한 방식을 일반화해 선택하기보다 보안 요구사항, 성능 제약, 구현 환경을 함께 놓고 판단해야 한다.

블록 암호스트림 암호대칭키 암호AESChaCha20정보보안