PDF를 제대로 마스킹하는 방법
글자 위의 검은 사각형은 마스킹이 아닙니다. 단어는 여전히 파일 안에 있고, 누구든 4초 정도면 읽어 낼 수 있습니다. 실제로 효과가 있는 방법과, 제대로 됐는지 확인하는 방법을 알려 드립니다.
최종 검토:
흔한 실수, 그리고 계속 반복되는 이유
PDF 페이지는 일종의 그리기 프로그램입니다. 텍스트는 특정 문자를 특정 좌표에 놓으라는 명령이고, 검은 사각형은 어떤 영역을 채우라는 또 다른 명령입니다. 사각형을 그린다고 텍스트가 지워지지 않습니다. 그 위에 덧그릴 뿐입니다. 문자는 여전히 그 아래, 파일 안에 있으며, 그 영역을 선택하면 복사됩니다. 무료 도구라면 무엇이든 몇 초 만에 꺼낼 수 있습니다.
이런 일이 반복되는 이유는 화면이 성공했다고 말해 주기 때문입니다. 상자를 그리면 단어가 시야에서 사라지고, 파일을 저장하면 마스킹된 문서와 똑같아 보입니다. 오류도, 경고도, 제대로 된 마스킹과의 눈에 보이는 차이도 없습니다. 지금까지 보도된 모든 마스킹 실패 사례, 즉 가려지지 않은 법원 제출 서류, 합의 금액, 증인 이름, 삭제 부분이 몇 분 만에 복원된 정보 보고서까지 모두 누군가 도형을 그리고 그것을 믿은 결과였습니다.
텍스트를 검은색으로 형광펜 칠하는 것도 모양만 다른 같은 실수이고, 워드프로세서에서 흰 사각형으로 덮은 뒤 PDF로 내보내는 것도 마찬가지입니다.
진짜 마스킹이 하는 일
순서가 반대입니다. 먼저 페이지 내용에서 텍스트를 삭제하고, 그다음에 무언가 있던 자리를 표시하는 시각적 표지로 검은 상자를 그립니다. 마스킹된 영역을 복사해도 아무것도 나오지 않습니다. 아무것도 없기 때문입니다. 페이지 텍스트를 추출해도 그 단어는 아예 존재하지 않습니다.
여기서 PDF 마스킹이 하는 일이 바로 이것이며, 텍스트 조각을 몇 개 제거했는지도 알려 줍니다. 이 점이 중요한 이유는, 아무것도 일치하지 않은 마스킹도 성공한 마스킹과 똑같아 보이기 때문입니다. 이름 위에 상자를 그렸는데 아무것도 제거되지 않았다면, 그 이름은 텍스트가 아니라 이미지의 일부일 가능성이 높으며 다음 문단의 방법이 필요합니다.
그림 속 텍스트는 별개의 문제입니다
스캔한 페이지 안의 이름이나 보고서에 붙여 넣은 스크린샷 속 이름은 텍스트가 아니라 픽셀입니다. 텍스트를 삭제해도 건드릴 수 없고, 그 위에 그린 상자는 앞에서 설명한 효과 없는 덮개와 똑같습니다. 아래의 픽셀이 이미지 데이터에 그대로 남아 있기 때문입니다.
해결법은 마스킹을 적용한 상태로 해당 페이지를 다시 렌더링해, 픽셀이 정말로 더는 존재하지 않게 만드는 것입니다. 여기에는 알아 둘 만한 실제 대가가 따릅니다. 그 페이지들은 그림이 되므로 페이지 위의 텍스트는 더 이상 선택할 수 없고 파일은 커집니다. 스캔 문서라면 원래 그림이었으니 달라질 것이 없습니다. 텍스트와 그림이 섞인 문서라면 맞바꿔야 하는 문제입니다.
이미지 전반에도 같은 원리가 적용됩니다. 얼굴이나 번호판을 흐리게 처리한다면, 그 영역에 눈에 보이는 구조가 전혀 남지 않을 만큼 강하게 하세요. 연구자들은 후보를 생성해 맞춰 보는 방식으로 약한 모자이크에서 텍스트를 복원해 냈습니다. 글자가 몇 개였는지 아직 짐작할 수 있다면 충분히 강하지 않은 것입니다.
PDF가 잊힌 이름을 간직하는 곳
마스킹을 제대로 한 사람들이 걸려 넘어지는 부분이 여기입니다. PDF는 눈에 보이는 페이지 말고도 여러 곳에 텍스트를 저장하며, 페이지를 완벽하게 마스킹해도 그 모든 곳은 그대로 남습니다.
책갈피 목차에는 이름이 들어간 섹션 제목이 들어 있는 경우가 많습니다. 양식 필드 값은 필드가 보이지 않아도 남아 있습니다. 첨부 파일은 PDF 안에 숨겨진 문서 전체일 수 있습니다. 문서 정보와 XMP 메타데이터 패킷에는 제목, 작성자, 소프트웨어, 그리고 종종 원래 파일 경로가 들어 있어 사용자 이름과 폴더 구조가 드러납니다. 댓글과 주석은 자체 텍스트와 작성자 이름을 담고 있습니다. 그리고 파일 이름 자체가 문서가 가는 곳마다 따라다닙니다.
가장 알아채기 어려운 것이 하나 더 있습니다. 증분 저장된 PDF는 같은 파일 안에 이전 버전을 간직합니다. 문서를 새로 쓰지 않고 편집해서 저장했다면, 페이지의 이전 버전이 아직 안에 남아 있을 수 있습니다. 중요한 문서라면 아래의 확인 단계를 절대 건너뛰면 안 되는 이유가 이것입니다.
확인하기, 그리고 그 방법
확인은 사람들이 건너뛰는 단계이자, 실제로 나를 지켜 주는 단계입니다. 철저함 순으로 세 가지 확인 방법이 있습니다.
결과 파일을 열고 마스킹한 영역을 선택해 보세요. 무엇이든 복사된다면 멈추세요. 기본적인 실패를 5초 만에 잡아내므로 매번 해 볼 가치가 있습니다.
문서 속성을 확인하세요. 제목, 작성자, 주제, 키워드는 어떤 PDF 뷰어에서든 파일 메뉴의 속성에서 볼 수 있습니다. 작성자 필드에 방금 한 시간을 들여 지운 이름이 있다면, 마스킹은 아무 소용이 없었던 것입니다.
파일을 다시 만드세요. 페이지가 실제로 참조하는 것만으로 문서를 새로 쓰는 도구, 예를 들어 Ghostscript의 gs -sDEVICE=pdfwrite나 qpdf --empty --pages out.pdf 1-z --로 결과 파일을 처리하면 참조되지 않는 객체와 이전 버전이 버려집니다. 여기에 exiftool -all:all=을 더하면 메타데이터가 지워집니다. 법원 제출 서류나 공개 의무가 있는 문서라면 세 가지를 모두 하고 다른 사람에게도 확인을 받으세요.
페이지 삭제도 마스킹이 아닙니다
같은 종류의 실수이므로 따로 짚어 둘 만합니다. PDF 페이지 삭제는 남긴 페이지들로 새 문서를 만듭니다. 그런데 남긴 페이지에 삭제된 페이지를 가리키는 링크가 있으면 그 링크는 여전히 연결 대상을 찾아야 하므로, 삭제된 페이지의 사본이 어떤 페이지 트리도 참조하지 않는 객체로 새 파일에 딸려 들어갑니다. 어떤 뷰어에서도 보이지 않지만, 바이트 안에는 존재합니다.
페이지를 보이지 않게 하는 것이 목적이라면 삭제가 올바르고 충분합니다. 페이지의 내용을 세상에서 없애는 것이 목적이라면, 페이지를 삭제하고 그리고 위에서 설명한 대로 파일을 다시 만드세요.
자주 묻는 질문
검은 상자만으로 괜찮은 경우도 있나요?
진짜 마스킹 위에 얹는 시각적 표지로서만 괜찮습니다. 상자만 있으면 유심히 보지 않는 독자에게만 단어가 가려질 뿐, 다른 누구에게도 가려지지 않습니다. 문서를 공개하거나 제출하거나 공개 의무에 따라 내놓을 예정이라면, 상자만 있는 것은 마스킹을 전혀 하지 않은 것으로 여기세요.
대신 PDF를 평면화하면 어떤가요?
평면화는 주석을 페이지에 굳혀 넣으므로 그려 넣은 상자가 그래픽으로 영구 고정되기는 합니다. 하지만 그 아래 텍스트는 주석이 아니라 페이지 내용이므로 여전히 남아 있습니다. 평면화는 양식 답변과 서명을 고정하는 데 알맞은 도구이지, 단어를 숨기는 도구가 아닙니다.
PDF를 이미지로 변환해서 마스킹해도 되나요?
효과는 있습니다. 상자가 그려진 페이지의 그림에는 정말로 그 아래 텍스트가 없으니까요. 대가는 분명합니다. 문서를 더 이상 검색할 수 없고, 파일이 커지며, 메타데이터는 대개 그대로 옮겨 갑니다. 그러니 메타데이터는 여전히 따로 지워야 합니다.
PDF로 인쇄하면 숨겨진 텍스트가 지워지나요?
페이지 내용은 대개 지워집니다. 페이지가 다시 렌더링되기 때문이며, 그래서 가끔 우연히 효과가 있습니다. 하지만 믿을 만한 방법이 아니고, 모든 메타데이터 필드를 지우지도 않으며, 프린터 드라이버에 따라 달라집니다. 무엇을 제거하는지 밝히는 도구를 쓰세요.
민감한 문서를 웹사이트에서 마스킹해도 안전한가요?
이 사이트에서는 어느 단계에서도 아무것도 저장하지 않으며, 애초에 이곳에서 마스킹 기능을 제공하는 이유가 바로 그것입니다. 사람들이 마스킹해야 하는 문서야말로 낯선 사람의 서버에 남아 있어서는 안 되는 문서이기 때문입니다. 법률 제출 서류라면 그만한 중요도에 맞춰 만든 소프트웨어를 쓰고, 결과를 직접 확인하세요.