(これまでの増井俊之の「界面潮流」はこちら)
パソコンで各種のサービスを利用する場合、パスワード、クレジットカード番号、購買履歴など沢山の秘密情報を扱うことになりますが、こういった情報を普通のファイルに書いておくと、何かの機会に他人にみつかってしまう可能性がありますから、なんらかの方法で隠しておく必要があります。
特殊な装置を接続したときだけ秘密ファイルが見えるようにする装置について秘密情報のコントロールで解説しました。このような装置は鍵のような感覚で利用することができるので手軽ですが、鍵と同様の厳重な管理が必要ですし、データのバックアップなどに注意が必要です。秘密ファイルは普段は見えないわけですから、自動的にバックアップすることはできないでしょうし、間違って消してしまってもしばらく気付かないかもしれません。また、秘密データをネットワーク上に置くことができませんし、自分が使うあらゆるマシンで正しく動くようにするのは大変でしょう。
特殊な装置を使わず、一般的な暗号化アルゴリズムを利用すれば、データをどこに置いてもかまいませんし、バックアップ関連の問題も減ると思われますが、この場合は暗号化されたデータが誰からも丸見えになってしまいますから、暗号解読攻撃を受けやすくなる可能性があります。
秘密情報を手軽に安全に扱うためには、以下のような要件を満たす必要がありそうです。
- 特殊なハードウェアを必要としない
- 他人にみつかりにくい
- 他人にみつかっても困らない
- 他人には解読できない
- 置き場所や存在そのものを忘れない
- 誤って消してしまうことがない
ステガノグラフィー
暗号化したことがわからないように秘密データを普通のデータの中に埋め込む手法をステガノグラフィーと呼びます。普通の暗号と異なり、データが隠されていること自体が自明でないため、解読の危険に晒される危険が少ないと考えられています。元データに重畳する形で秘密データを書き込むため、秘密データのサイズをあまり大きくすることはできませんが、秘密データは大抵小さなテキストのことが多いため、写真データのような大きなファイルに埋め込んでしまえば、うまく秘密データの存在を隠すことができます。
秘密データを隠す対象としては動画、画像、音楽のような、複雑かつどこにでもあるデータを利用するとよさそうです。デジカメなどで標準的に使われているJPEG画像ファイルにデータを隠すことができるJPHIDE/JPSEEKおよびOutGuessというシステムを使って、私の写真に秘密情報を埋め込んでみました。(1)がもとの画像です。
(1)オリジナルのJPEGデータ(5654バイト)
(2)JPHIDEで円周率の先頭40桁("3.1415...")を埋め込んだもの(5322バイト)
(3)JPHIDEで円周率の先頭200桁を埋め込んだもの(5326バイト)
(4)OutGuessで円周率の先頭200桁を埋め込んだもの(5408バイト)
(3)と(4)は同じデータを同じ画像に埋め込んだ結果ですが、JPHIDEの方が画像の劣化が小さいようです。
パーソナルな写真や動画に秘密情報を埋め込んでおくことにすれば、前述の条件をうまく満たすことができます。デジカメ写真フォルダ内のデータは滅多に消すことはないでしょうし、注意してバックアップするのが普通です。また家族や他人に見られて困ることはありません。秘密情報を埋め込んだことを忘れてしまう可能性はありますが、それを忘れてしまうようならば大した秘密情報ではないでしょう。どの写真が秘密情報を含むものかを忘れた場合は、手持ちのすべての写真に対して復号を試みてみればよいでしょう。
ステガノグラフィーを使って秘密を隠す方法は現在のところほとんど使われていないようですが、潜在的ニーズは多いと思います。JPHIDEやOutGuessはコマンドラインからしか使えないのであまり便利とはいえませんが、インタフェースを改良した使いやすい秘密管理システムが望まれるところです。