알려진 평문 공격 (Known Plaintext Attack)
알려진 평문 공격(known plaintext attack, KPA)은 공격자가 평문의 일부와 그에 대응하는 암호문을 알고 있는 조건에서 이루어지는 모든 공격으로, 이를 이용해 키를 찾거나 다른 메시지를 해독하려 합니다. 공격자가 평문을 알 뿐 직접 고르지는 못한다는 점에서, 원하는 평문을 암호화해 볼 수 있는 선택 평문 공격과 구별됩니다. 알려진 평문 공격은 특히 덧셈 결합기를 사용하는 기존 스트림 암호에 위험한데, 알려진 평문을 암호문에서 “빼면” 혼돈 수열(키스트림)이 그대로 드러나기 때문입니다.
공격자는 평문을 어떻게 알게 되나요?
실제 통신에는 예측 가능한 부분이 많습니다. 정해진 머리말과 인사말, 파일 형식의 헤더, 매일 같은 형식으로 보내는 보고서 등이 그렇습니다. 제2차 세계 대전 중 연합군은 독일군 통신에 자주 나오는 단어(예: 날씨 보고를 뜻하는 “Wetterbericht”)를 크립(crib)이라 부르며 알려진 평문으로 삼아, 에니그마의 키 설정 후보를 좁혀 나갔습니다.
예시: XOR 스트림 암호
스트림 암호가 평문의 각 바이트에 키스트림 바이트를 XOR(⊕)해 암호문을 만든다고 하겠습니다. 암호문 C = P ⊕ K이므로 K = C ⊕ P가 성립합니다.
- 공격자는 평문의 첫 글자가 ‘S’(16진수 0x53, 2진수 01010011)라는 것을 알고 있습니다.
- 가로챈 암호문의 첫 바이트는 0x79(01111001)입니다.
- 두 값을 XOR하면 01111001 ⊕ 01010011 = 00101010, 즉 키스트림 바이트 0x2A가 나옵니다.
평문의 한 부분이 “SECRET”이라는 것을 알면 같은 방법으로 그 위치의 키스트림 6바이트를 얻습니다. 같은 키스트림이 다른 메시지에 다시 쓰였다면 그 메시지의 해당 부분도 곧바로 풀리고, 키스트림 생성기가 약하면 얻은 조각에서 내부 상태를 계산해 나머지 키스트림까지 알아낼 수 있습니다. 이 때문에 스트림 암호에서는 같은 키와 논스 조합을 재사용하지 않아야 합니다.
현대 암호와의 관계
AES 같은 현대 블록 암호는 공격자가 매우 많은 평문-암호문 쌍을 알아도 키를 찾을 수 없도록 설계되며, 알려진 평문 공격에 대한 저항성은 기본 요구 사항입니다. 이 조건에서 성립하는 공격이 발견되면 그 암호의 약점으로 간주됩니다. 예를 들어 마쓰이 미쓰루가 1993~1994년에 발표한 선형 암호 분석은 약 243개의 알려진 평문-암호문 쌍으로 DES의 키를 찾는 알려진 평문 공격입니다.
대응 방법
- 검증된 알고리즘 사용: 공개 분석을 거친 현대 암호를 쓰고, 덧셈 결합기만으로 이루어진 고전 방식은 피합니다.
- 키와 논스의 재사용 금지: 스트림 암호와 이를 쓰는 운용 모드에서는 메시지마다 새 논스를 씁니다.
- 키 관리: 키를 주기적으로 교체하고 안전하게 보관합니다.
이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.