TL;DR

  • DEDA(Tracking Dots Extraction, Decoding and Anonymisation Toolkit)는 상용 컬러 레이저 프린터 출력물에 거의 모두 포함되는 추적 점을 읽고 해독하며, 스캔 이미지와 인쇄 문서의 추적 정보를 익명화하는 도구임.
  • 문서 색상 추적 점(Document Colour Tracking Dots), 즉 노란 점은 프린터 일련 번호 등 출력 장치 정보를 인코딩하는 작은 규칙적 점임.
  • deda_parse_print로 스캔 이미지의 추적 데이터를 읽고 해독하며, deda_compare_prints로 여러 문서의 프린터 차이를 비교하고 deda_extract_yd로 인식되지 않은 점 패턴을 추출함.
  • deda_clean_document는 스캔 이미지의 추적 데이터를 대부분 제거하며, deda_anonmask_create와 deda_anonmask_apply는 프린터별 마스크를 만들어 PDF를 인쇄용으로 익명화함.
  • Python 3과 DEDA가 필요하며, 이미지의 흰색 영역까지 익명화하려면 Unix 및 GNU/Linux에서 선택 사항인 wand 설치가 필요함.

설치

  • Python 3을 설치한 뒤 PyPI에서 pip3 install --user deda 명령으로 DEDA를 설치하거나 현재 디렉터리에서 pip3 install --user . 명령을 실행함.
  • deda_anonmask_apply의 선택 의존성인 wand는 Unix 및 GNU/Linux에서 pip3 install --user wand 명령으로 설치함. wand가 없으면 이미지 내 흰색 영역을 포함하는 페이지를 익명화할 수 없음.
  • GUI에 필요한 eel 의존성 설치 중 x86_64-linux-gnu-gcc 명령이 종료 코드 1로 실패하는 경우, build-essential, autoconf, libtool, pkg-config, python3.6-dev, gcc를 설치한 뒤 pip3 install --user eel을 실행함.

그래픽 사용자 인터페이스

  • 터미널에서 deda_gui를 실행해 그래픽 사용자 인터페이스(GUI)를 엶.

터미널 애플리케이션

추적 데이터 읽기

  • 스캔 이미지에서 추적 데이터를 읽고 경우에 따라 해독함. 좋은 결과를 얻으려면 입력 이미지에 PNG 같은 무손실 압축을 사용하고 해상도를 300dpi로 설정하며 대비를 중립적으로 설정함.
  • deda_parse_print INPUTFILE 명령으로 추적 데이터를 읽음.

스캔 문서에서 다른 프린터 찾기

  • deda_compare_prints INPUT1 INPUT2 [INPUT3] ... 명령으로 스캔 문서 집합에서 서로 다른 프린터를 찾음.

알 수 없는 추적 패턴 분석

  • parse_print가 새 패턴을 인식하지 못하는 경우, deda_extract_yd INPUTFILE 명령으로 점을 추출해 추가 분석에 활용함.

추적 점 만들기

  • deda_create_dots -h에서 안내하는 매개변수로 자체 추적 점 행렬을 만들고 PDF 문서에 추가함.
  • deda_create_dots PDFINPUT 명령으로 PDF 입력을 지정함. deda_anonmask_create -w로 만든 보정 페이지도 입력으로 사용할 수 있음.

스캔 이미지 익명화

  • deda_clean_document INPUTFILE OUTPUTFILE 명령으로 스캔 이미지의 추적 데이터를 대부분 제거함.

인쇄용 문서 익명화

  • 문서를 DOCUMENT.PDF라는 PDF 파일로 저장함.
  • deda_anonmask_create -w로 만든 testpage.pdf를 페이지 여백 없이 인쇄함.
  • 문서를 300dpi로 스캔하고 무손실 파일을 deda_anonmask_create -r INPUTFILE에 전달해 해당 프린터에 맞는 익명화 마스크인 mask.json을 만듦.
  • deda_anonmask_apply mask.json DOCUMENT.PDF를 실행해 익명화 문서인 masked.pdf를 만들고 페이지 여백을 0으로 설정해 인쇄함.
  • 현미경으로 마스킹된 페이지가 프린터의 추적 점을 덮는지 확인함. 마스크의 점 반지름과 x·y 오프셋은 사용자 지정할 수 있으며 deda_anonmask_apply의 매개변수로 전달함.
  • DOCUMENT.PDF에 흰색 또는 밝은색 그래픽이 포함된 경우 해당 영역을 마스킹하려면 wand 설치가 필요함.

문제 해결

`deda_parse_print`: 명령을 찾을 수 없음

  • 설치 절차에 따라 DEDA를 설치함.
  • Python의 사용자 설치 실행 파일 디렉터리를 PATH에 추가함. 예를 들어 export PATH="$PATH:$(python -c 'import site,os; print(os.path.join(site.USER_BASE, "bin"))')"를 실행함.

DEDA가 추적 점을 인식하지 못하는 경우

  • 스캔 프로그램이 임계값 처리로 종이 질감이나 추적 점을 제거하지 않도록 설정한 뒤 다시 확인함.
  • 단색 페이지와 잉크젯 출력물에는 추적 점이 없을 수 있음.

프린터에 추적 점이 없을 때 이를 감출 수 있는지 여부

  • 실제로 추적 점이 없다면 deda_create_dots로 자체 점을 만들거나, 다른 프린터로 deda_anonmask_create -w 보정 페이지를 인쇄한 뒤 해당 마스크를 자신의 프린터에 사용할 수 있음.
  • 추적 점의 익명화된 버전을 사용하거나 deda_anonmask_create --copy로 점을 그대로 복사할 수 있음. 관련 절차는 ‘인쇄용 문서 익명화’와 ‘추적 점 만들기’ 항목에 해당함.

ImageMagick PDF 보안 정책 오류

  • wand.exceptions.PolicyError와 PDF 작업을 허용하지 않는 보안 정책 오류는 ImageMagick에서 발생함.
  • pip3 uninstall wand로 Wand를 제거하거나 /etc/ImageMagick-*/policy.xml의 </policymap> 바로 앞에 PDF 읽기·쓰기 권한 정책을 추가함: <policy domain="coder" rights="read | write" pattern="PDF" />.
  • 자세한 내용은 ImageMagick 보안 정책의 PDF 변환 차단 관련 안내를 참조함.

인용 논문

  • 소프트웨어 사용 시 다음 논문을 인용함: Timo Richter, Stephan Escher, Dagmar Schönfeld, and Thorsten Strufe. 2018. “Forensic Analysis and Anonymisation of Printed Documents.” *Proceedings of the 6th ACM Workshop on Information Hiding and Multimedia Security (IH&MMSec '18)*. ACM, New York, NY, USA, 127–138. DOI: https://doi.org/10.1145/3206004.3206019.