2P by GN⁺ | ★ favorite | 댓글 1개
  • DEDA는 컬러 레이저 프린터 출력물에 들어가는 문서 컬러 추적 점, 즉 노란 점을 읽고 디코딩하며 익명화하는 도구 키트임
  • 문서 컬러 추적 점은 프린터와 출력물 정보를 인코딩하는 작은 체계적 점 패턴이며, 거의 모든 상용 컬러 레이저 프린터에 통합되어 있음
  • 스캔 이미지에서 추적 데이터를 읽거나 비교하고, 알려지지 않은 패턴을 추출하며, PDF에 자체 추적 점 매트릭스를 추가할 수 있음
  • 익명화 기능은 스캔 이미지의 추적 데이터를 대부분 제거하거나, 프린터별 익명화 마스크를 만들어 PDF 문서에 적용하는 방식으로 동작함
  • 좋은 결과를 위해 입력 스캔은 무손실 압축, 300 dpi, 중립 대비가 권장되며, 흑백 페이지나 잉크젯 출력물에는 추적 점이 없을 수 있음

DEDA가 다루는 문제

  • Document Colour Tracking Dots 또는 노란 점은 프린터와 출력물 자체에 대한 정보를 인코딩하는 작은 체계적 점임
  • 이 과정은 거의 모든 상용 컬러 레이저 프린터에 통합되어 있음
  • 거의 모든 출력물에는 소스 장치에 대한 코드화된 정보가 들어가며, 예시로 시리얼 번호가 포함될 수 있음
  • DEDA는 이 포렌식 특징을 읽고 디코딩하는 기능과, 임의 추적을 막기 위한 익명화 기능을 함께 제공함
  • 소프트웨어 사용 시 다음 논문 인용을 요청함
    • Timo Richter, Stephan Escher, Dagmar Schönfeld, Thorsten Strufe. 2018. Forensic Analysis and Anonymisation of Printed Documents. IH&MMSec '18, 127-138. DOI: https://doi.org/10.1145/3206004.3206019

설치와 GUI 실행

  • Python 3 설치가 필요함
  • PyPI에서 설치 가능함
    • pip3 install --user deda
  • 현재 디렉터리에서도 설치 가능함
    • pip3 install --user .
  • deda_anonmask_apply의 선택 의존성으로 Unix와 GNU/Linux에서 Wand를 설치할 수 있음
    • pip3 install --user wand
    • Wand가 없으면 이미지 안의 흰색 영역이 포함된 페이지는 익명화할 수 없음
  • GUI는 다음 명령으로 실행함
    • deda_gui

터미널 도구로 가능한 작업

  • 추적 데이터 읽기

    • 스캔 이미지에서 추적 데이터를 읽고 경우에 따라 디코딩할 수 있음
    • 좋은 결과를 위해 입력은 png 같은 무손실 압축, 300 dpi, 중립 대비를 사용해야 함
    • 실행 명령:
      • deda_parse_print INPUTFILE
  • 스캔 문서 묶음에서 다른 프린터 찾기

    • 여러 스캔 문서에서 다른 프린터로 출력된 문서를 찾을 수 있음
    • 실행 명령:
      • deda_compare_prints INPUT1 INPUT2 [INPUT3] ...
  • 알려지지 않은 추적 패턴 분석

    • 새 패턴이 parse_print에서 인식되지 않을 수 있음
    • 추가 분석을 위해 노란 점을 추출할 수 있음
    • 실행 명령:
      • deda_extract_yd INPUTFILE
  • 자체 추적 점 만들기

    • 자체 추적 점 매트릭스를 만들고 PDF 문서에 추가할 수 있음
    • 내용은 deda_create_dots -h에 따라 매개변수로 전달함
    • 실행 명령:
      • deda_create_dots PDFINPUT
    • deda_anonmask_create -w로 만든 보정 페이지를 입력으로 사용할 수 있음

익명화 워크플로

  • 스캔 이미지 익명화

    • 스캔 이미지에서 추적 데이터를 대부분 제거함
    • 실행 명령:
      • deda_clean_document INPUTFILE OUTPUTFILE
  • 인쇄용 문서 익명화

    • 문서를 PDF로 저장하고 DOCUMENT.PDF로 둠
    • 다음 명령으로 만든 testpage.pdf를 여백 없이 인쇄함
      • deda_anonmask_create -w
    • 해당 문서를 300 dpi로 스캔하고, 무손실 파일을 다음 명령에 전달함
      • deda_anonmask_create -r INPUTFILE
    • 이 과정은 개별 프린터의 익명화 마스크인 mask.json을 생성함
    • 생성된 마스크를 PDF에 적용함
      • deda_anonmask_apply mask.json DOCUMENT.PDF
    • 결과물로 익명화된 masked.pdf가 만들어지며, 페이지 여백 0 설정으로 인쇄할 수 있음
    • 마스크가 프린터의 추적 점을 덮는지 현미경으로 확인해야 함
    • 마스크의 점 반지름, x 오프셋, y 오프셋은 deda_anonmask_apply 매개변수로 조정할 수 있음
    • DOCUMENT.PDF에 흰색 또는 밝은색 그래픽 영역이 있으면, 해당 영역은 Wand가 설치된 경우에만 마스킹 가능함

문제 해결

  • deda_parse_print: command not found가 발생하면 DEDA 설치를 확인하거나 PATH에 Python 사용자 bin 경로를 추가함
    • 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로 복사할 수 있음
  • x86_64-linux-gnu-gcc 관련 설치 오류는 GUI에 필요한 eel 의존성 때문일 수 있음
    • 제안 명령:
      • sudo apt-get install build-essential autoconf libtool pkg-config python3.6-dev gcc && pip3 install --user eel
  • wand.exceptions.PolicyError로 PDF 작업이 보안 정책에 의해 차단되면 ImageMagick 설정이 원인임

댓글과 토론

Hacker News 의견들
  • 우리 팀은 10여 년 전 DARPA 문서 파쇄 복원 챌린지에서 이 노란 추적 점을 이용해 파쇄 문서를 재구성했음
    파쇄 문서를 맞춰 가는 동안 프로그램이 점들을 강조 표시하는 모습을 볼 수 있음: https://www.youtube.com/watch?v=uzZDhyrjdVo
    덕분에 큰 차이로 우승할 수 있었음

    • 초등학생 때 Daily Planet에서 이 챌린지를 들었던 기억이 남아 있음
      후속 이야기를 보니 잊고 있던 기억이 떠올라서 꽤 신기함
    • Vinge의 Rainbows End에 나오는 도서관 파쇄기/스캐너가 유전자 시퀀싱을 느슨하게 바꾼 SF 설정인 줄만 알았는데, 거의 현실에 가까운 구현을 보니 재미있음
    • 파쇄 조각들을 프로그램에 넣기 위해 스캔하는 과정이 어땠는지 궁금함
      풀이 알고리즘만큼이나 그 과정도 따로 글로 쓸 만해 보이고, 그런 난장판을 감당할 수 있는 성향이 따로 있을 것 같음
  • 최근 여기서 밝히기 어려운 사정으로 추적 점을 좀 살펴볼 일이 있었음
    파란 LED 손전등을 컬러 인쇄물에 비춰 보면 좋음. 페이지 전체에 모래를 흩뿌린 것처럼 엄청나게 많은 점이 찍혀 있어서 충격적임

    • 프린터 제조사들이 그동안 추가로 쓴 노란 토너 때문에 집단소송을 당하지 않은 게 의외임
    • 이제 프린터만의 얘기도 아님: https://datadotusa.com/technology.htm
    • 레이저, 컬러 레이저, 잉크젯 중 어떤 프린터를 말하는 건지 궁금함
  • 내 프린터가 추적 점을 찍지 않는다면, 다른 프린터의 추적 점을 위조할 수 있다는 생각은 부인 가능성 측면에서 꽤 흥미로움
    다만 이 경우에도 익명 마스크를 출력하려면 원래 프린터에 접근해야 할 듯함

    • Wikipedia에 따르면 점 배열은 장치 일련번호와 인쇄 일시를 인코딩하므로, 다른 사람 프린터를 위조하려면 사실상 일련번호만 있으면 됨
      요즘은 프린터 설정을 통해 원격으로도 접근 가능할 수 있음
    • 추적 점까지 들여다보는 포렌식 조사 단계라면, 위조 시도 대부분은 꽤 뻔하게 드러나고 오히려 이런 기법을 아는 사람들로 용의자를 좁히는 증거가 될 가능성이 큼
      대충 분석하는 사람은 속일 수 있겠지만, 숙련된 조사관이라면 “추적 점은 분명 X 브랜드인데, 회색조에 쓰인 래스터는 명백히 Y 쪽이네” 같은 식으로 볼 것 같음
  • 관련해서 흥미로운 글을 놓쳤다면 여기 있음: https://news.ycombinator.com/item?id=42880704

    • 최근 “발견된” 초기 Pokemon 카드 플레이테스트판들이 이 점의 존재와 해독을 근거로 가짜이거나 적어도 매우 수상하다고 밝혀진 이야기라서 읽을 만함
      더 흥미로운 건, 그 발견과 분석을 올린 사람이 가짜 카드에 이미 수천 달러를 썼기 때문에 개인적으로 손해를 볼 수 있었는데도 결과를 공개했다는 점임
  • 같은 페이지를 여러 프린터로 출력하면 어떻게 되는지 궁금함
    첫 프린터가 실제 내용을 찍고, 다른 프린터들이 아직 흰 영역에 아주 조금씩만 더 찍는 식이면 한 프린터가 다른 프린터의 추적 점을 망가뜨릴까?

    • 그럴 것임. 프린터가 그러지 말아야 한다는 걸 알 방법이 없으니까
      다만 세부 조건에 따라 일부 또는 전부를 여전히 읽을 수 있을 가능성도 있음
  • 프린터판 OpenWRT 같은 프로젝트를 시작하는 괴짜 집에는 MIB가 찾아오는 게 아닌가 하는 생각이 들기 시작함
    추적 불가능한 표현을 허용할 수 없고, 불편한 밈의 출처를 외과수술처럼 타격할 수 있어야 한다는 식임. 그래서 craigslist에서 구한 흑백 레이저 프린터를 별도 VLAN에 두고 CUPS 서버를 중간에 세워 사용함
    Niantic이 지난 10년 넘게 해 온 일에 대해 누구도 충분한 정보를 갖고 동의하지 않았고, 모든 인쇄물이 추적 가능해지는 것에도 누구도 동의하지 않았음. 제품이나 과정 어디에도 “눈에 보이는 식별자가 없다고 해서 식별자가 없는 것은 아니다, 스테가노그래픽 식별자가 있을 수 있다”고 경고하지 않음
    우리가 산 제품 안의 범용 기계가 주인인 우리가 원하는 대로 재활용할 수 없을 정도로 잠기는 것도 마찬가지임. 상업 조직과 국가 기관이 던지는 모욕을 “똥 샌드위치라도 먹거나, 아니면 샌드위치 없이 얻어맞거나”로 받아들이게 되었고, Louis Rossmann의 Consumer Action Taskforce(CAT)는 이런 사례를 잘 모으는 선집이 되어 가고 있음
    이제 맞서 싸울 때임. 쓸 만한 프린터를 해킹하고, 펌웨어를 실용적인 것으로 교체하고, 이런 헛소리에서 벗어나야 함. 이런 추적 점과 다른 스테가노그래픽 추적 방식은 나 같은 사람, 숨겨진 통제 방식을 지적하고 거대한 흑요석 오징어가 정보 위험·오정보로 낙인찍은 밈을 퍼뜨리는 사람을 추적하고 침묵시키기 위해 존재함

    • 위조를 하려 했다면 보통 가정/사무실 방식으로 종이에 출력하는 대신, 정밀 공차가 작은 시계공용 CNC 같은 걸 구해 알루미늄 등으로 인쇄용 스탬프를 만들었을 것 같음
      일반적인 지폐 취급자도 쉽게 알아챌 수 있는 방식이라 종이에 프린트하는 건 어리석어 보임
  • 앞으로 몇 년간 꽤 중요해질 듯함
    시위 전단이나 팸플릿을 출력할 계획이라면, 믿을 수 있는 사람이 있는 경우 전문 인쇄소에 맡기거나, 최소한 프린터를 현금으로 사고 절대 인터넷에 연결하지 말고 Linux 컴퓨터에 USB로만 연결하는 게 좋음
    macOS와 Windows는 프린터 드라이버를 자동 설치할 수 있고, 그 드라이버가 본사로 연락해 프린터 ID를 어떤 식별자와 연결할 수도 있음

    • 동구권 전체주의 국가에서 이런 일을 어떻게 했는지는 Samizdat를 보면 됨: https://en.m.wikipedia.org/wiki/Samizdat
    • 그렇게까지 신경 쓴다면 실크스크린 키트를 사는 편이 나음
      티셔츠도 찍을 수 있음
    • 전단을 나눠 주는 사람들을 추적하는 편이 훨씬 쉽지 않을까?
    • 아니면 현금으로 산 프린터로 문서 전체에 유효하지만 무작위화한 추적 점을 대량으로 찍으면 됨
  • 공개 도구로 해독 가능한 프린터가 어느 정도 비율인지 정말 궁금함
    어느 제조사의 코드가 깨졌는지 통계가 있을까?

    • GitHub에서 Timo Richter, Stephan Escher, Dagmar Schönfeld, Thorsten Strufe의 2018년 논문 Forensic Analysis and Anonymisation of Printed Documents를 참조하고 있음
      사본은 여기 있음: https://ericbalawejder.com/assets/hexview/Forensic-Analysis-...
      표 1은 제조사, 분석한 프린터 수, 점 발견 여부를 정리함: Brother 1대 없음, Canon 10대 있음, Dell 4대 있음, Epson 8대 일부 모델, Hewlett-Packard 43대 일부 모델, IBM 1대 있음, KonicaMinolta 21대 일부 모델, Kyocera 4대 있음, Lanier 1대 있음, Lexmark 6대 일부 모델, NRG 1대 있음, Okidata 9대 일부 모델, Ricoh 6대 있음, Samsung 5대 없음, Savin 1대 있음, Tektronix 4대 없음, Unknown 1대 있음, Xerox 15대 일부 모델
      논문에서 설명하는 몇 가지 단서를 제외하면, 점 패턴이 발견된 경우에는 대체로 이해하고 있는 것으로 보임
  • 흑백 레이저 프린터도 추적 점을 만들까?
    그리고 이런 추적의 의미가 뭘까. 원칙적으로 우리 삶의 모든 구석이 추적되어야만 하나?

    • 흑백 프린터의 스테가노그래픽 식별자에 대해 확실히 아는 건 아니지만, 흑백 프린터가 추적 정보를 심지 않는다면 오히려 놀랄 것 같음
      모든 것에 출처 정보를 뿌리는 건 국가안보상 가치가 너무 큼. 언제나 안전이나 보안을 이유로 내세우고, 곧바로 “하지만 해가 뭐죠, 하면 안 되는 일을 하고 있는 건 아니잖아요… 맞죠?”가 따라옴
    • Secret Service가 프린터 품질이 지폐를 쉽게 재현할 수 있을 만큼 좋아진 뒤 제조사들에게 점을 추가하라고 요청했거나 요구한 것으로 이해하고 있음
      주 용도가 위조지폐범 추적이라면 흑백 프린터에는 필요 없고 그래서 포함되지 않는다는 얘기임
    • https://www.eff.org/pages/list-printers-which-do-or-do-not-d...
      이 목록은 2017년 이후 갱신되지 않았고, 아마 한 사람이 FOIA 요청을 바탕으로 추론한 결과였을 가능성이 큼. 다음번에 중국 대학이 미국 정부 기밀을 공개할 때까지 기다려야 할 듯함
    • 흑백 20달러 지폐에 속을 사람은 없으니, 굳이 점을 찍을 필요가 없다는 발상일 것 같음
    • 단색 프린터에는 노란 점이 없음
      수십 년 전 문자 커닝을 조정해 정보를 숨기는 소프트웨어 작업을 한 적이 있는데, 아는 한 그 프로젝트는 별다른 결과로 이어지지 않았음
  • 이것도 관심 있을 수 있음: https://en.wikipedia.org/wiki/EURion_constellation