키 자동 키 (Key-Auto-Key, KAK)
키 자동 키(key-auto-key, KAK)는 이전 키 값을 이용해 다음 키를 만들어 내는 암호 논리입니다. 키스트림이 평문이나 암호문과 무관하게 생성기 자신의 이전 출력에서만 이어진다는 점이 특징입니다.
자세히 알아보기
스트림 방식의 암호는 키스트림을 평문과 결합(예: 비트 단위 XOR)해 암호문을 만듭니다. 이때 다음 키스트림을 무엇으로 만드느냐에 따라 자동 키 방식이 나뉩니다. 키 자동 키는 앞서 나온 키스트림, 즉 생성기 자신의 출력을 되먹여 다음 값을 만듭니다. 암호문 자동 키(ciphertext auto-key, CTAK)는 앞서 나온 암호문을, 평문 자동 키(text-autokey)는 앞서 나온 평문을 써서 다음 키스트림을 정합니다.
흔히 자동 키 암호라고 부르는 블레즈 드 비즈네르의 1586년 방식은 평문을 키에 이어 붙이므로 평문 자동 키에 해당하며 KAK와는 다릅니다. 평문이 키의 일부가 되어 키에 흔한 단어가 섞인다는 약점도 이 구조에서 나옵니다.
현대 블록 암호에서 KAK와 같은 구조는 출력 피드백(OFB) 모드입니다. 초기값(IV)을 블록 암호로 암호화해 첫 출력 블록을 얻고, 그 출력을 다시 암호화해 다음 블록을 얻는 식으로 키스트림을 이어 갑니다. 메시지가 키스트림에 영향을 주지 않으므로 키스트림을 미리 계산해 둘 수 있고, 전송 중 암호문의 한 비트가 뒤집혀도 오류는 평문의 같은 비트에만 머뭅니다. 반면 앞 암호문을 되먹이는 암호문 피드백(CFB) 모드는 CTAK와 같은 구조입니다.
동기화 방식도 다릅니다. CTAK는 수신 측이 받은 암호문으로 키스트림을 다시 만들기 때문에, 문자가 빠지거나 잘못 들어와도 올바른 암호문이 조금 이어지면 스스로 송신 측과 다시 맞춰집니다. KAK에는 이런 자기 동기화가 없습니다. 키스트림이 메시지와 무관하게 이어지므로 송수신 측이 같은 초기 상태와 위치를 유지해야 하고, 동기화가 깨지면 별도로 다시 맞춰야 합니다. 그래서 처음에는 CTAK 방식으로 동기화한 뒤 KAK로 전환하는 장비 설계도 있었습니다.
KAK의 안전성은 같은 초기 상태를 다시 쓰지 않는 데 달려 있습니다. 같은 키와 IV로 두 메시지를 암호화하면 같은 키스트림이 반복되어, 두 암호문을 XOR한 값에서 두 평문의 XOR이 드러납니다. 그래서 OFB 모드는 메시지마다 겹치지 않는 IV를 요구합니다. IV 자체는 비밀일 필요가 없어 암호문과 함께 보내도 되지만, 같은 키 아래에서 다시 쓰면 안 됩니다. 키스트림이 메시지와 무관하다는 KAK의 장점이 곧 이 재사용 위험의 원인이기도 합니다.
쉽게 말하면
두 사람이 같은 계산 규칙을 정해 두고, 매번 앞 줄의 숫자로 다음 줄 숫자를 계산해 공책에 적어 나가는 것과 비슷합니다. 무엇을 주고받든 숫자는 규칙대로 이어지므로 서로 몇 번째 줄인지만 맞으면 됩니다. 한 사람이 줄을 건너뛰면 그 뒤로는 계속 어긋나므로, 줄 번호를 다시 맞추는 절차가 따로 필요합니다.
예시
OFB 모드에서는 O₁ = EK(IV), O₂ = EK(O₁), O₃ = EK(O₂)처럼 출력 블록을 이어 만들고, 암호문은 Cᵢ = Pᵢ ⊕ Oᵢ입니다. 첫 평문 P₁이 바뀌어도 O₂와 O₃은 그대로입니다. CFB 모드라면 다음 키스트림이 앞 암호문 C₁에서 나오므로, P₁이 바뀌면 그 뒤 키스트림도 달라집니다.
이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.