스트림 암호의 기본 개념
스트림 암호는 의사난수(pseudorandom) 키 스트림을 평문 비트와 결합해 데이터를 암호화하는 방식입니다. 이 키 스트림은 평문의 각 이진수 비트에 하나씩 순서대로 적용되며, 하나의 키당 사실상 무한한 길이의 의사난수 암호 숫자열을 생성할 수 있습니다.
스트림 암호는 대칭키 암호화(symmetric key cryptography)에 사용되는 기술로, 암호화와 복호화 과정에서 동일한 키가 활용됩니다. 임의 길이의 평문을 한 번에 한 비트씩 처리하며, 각 비트의 암호화 결과는 암호의 현재 상태(state)에 따라 달라지기 때문에 '상태 암호(state cipher)'라고도 불립니다.
보안을 위한 핵심 조건
스트림 암호가 안전하게 유지되려면 두 가지 조건이 반드시 충족되어야 합니다.
- 생성된 의사난수 키 스트림은 예측 불가능해야 합니다.
- 동일한 키 스트림은 절대 두 번 이상 재사용해서는 안 됩니다.
의사난수 키 스트림은 여러 난수 시드(seed) 값을 기반으로 생성되며, 이 과정에는 디지털 시프트 레지스터(digital shift register) 같은 하드웨어적·알고리즘적 장치가 활용됩니다. 소프트웨어 환경에서 널리 쓰이는 대표적인 스트림 암호로는 RC4가 있으며, 한때 SSL/TLS 및 WEP 등 다양한 프로토콜에서 활용되었습니다.
스트림 암호의 두 가지 유형
1. 자기 동기화(Self-Synchronizing) 스트림 암호
자기 동기화 스트림 암호는 키 스트림의 각 비트를 직전 n비트의 함수로 계산합니다. 복호화 측이 현재 위치가 n비트 키 스트림 내 어디인지만 알면 암호화 과정과 자동으로 동기를 맞출 수 있기 때문에 '자기 동기화'라는 이름이 붙었습니다.
다만 이 방식에는 오류 전파(error propagation) 문제가 있습니다. 전송 중 한 비트가 손상되면 수신 측에서 최대 n비트까지 연달아 오류가 발생할 수 있습니다.
2. 동기식(Synchronous) 스트림 암호
동기식 스트림 암호는 메시지 스트림과 독립적으로 키 스트림을 생성하며, 송신자와 수신자가 동일한 키 스트림 생성 함수를 공유하는 방식입니다. 전송 오류가 전파되지 않는다는 장점이 있지만, 구조적으로 주기적(periodic) 특성을 지니므로 키 스트림이 언젠가 반복될 가능성이라는 고유한 한계를 안고 있습니다.
KG 모드와 SCM 모드의 상호 변환
스트림 암호의 기본 유형들은 서로 다른 운용 모드(mode of operation)로 해석될 수 있으며, 단순하고 일반적인 구조 변환을 통해 서로 전환이 가능합니다. 마찬가지로 스트림 암호로부터 파생된 여러 암호 프리미티브(cryptographic primitive) 역시 스트림 암호의 서비스 모드(mode of service)로 정의할 수 있습니다.
예를 들어 KG(Key Generator) 모드로 동작하는 스트림 암호는 다음 상태(next-state) 함수가 현재 평문 비트에도 의존하도록 변경함으로써 SCM(Self-Synchronizing Cipher Machine) 모드로 전환할 수 있습니다. 이때 가장 중요한 설계 원칙은 평문 단일 비트의 변화가 이후 키 스트림(암호문)에 무작위에 가까운 광범위한 변화를 일으켜야 한다는 점입니다. 이를 '순방향 전파 효과(forward propagation effect)'라고 부릅니다.
KG 모드 역시 동일한 성질을 만족해야 하며, 다만 그 대상이 초기 상태(initial state) 비트의 변화라는 점만 다릅니다. 따라서 이러한 적응은 평문 비트를 내부 상태 비트 중 순방향 전파 효과가 큰 비트들에 삽입하는 방식으로 비교적 간단히 구현할 수 있습니다.
마무리
스트림 암호는 빠른 처리 속도와 낮은 연산 부담 덕분에 실시간 통신, 무선 네트워크 등 다양한 정보 보안 분야에서 활용되어 왔습니다. 다만 키 재사용 금지, 예측 불가능한 키 스트림 확보, 오류 전파 관리 등 운영상의 주의점을 충분히 이해하고 적용하는 것이 안전한 암호화의 핵심입니다.