rein's world

TIL: qpdf로 pdf 파일에 걸린 암호 해제하기

금융 기관이나 서비스 업체에서 보내는 메일들에 대해서 가능한 경우엔 항상 “암호화없이 전송"을 선택하고 있는데, 걔중에는 그런 옵션을 제공하지 않는 곳이 있다. 대부분의 경우 – 사실 내가 아는 모든 경우 – 생년월일(6자리 혹은 8자리)을 암호로 쓰는데 이건 유의미한보안을 제공하지 않기 때문이다.1

예를 들어서 KT에서 보내는 고지서에는 6자리 생년월일로 되어있고, 확인해보면 아래의 Encrypted 항목처럼 암호화 되어있다.

pdfinfo -upw ${생년월일} \
    '2024년 7월 KT email 명세서(문서열기암호:주민번호 앞 6자리).pdf'
Producer:        iText® 5.5.6 ©2000-2015 iText Group NV (KT; licensed version) (KT; licensed version) (KT; licensed version)
CreationDate:    Thu Jul 11 10:15:35 2024 KST
ModDate:         Thu Jul 11 10:15:35 2024 KST
Custom Metadata: no
Metadata Stream: no
Tagged:          no
UserProperties:  no
Suspects:        no
Form:            none
JavaScript:      no
Pages:           3
Encrypted:       yes (print:yes copy:yes change:no addNotes:no algorithm:RC4)
Page size:       595 x 842 pts (A4)
Page rot:        0
File size:       88281 bytes
Optimized:       no
PDF version:     1.4

이런 pdf파일을 qpdf 명령을 써서 복호화한 상태로 저장해보자.

qpdf --decrypt --replace-input --password=${생년월일} \
    "2024년 7월 KT email 명세서(문서열기암호:주민번호 앞 6자리).pdf"

다시 확인해보면 아래처럼 암호가 걸려있지 않다.

pdfinfo '2024년 7월 KT email 명세서(문서열기암호:주민번호 앞 6자리).pdf'
Producer:        iText® 5.5.6 ©2000-2015 iText Group NV (KT; licensed version) (KT; licensed version) (KT; licensed version)
Producer:        iText® 5.5.6 ©2000-2015 iText Group NV (KT; licensed version) (KT; licensed version) (KT; licensed version)
CreationDate:    Thu Jul 11 10:15:35 2024 KST
ModDate:         Thu Jul 11 10:15:35 2024 KST
Custom Metadata: no
Metadata Stream: no
Tagged:          no
UserProperties:  no
Suspects:        no
Form:            none
JavaScript:      no
Pages:           3
Encrypted:       no
Page size:       595 x 842 pts (A4)
Page rot:        0
File size:       89815 bytes
Optimized:       no
PDF version:     1.4

  1. “생년월일 기반 비밀번호를 가지는 보안명세서에 대한 전수조사공격”에 따르면, 랩탑용 CPU인 i5-6200U에서 0.7초 이내에 brute force 공격이 끝난다. Thermal allowance가 더 크고 컴퓨팅 파워가 더 강력한 환경에선 이 시간은 더 줄어들어 사실상 0이라 제공하는 보안 수준이 없다. ↩︎