DEDA – 追跡ドットの抽出・デコード・匿名化ツールキット
(github.com/dfd-tud)- 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がインストールされている場合にのみマスキング可能
- 文書をPDFとして保存し、
トラブルシューティング
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設定が原因- Wandを削除するか、
/etc/ImageMagick-*/policy.xmlの</policymap>の直前に次のポリシーを追加する<policy domain="coder" rights="read | write" pattern="PDF" />
- 関連参考リンク: ImageMagick security policy PDF blocking conversion
- Wandを削除するか、
1件のコメント
Hacker News のコメント
私たちのチームは10年ほど前、DARPA 文書シュレッダー復元チャレンジで、この黄色い追跡ドットを使って裁断された文書を再構成した
裁断文書を合わせていく間、プログラムがドットを強調表示する様子を見られる: https://www.youtube.com/watch?v=uzZDhyrjdVo
そのおかげで大差で優勝できた
後日談を見て、忘れていた記憶がよみがえってきてかなり不思議な感じがした
解法アルゴリズムと同じくらい、その工程だけでも記事にできそうだし、ああいう混沌を扱える性格というのも別にありそうだ
最近、ここでは明かしにくい事情で追跡ドットを少し調べる機会があった
青色LEDの懐中電灯をカラー印刷物に当ててみるとよい。ページ全体に砂をまき散らしたように、ものすごい数のドットが打たれていて衝撃的だ
自分のプリンターが追跡ドットを打たないなら、別のプリンターの追跡ドットを偽造できるという考えは、否認可能性という点でかなり興味深い
ただしこの場合でも、匿名化マスクを印刷するには元のプリンターにアクセスする必要がありそうだ
今ではプリンター設定を通じてリモートでもアクセスできるかもしれない
ざっくり分析する人ならだませるだろうが、熟練した調査官なら「追跡ドットは明らかに X ブランドだが、グレースケールに使われているラスタは明らかに Y 系だね」といった見方をしそうだ
関連して面白い記事を見逃していたなら、ここにある: https://news.ycombinator.com/item?id=42880704
さらに興味深いのは、その発見と分析を投稿した人物が、偽カードにすでに数千ドルを費やしていて個人的に損をする可能性があったにもかかわらず、結果を公開した点だ
同じページを複数のプリンターで印刷したらどうなるのか気になる
1台目のプリンターが実際の内容を印刷し、ほかのプリンターがまだ白い領域にごく少しずつだけ追加で印刷する形なら、あるプリンターが別のプリンターの追跡ドットを壊すのだろうか?
ただし詳細な条件によっては、一部または全部をなお読み取れる可能性もある
プリンター版OpenWRTのようなプロジェクトを始める変わり者の家には、MIB が訪ねてくるのではないかと思い始めている
追跡不能な表現は許容できず、不都合なミームの出所を外科手術のように攻撃できなければならない、というわけだ。だから craigslist で手に入れた白黒レーザープリンターを別 VLAN に置き、CUPS サーバーを中継にして使っている
Niantic がこの10年以上やってきたことについて、十分な情報を得たうえで同意した人など誰もいないし、すべての印刷物が追跡可能になることにも誰も同意していない。製品にもプロセスにも、「目に見える識別子がないからといって識別子がないわけではない。ステガノグラフィックな識別子が存在する可能性がある」とは警告されていない
私たちが買った製品の中にある汎用機械が、所有者である私たちの望むように再利用できないほどロックされているのも同じだ。商業組織と国家機関から投げつけられる侮辱を「クソのサンドイッチでも食うか、それともサンドイッチなしで殴られるか」として受け入れるようになってしまったし、Louis Rossmann の Consumer Action Taskforce(CAT)はこうした事例を集める優れたアンソロジーになりつつある
いまこそ反撃する時だ。まともなプリンターをハックし、ファームウェアを実用的なものに置き換え、こういうくだらないものから抜け出すべきだ。こうした追跡ドットや他のステガノグラフィックな追跡方式は、私のような人間、隠れた統制の仕組みを指摘し、巨大な黒曜石のイカが情報リスクや誤情報とレッテル貼りしたミームを広める人間を追跡し、沈黙させるために存在している
一般的な紙幣取扱者でも簡単に見抜ける方法なので、紙にプリントするのは愚かに見える
今後数年でかなり重要になりそうだ
デモのビラやパンフレットを印刷する予定なら、信頼できる人がいる場合は専門の印刷所に任せるか、少なくともプリンターを現金で買い、絶対にインターネットに接続せず、Linux コンピューターに USB だけで接続するのがよい
macOS と Windows はプリンタードライバーを自動インストールでき、そのドライバーが本社に連絡してプリンターIDを何らかの識別子と結び付けることもあり得る
Tシャツも刷れる
公開ツールで復号できるプリンターがどの程度の割合なのか、本当に気になる
どのメーカーのコードが破られているのか、統計はあるのだろうか?
コピーはこちらにある: 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 台は一部モデル
論文で説明されているいくつかの手がかりを除けば、ドットパターンが見つかった場合はおおむね解明されているように見える
白黒レーザープリンターも追跡ドットを生成するのだろうか?
そして、こうした追跡にどんな意味があるのだろう。原則として、私たちの生活の隅々まで追跡されなければならないのか?
あらゆるものに出所情報をばらまくことは、国家安全保障上の価値があまりにも大きい。いつも安全やセキュリティを理由に掲げ、すぐに「でも何が害なんですか、やってはいけないことをしているわけではないでしょう……そうですよね?」が続く
主な用途が偽札犯の追跡なら、白黒プリンターには不要で、そのため含まれていないという話になる
この一覧は 2017 年以降更新されておらず、おそらく一人の人物が FOIA 請求をもとに推論した結果だった可能性が高い。次に中国の大学が米国政府の機密を公開するまで待つしかなさそうだ
数十年前、文字のカーニングを調整して情報を隠すソフトウェアの仕事をしたことがあるが、私の知る限り、そのプロジェクトは特に成果につながらなかった
これも興味があるかもしれない: https://en.wikipedia.org/wiki/EURion_constellation
残念ながら、そちらは公開情報がほとんどない: http://www.cl.cam.ac.uk/users/sjm217/projects/currency/