암호로 보호된 PDF와 그 한계
PDF에 암호가 걸려 있어서 도구가 편집할 수 없다고 합니다. 왜 그렇고, 어떤 방법이 있나요?
암호는 두 종류입니다
ISO 32000에 정의된 PDF 암호화는 사용자 암호와 소유자 암호를 구분합니다. 흔히 열기 암호라고 부르는 사용자 암호는 문서를 복호화하는 데 반드시 필요합니다. 이것이 없으면 콘텐츠 스트림은 암호문이고 어떤 소프트웨어도 단 한 쪽조차 읽지 못합니다. 소유자 암호는 다릅니다. 이 암호가 없어도 문서는 열리지만, 암호화 딕셔너리에 담긴 권한 플래그가 규격을 따르는 뷰어에게 무엇을 허용하지 말아야 하는지를 지정합니다. 인쇄, 텍스트 복사, 파일 수정 같은 것들입니다.
혼란의 대부분은 이 구분에서 비롯됩니다. 즉시 열리는데도 문단 하나 복사하지 못하게 하는 문서는 잠금이 풀린 것이 아닙니다. 빈 사용자 암호와 일련의 제한이 걸린 채로 암호화되어 있는 것입니다.
암호화가 실제로 보호하는 것
| 암호 | 여는 데 필요한가 | 보호하는 대상 | 실제 강도 |
|---|---|---|---|
| 사용자(열기) 암호 | 필요함 | 내용 자체. 스트림과 문자열이 암호화됨 | 사용한 암호 알고리즘과 정한 암호 문구만큼 |
| 소유자(권한) 암호 | 필요 없음 | 암호학적으로는 아무것도. 뷰어가 지켜 주기를 요청하는 플래그를 설정할 뿐 | 권고 수준에 불과함 |
권한 플래그는 예의 바른 소프트웨어에 보내는 요청이지 강제 수단이 아닙니다. 문서가 열리는 순간 바이트는 이미 복호화되므로, 플래그를 무시하기로 한 프로그램은 얼마든지 그렇게 할 수 있습니다. 이를 의사 표시로 여기십시오. 문서를 어떻게 써야 하는지 알리는 데는 쓸모가 있지만, 보안 통제 수단으로는 쓸모가 없습니다.
편집 도구가 이 파일을 거부하는 이유
PDF의 구조를 바꾸려면, 즉 합치거나 나누거나 페이지를 회전하거나 미사용 객체를 버리려면 라이브러리가 객체 그래프를 파싱해야 합니다. 암호화된 문서에서 그 그래프를 이루는 문자열과 스트림은 올바른 키가 유도되기 전까지 암호문입니다. 파싱할 대상 자체가 없습니다. 이는 도구가 정한 방침이 아닙니다. 그 시점에는 문서라고 할 것이 실제로 존재하지 않습니다.
그래서 FileSlimmer의 구조 관련 PDF 도구는 암호화된 문서에 대해 비활성화되고 그 사실을 알립니다. 작업 도중에 실패해 손상된 결과물을 남기는 대신에 말이지요. 덜 편리하긴 해도 이것이 올바른 동작입니다.
입력한 암호에 벌어지는 일
암호를 입력받는 경로가 제공되는 경우, 암호는 작업이 진행되는 동안 이 브라우저 탭의 메모리 안에서 복호화 키를 유도하는 데만 쓰입니다. 로컬 저장소에도, Service Worker 캐시에도 기록되지 않고, URL에 실리지도 않으며, 어디로도 전송되지 않습니다. 애초에 이 애플리케이션에는 암호를 보낼 서버가 없습니다. 탭을 닫으면 암호는 사라집니다.
그럼에도 암호를 어디에 입력하는지는 신중하게 판단할 가치가 있습니다. 브라우저 확장 프로그램은 페이지의 내용을 읽을 수 있고, 이는 이 사이트를 포함한 모든 웹사이트에 해당합니다. 그 점이 문제가 될 만큼 민감한 문서라면, 대신 신뢰하는 오프라인 데스크톱 소프트웨어에서 잠금을 해제하십시오.
이 도구가 하지 않는 일
- 가지고 있지 않은 암호를 복구하거나 무차별 대입으로 알아내려 시도하지 않습니다.
- 권리가 없는 문서의 권한 플래그를 우회하려고 소유자 암호를 제거하지 않습니다.
- 암호를 넣어 연 문서의 복호화된 사본을 소리 없이 만들어 내지 않습니다. 보호 해제는 별도의 명시적인 작업입니다.
- 권한 플래그가 보안 경계인 것처럼 굴지 않습니다.
수정할 권한이 없는 문서의 보호를 해제하는 일은 계약이나 거주지의 법률을 위반하는 것일 수도 있습니다. 그것은 여러분이, 그리고 중요한 사안이라면 변호사가 판단할 문제이지 압축 도구가 판단할 문제가 아닙니다.
막혔을 때의 현실적인 선택지
- 문서를 만든 사람에게 보호가 걸리지 않은 사본을 요청하십시오. 압도적으로 가장 흔한 해결책이고 메시지 한 통이면 됩니다.
- 열기 암호를 가지고 있다면 그것을 쓰십시오. 문서가 복호화되면 평범한 작업이 다시 전부 가능해집니다.
- 페이지를 눈으로 보기만 하면 된다면 PDF로 인쇄하거나 래스터화한 사본을 내보내십시오. 텍스트 레이어와 링크, 접근성 구조는 잃고 겉모습은 남습니다.
- 문서가 암호화된 데다 서명까지 되어 있다면 멈추고 다시 생각하십시오. 어떤 수정이든 서명을 무효로 만들고, 서명된 문서는 대개 나중에 누군가 검증해야 하기 때문에 존재합니다.
한 가지 더 있는 한계
오래된 PDF 암호화 리비전은 취약한 키 유도 방식과 짧은 키를 썼고, 이미 깨진 것으로 간주됩니다. 최신 리비전은 제대로 된 키 유도 함수와 함께 AES를 사용합니다. 문서를 들여다보는 것만으로는 어느 쪽을 쓰는지 알 수 없고, 오래된 파일을 금방 여는 도구가 있다고 해서 새 파일도 똑같이 열린다는 근거가 되지는 않습니다. 직접 만드는 문서에 보호를 걸어야 한다면, 포맷의 역사에 기대지 말고 최신 소프트웨어와 긴 암호를 선택하십시오.
관련 도구
출처
- ISO 32000-2 — Document management, Portable Document Format
- Adobe — PDF 32000-1:2008, clause 7.6 on encryption and permissions
- NIST FIPS 197 — the Advanced Encryption Standard