世界のことを知りたい

読書習慣を付けたい。…マンガも本だよね?…バナナはおやつだよね?

誰がコピペしたかバレる「ゼロ幅文字」が含まれた文字列を Sublime Text で発見する方法

ゼロ幅文字(Zero Width Spaces/Characters)を使って文字列にウォーターマークを入れるテクニックが文書をリークした人の特定に役に立ったようです。

ゼロ幅文字にエンコードした隠し情報で、文書をリークしたメンバーを特定 | 秋元@サイボウズラボ・プログラマー・ブログ

まずどんなテクニックかを知るためにこちらのデモサイトが分かりやすいです。

ちょっと試してみましょう。

f:id:arityk:20180412213935j:plain

コピーした文字列の中にユーザー名が埋め込まれていたわけです。なので、どこかからコピーした文字列をそのまま貼り付けてしまうと、その文字列の中にユーザーを特定できる情報が入っているかもしれないということです。

このデモサイトではユーザー名がそのまま入っていましたが、他の情報、例えばIPなどを埋め込んでも良いし、それは埋め込む側の好きにできます。

これは注意しなくてはなりません。

下がゼロ幅文字への注意喚起とやり方を説明した Tom さんの記事。上のデモサイトも Tom さんが作ったものです。

Be careful what you copy: Invisibly inserting usernames into text with Zero-Width Characters

デモサイトのソースコードを見るともっと分かりやすいです。

zero-width-detection/usernameToZeroWidth.js at master · umpox/zero-width-detection · GitHub

ゼロ幅文字を見つける

さて、ゼロ幅文字の埋め込みの仕組みは分かったとして、実際にどう見つければ良いのでしょうか。

プログラミング用のエディターではこうした特殊な文字を表示してくれるものもあるのですが、Windowsの「メモ帳」や通常のテキストエディターではゼロ幅文字などの特殊文字があることが分かりません。

使っているテキストエディターで是非試してみて下さい。

Zero-width characters are invisible, ‘non-printing’ characters that are not displayed by the majority of applications. F​or exam​ple, I’ve ins​erted 10 ze​ro-width spa​ces in​to thi​s sentence, c​an you tel​​l? (Hint: paste the sentence into Diff Checker to see the locations of the characters!). These characters can be used to ‘fingerprint’ text for certain users.

説明の記事にあった上の文字列にはたくさんのゼロ幅文字が含まれています。上の文字列は記事からそのままコピーして貼り付けていて、当然ゼロ幅文字が含まれています。

説明にあるように Diff Checker ではゼロ幅文字があるのが分かります。ですが毎回このサイトを使うわけにはいきません。

こうした特殊な文字・記号を表示してくれるか削除できればいいわけです。

Sublime Text で見つける

Sublime Text では「Highlight Dodgy Chars」というプラグインが分かりやすく表示してくれます。インストールするだけでいいのでお勧めです。

f:id:arityk:20180412215228p:plain

Highlight Dodgy Chars - Packages - Package Control

実際に上の文字列で試してみるとこんな感じにハイライトされます。

f:id:arityk:20180412215139j:plain

これなら分かりやすいですね。文字列を Sublime Text に貼り付けてチェックできます。見つけたら削除するだけです。

他にも「Highlighter」というプラグインもこうした特殊文字をハイライトしてくれます。

Firefox のアドオンもあるが…

Firefox のアドオンでこうした特殊な文字を削除してくれるものがあります。コピーの際に特殊な文字や空白を削除してくれます。

Copy Plain Text 2」でその設定があります。

f:id:arityk:20180412215823j:plain

「お、これは良さそうだ」と思って使ってみたのですが、Waterfox でうまく機能しません。残念。

他にも「Copy Plain Text WE」というアドオンもあるのですが、こちらもダメ。

Firefox は Quantum(ver57) からアドオンに制限が多くなり、Firefox ではこうしたアドオンは使えないのは分かるのですが、どうして Warterfox でも使えないのでしょう…?

上のアドオンが使えるとすごく便利なのですが…。

自力で正規表現を使って削除

もちろんこうしたプラグインなどに頼らず、自力で正規表現で削除しても良いでしょう。ちょっと大変ですが。

ゼロ幅文字を埋め込むテクニックは面白いけど、注意が必要

ゼロ幅文字などの特殊文字を使って情報を埋め込むというテクニック自体は面白いです。でもコピーする側からすると迷惑な存在です。内部告発とか、何かの情報をリークする場合は要注意です。

でも埋め込む側の考えも分かります。誰が流出させたか分かるかもしれないとなると埋め込んでしまいますよね。

ともかくこういうテクニックがあることは知っておいた方が良さそうです。