9비트 AES 키 사건

4 days ago 9

여러 PDF 구현체가 AES-256 파일 키를 전수 탐색 가능한 작은 상태 공간에서 생성해, 비밀번호 없이도 암호화 문서를 복호화할 수 있음 MuPDF 1.28.5 이전 버전은 실제 키에 영향을 주는 난수 상태가 9비트뿐이며, 가능한 512개 스트림을 탐색하는 데 비최적화 Python 구현으로 약 11밀리초가 걸림 Foxit PDF Reader 2026.1.3.36551은 사실상 초 단위 타임스탬프만으로 키가 결정되며, 테스트 환경에서 1970년부터 현재까지의 후보를 약 4.85초 만에 탐색함 OpenPDF 3.0.5와 iText 9.7.1도 시간과 JVM 여유 메모리로 초기화한 ARC4 스트림에 의존하며, 평문 솔트로 추정값을 검증한 뒤 인접 바이트에서 키를 복구할 수 있음 취약점은 공급업체에 공개됐고 MuPDF는 수정됐지만, 이미 배포된 PDF 사본을 소급해 보호할 수 없어 영향이 남을 수 있음 PDF 암호화와 파일 키의 역할 PDF 암호화는 문서의 문자열과 데이터 스트림을 보호하며, 명시적으로 제외하지 않는 한 메타데이터도 암호화함 비밀번호 보호 방식은 RC4에서 AES로 전환되고 비밀번호 해싱의 무차별 대입 저항성이 강화됐으며, 현재 리비전 6은 AES-256을 사용함 AES-256 방식에서는 비밀번호로 문서를 직접 암호화하지 않고, 무작위 32바이트 파일 키로 콘텐츠를 암호화함 비밀번호와 솔트를 해싱해 별도의 키를 유도하고, 이 키로 파일 키를 암호화함 리비전 6은 해싱을 의도적으로 느리게 수행하지만, 이전 AES-256 방식인 리비전 5는 그렇지 않음 열람용 사용자 비밀번호와 권한 변경용 소유자 비밀번호는 같은 파일 키를 잠금 해제함 권한 제한은 리더의 구현에 달려 있으며, 열람용 비밀번호만 있어도 제한 없는 사본을 만들 수 있음 조사한 구현체들은 파일 키를 위한 난수를 안전하지 않게 생성해 비밀번호 없는 복호화를 허용함 MuPDF: 48비트 생성기에서 9비트만 키에 반영됨 MuPDF 1.28.5 이전 버전은 drand48 계열 구현을 사용하며, 현재 Unix 시간을 초 단위로 읽어 난수 생성기를 한 번 초기화함 생성기는 48비트 선형 합동 생성기(LCG) 이며, 상태를 s[n+1] = (0x5deece66d * s[n] + 0xb) mod 2^48로 갱신함 fz_srand48()은 상태를 16비트 워드 3개로 구성함 하위 16비트는 상수 0x330e, 비트 16~47은 32비트 타임스탬프로 채움 f...

Read Entire Article




피플앤툴즈 네트워크
🛍 샵