##なぜデータの隠し部屋が必要か
現代において、プライバシー保護は重要な課題である。日本が運営している警察は、捜査令状があれば国民のプライバシーに踏み込むことができるが、それが本当に正当な手順を踏まれているか、どんな国家でも正義の名の下にプライバシーを侵害しているのかは定かではない。誰にでも墓場まで持っていきたい秘密はある。それを秘匿する技術は必要であると考える。
プライバシーが不正に侵害されるということは、「この人は犯罪者予備軍である」などの差別に繋がることは容易に想定できる。
以降、無条件に国民の情報にアクセスできる国家を前提に説明していく。
また、これは犯罪行為を助長、協調する記事ではないことをご理解いただけるとありがたい。
##データの存在自体を隠す
国家が国民に絶対的な命令権がある場合、データを暗号化していても、暗号化を解かなければならない状況が想定される。よって、暗号化だけでは不十分である。
必要なことは、データの存在自体を隠すことである。
自分は、データの存在自体を隠せるプログラムをいくつか開発してきた。それをこの記事で紹介する。
##ステガノグラフィ
ステガノグラフィとは、画像・動画・音楽などのメディアデータの中にデータを隠す技術である。
画像にデジタルデータを隠すアルゴリズムとして、Least Significant Bit(LSB)に隠す方法がある。
画像データの1ピクセルはRed, Green, Blue, Alphaで構成されているが、Red, Green, Blueの下位1ビットが変化しても、人は気づかない。LSBのステガノグラフィはそれを利用し、Red, Green, Blueの下位1ビットにデータを順番に隠すアルゴリズムである。
1200 x 700の画像を考えてみると、1200 x 700 x 3ビット、つまり307KB隠すことができる。
しかし、それだと今の一般的な画像サイズを考えると、大した大きさのデータは隠せないことになる。
その問題を解決するために作ったのが、yakumoである。
このyakumoは、LSBのステガノグラフィだが、複数の写真データの中に、複数のファイルを隠すことができる。つまり、iPhoneに保存されている全ての写真の中に、データを隠すことができる。
##実行ファイル
LinuxやmacOSでC言語、Go言語、Rustなどをコンパイルすると生成されるELF実行ファイルは、末尾に何かデータが結合されていても、実行ファイルとして問題なく動作する。つまり、アプリケーションファイルの中にデータを隠すことができる。
私はデータを暗号化してPaddingデータと共に実行ファイルに隠すRust製ツール「nats」を開発した。
##Microsoft Office ファイル
docxファイルや、xlsxファイルは、実はシンプルなzipファイルである。よって、ディレクトリに解凍できるので、そこにファイルを隠すことができる。
簡易的な実装だが、Officeファイルの中にデータを隠すプログラムmikiを実装した。
##IPFSとブロックチェーン
P2Pネットワークにデータを保存するプログラム「severus」を実装した。
分散ファイルシステムのIPFSとブロックチェーンのPolygonを使用して、暗号化したディレクトリをIPFSに保存して、そのCIDをPolygonのスマートコントラクトに保存する。
一つの秘密鍵を使えば、それに紐づくデータを取り出して復号化することができ、秘密鍵がない人は中身を知ることができない。
このツールは、秘密鍵として日本語の文字列も使うことができる。
「帰りに牛乳と卵2パック買ってきて」みたいな何気ないフレーズを秘密鍵としてどこかに保存していても、それが秘密鍵だとは考えにくい。それがデータの存在を隠せる機能である。
##まとめ
以上の4つのツールが、自分がデータの隠し部屋として開発してきたツールである。
自分は警察に秘匿したい疾しいデータは持っていないし、法を犯すつもりもない。世界では、プライバシーの権利を保障していない国もあるため、そんな国の国民が自身の人権を守るために使われることを願っている。
もし興味がある方がいたら、是非これらのリポジトリにContributeしていただけるとありがたい。