최근 여러 PDF 구현체에서 암호화된 PDF 문서의 파일 키를 예측 가능한 방식으로 생성하는 심각한 보안 취약점이 발견되었습니다. 이 문제로 인해 공격자는 비밀번호 없이도 암호화된 문서를 복호화할 수 있게 되었습니다. 특히 MuPDF 1.28.5 이전 버전에서는 난수 생성기의 상태 중 9비트만이 실제 키에 영향을 미쳐, 512가지 가능한 스트림을 단 11밀리초 만에 모두 검사하여 키를 찾아낼 수 있었습니다.
Foxit PDF Reader 2026.1.3.36551 버전에서는 파일 키가 사실상 초 단위 타임스탬프에 의해 결정되며, Ryzen 9 7950X 프로세서 환경에서 1970년부터 현재까지의 모든 후보를 약 4.85초 만에 탐색할 수 있음이 확인되었습니다. OpenPDF 3.0.5와 iText 9.7.1 또한 시스템 시간과 JVM 여유 메모리를 기반으로 난수 스트림을 초기화하여, 솔트(salt) 값과 대조해 파일 키를 복구할 수 있는 취약점을 가지고 있었습니다. 이러한 문제들은 암호학적으로 안전하지 않은 난수원(cryptographically insecure random number generator)을 사용했기 때문에 발생했습니다. PDF 암호화는 비밀번호로 직접 문서를 암호화하는 것이 아니라, 무작위 32바이트 파일 키로 콘텐츠를 암호화하고 이 파일 키를 비밀번호로 보호하는 방식인데, 이 파일 키 자체가 예측 가능했던 것입니다.
이 취약점은 해당 공급업체에 공개되었고 MuPDF에서는 이미 수정되었습니다. 하지만 중요한 점은 이미 배포된 취약한 PDF 사본은 소프트웨어 업데이트만으로는 소급하여 보호할 수 없다는 것입니다. 즉, 취약한 버전의 소프트웨어로 암호화된 문서는 여전히 위험에 노출되어 있으며, 이를 해결하려면 문서를 다시 암호화해야 합니다. 이번 사례는 암호화 기술을 직접 구현할 때 발생하는 흔한 실수 중 하나인 '암호학적으로 안전한 난수 생성'의 중요성을 다시 한번 상기시켜 줍니다. 많은 개발자가 암호화의 복잡성을 간과하고 일반적인 난수 생성기를 사용함으로써 보안 결함을 초래하는 경우가 많습니다.
이번 사건은 PDF 문서의 보안 신뢰도에 큰 타격을 주며, 특히 민감한 정보를 PDF로 공유하는 기업이나 개인 사용자들에게 잠재적인 위험을 안겨줍니다. 사용자들은 자신이 사용하는 PDF 프로그램이 최신 버전인지 확인하고, 중요한 문서는 반드시 최신 보안 패치가 적용된 소프트웨어로 암호화해야 합니다. 또한, 이미 암호화된 문서라도 취약한 버전으로 생성되었다면 재암호화를 고려하는 것이 안전합니다. 이는 단순히 소프트웨어 업데이트를 넘어, 암호화된 문서의 라이프사이클 전반에 걸친 보안 의식을 요구합니다.