대칭 키 암호화(Symmetric Key Cryptography)란?
대칭 키 암호화는 메시지를 암호화할 때와 복호화할 때 동일한 키를 사용하는 암호화 방식입니다. 이러한 데이터 인코딩 방식은 지난 수십 년간 정부 기관과 군대 간의 비밀 통신을 지원하는 데 널리 활용되어 왔습니다.
대칭 키 암호화는 용어에 따라 공유키(shared-key), 비밀키(secret-key), 단일키(single-key), 일원키(one-key), 그리고 개인키(private-key) 암호화라고도 불립니다. 이 암호화 방식에서는 송신자와 수신자 양쪽 모두가 동일한 키를 공유하고 있어야 한다는 점이 특징입니다. 따라서 이 방식의 가장 큰 난제는 바로 키 분배(Key Distribution), 즉 안전하게 키를 전달하는 문제입니다.
스트림 암호와 블록 암호
대칭 키 암호화 방식은 일반적으로 스트림 암호(Stream Cipher)와 블록 암호(Block Cipher) 두 가지 유형으로 분류됩니다.
스트림 암호(Stream Cipher)
스트림 암호는 한 번에 1비트(또는 1바이트, 컴퓨터 워드) 단위로 데이터를 처리하며, 피드백(feedback) 구조를 활용해 키가 지속적으로 변경되도록 설계되어 있습니다.
블록 암호(Block Cipher)
블록 암호는 이름 그대로 한 번에 하나의 데이터 블록을 암호화하며, 모든 블록에 동일한 키를 적용합니다. 일반적으로 블록 암호에서는 같은 평문 블록이 동일한 키로 암호화되면 항상 같은 암호문이 생성됩니다. 반면 스트림 암호에서는 같은 평문이라도 서로 다른 암호문으로 암호화될 수 있습니다.
블록 암호의 주요 운영 모드
블록 암호는 여러 가지 운영 모드(mode of operation) 중 하나로 동작할 수 있습니다.
1. ECB (Electronic Codebook, 전자 코드북) 모드
ECB는 가장 단순한 적용 방식으로, 공유된 키를 사용해 평문 블록을 암호문 블록으로 변환합니다. 동일한 평문 블록은 항상 동일한 암호문 블록을 생성합니다. 블록 암호에서 가장 널리 알려진 모드이지만, 무차별 대입(brute-force) 공격에 취약하다는 단점이 있습니다.
2. CBC (Cipher Block Chaining, 암호 블록 체인) 모드
CBC는 암호화 방식에 피드백 구조를 도입한 모드입니다. CBC에서는 평문을 암호화하기 전에 이전 암호문 블록과 XOR(배타적 논리합) 연산을 수행합니다. 이 덕분에 동일한 평문 블록이라도 서로 다른 암호문으로 암호화됩니다.
3. CFB (Cipher Feedback, 암호 피드백) 모드
CFB는 블록 암호를 자기 동기화(self-synchronizing) 스트림 암호 형태로 구현한 모드입니다. CFB 모드는 블록 크기보다 작은 단위로 데이터를 암호화할 수 있어, 대화형 터미널 입력 암호화와 같은 특정 응용 환경에서 유용합니다.
예를 들어 1바이트 CFB 모드를 사용하는 경우, 들어오는 각 문자는 블록과 동일한 크기의 시프트 레지스터(shift register)에 저장된 후 암호화되어 전송됩니다. 수신 측에서는 암호문을 복호화한 뒤 블록 내 불필요한 나머지 비트들을 폐기합니다.
4. OFB (Output Feedback, 출력 피드백) 모드
OFB는 개념적으로 동기(synchronous) 스트림 암호와 유사한 방식으로 블록 암호를 구현한 모드입니다. OFB는 평문 및 암호문 비트스트림과 독립적인 내부 피드백 구조를 사용하여, 동일한 평문 블록이 동일한 암호문 블록으로 변환되는 것을 방지합니다.