ファイルのセキュリティを強化する各種の暗号化ツール
本稿で紹介するツールの大半はコマンドライン専用で使うものだが、その機能や操作手順は極めてシンプルであり、コマンドライン操作を苦手とする初心者ユーザであっても使いこなすのにさほどの困難は感じないだろう。特に今回は、外部ライブラリにできるだけ依存せず、プログラム本体のサイズも小さく、携帯性に優れているツールという基準で選んだ。
Bcrypt
私の場合、Bcryptを入れたペンドライブを常に携帯するようにしている。このアプリケーションの特長は、基本機能のみに絞られているため極めて簡単に操作できることだ。実際インストール後に行う操作は、コマンドプロンプトに続けてbcrypt
というコマンド名および暗号化したいファイル名(複数指定可)を入力するだけである。その際にBcryptからはパスワードの指定が求められるが、これを入力し終われば後はユーザが行う操作は特にない。なおBcryptで暗号化されたファイルには、自動的に拡張子.bfeが付けられる。ファイルの復号化も同じ手順で行えるが、暗号化を行うか復号化を行うかはファイルの拡張子を基に判定されるので、ユーザが指定する必要はない。
Bcryptの暗号化アルゴリズムにはBlowfishが用いられている。パスフレーズはよく見られる8から56キャラクタの範囲内で指定するようになっているが、セキュリティを高めるため内部的にハッシュ化されて448ビットキーが生成される。デフォルトの設定では不正なファイル復元を防止するため、暗号化時にオリジナルのファイルを削除した後、上書き作業が3回行われるようになっている。こうした上書き回数も、ユーザ設定により変更できる。
このプログラムはオプション指定などによる操作の拡張性に欠けているため、暗号化ツールを選ぶ際の最有力候補となるケースはほとんどないだろうが、操作が極めて簡単というメリットを有している。開発元のWebサイトの説明によると、BcryptはLinuxおよび*BSDでコンパイルでき、その他にもWindowsバージョンが存在するとのことだが、このサイト自身はここ数年更新された形跡がない。
Ncrypt
Ncryptもファイルの暗号化と復号化に対応した簡易プログラムの1つだ。このプログラムではRijndael、Twofish、Serpentという3つのアルゴリズムの1つを選択するようになっているが、これらはいずれもAES(Advanced Encryption Standard)の最終候補にまで残った優秀な暗号化方式である。このプログラムの開発者はパスワード指定時のセキュリティを特に重視していたようで、ファイルの暗号化時にプレインテキストのパスワードが与えられた場合は、SHA-1ハッシュに変換した上で直ちにメモリ上から消去するという、念の入れた処理が用いられている。ここで生成されたハッシュはキー作成に使われるが、その処理が終了した後でこのハッシュ情報もメモリから消去されるようになっている。
Ncryptは、UnixバージョンのものとWindowsバージョンのものが用意されている。その使用法は非常に簡単で、コマンドプロンプトに続けて、ncrypt
というコマンド名、暗号化アルゴリズムの指定オプション、暗号化/復号化/ファイル消去の指定オプション、入力および出力ファイル名を入力するだけである。実行後にオリジナルのファイルはディスク上から消去されるが、Ncryptにはこうしたファイル削除だけを単独で実行するオプションも装備されており、この機能は特定のファイルを確実に消去したい場合にとても重宝する。
Pad
Padによる暗号化では、先に見たBcryptやNcryptとは異なり、ワンタイムパッド(one-time pad)という方式が用いられている。このプログラムの場合、オリジナルのファイルを複数の“パッド”に分割するのだが、これらはいずれも“デタラメな情報と区別できない状態”にされる。こうして分割されたファイルの内容は、一見すると無意味なランダムデータが収められているだけだが、必要な手順を踏むことでオリジナルの情報を復元できるようになっているのである。
ワンタイムパッドは古くから用いられている暗号化方式の1つであり、理論上は、この世に存在する解読不可能な唯一の暗号化方式だとされている。もっとも、実際の運用という観点から見た場合にはいくつかの弱点を有していることも知られている。具体的には、各パッドは1回しか使えない、パッドの作成には真の意味でランダムなデータを使う必要がある(真のランダムデータの作成は一般に思われているより難しい)、いわゆるマン・イン・ザ・ミドル攻撃(別名、中間者攻撃ないし介入者攻撃)に弱いという問題である。こうした制約があるため、日常的に行うタイプの暗号化作業にはお勧めできない。とは言うものの、使い方さえ選べばその有用性を生かすことは不可能ではなく、例えば言論の自由の保障を必要とする活動をしたい場合などもその1つである。ここに、権力者に見つかるとまずい意見を収めたファイルがあり、それを多数の人間に配布したいとしよう。そうした場合は、ファイルをPadで分割したもの(2つ以上)をそれぞれ異なるシステムに格納しておき、意見を伝えたい相手に対しては、これらの入手先とオリジナルファイルの復元法を教えるようにしておけばいいのである。
GnuPG
オープンソース系のファイル暗号化プログラムとして誰もが真っ先に思いつくのは、おそらくGnuPGだろう。ディストリビューションによってはプリインストールされている場合もあるくらいだ。GnuPGプログラムのFAQには「GnuPGとは、その正式名称であるGNU Privacy Guardが示すとおり、GNUにおける通信およびデータストレージのセキュア化を目的として開発されたツールです。このツールを用いることで、データの暗号化およびデジタル署名を施すことができます。特長としては、高度なキー管理機能を装備すると同時に、RFC 2440に提案されているOpenPGPインターネット標準に準拠しています。またNAI, IncのPGPと互換性を有すことも目標としています」という旨の説明がされている。
BcryptやNcryptなど多くのファイル暗号化プログラムが用いているのは対称暗号化という方式である。GnuPGの場合は、PGPと同様に公開鍵暗号化という方式を用いているが、対称暗号化の方式もサポートしている。公開鍵暗号化は、複数のファイルを対象とした署名や暗号化を日常的に実行する場合に便利であり、他のユーザとの暗号化ファイルの交換も簡単に行えるなど、様々なメリットを有している。対称暗号化および公開鍵暗号化の意味や仕組みについては、GnuPG Handbookの第2章およびGnuPG FAQの第7.1節に分かりやすくまとめられているので、そちらを参照して頂きたい。
GnuPGはコマンドライン専用のツールであるが、多数の機能が装備されているので、上級ユーザが機能的な不満を感じることはないはずだ。また操作性を向上させるための優れたフロントエンドも各種用意されている。私もKDE用に作成されたKGpgというフロントエンドを使用しているが、これが使えるおかげで定期的に行う暗号化作業の効率が大幅に向上している。例えば、ここで紹介したファイル暗号化ツールに共通する欠点として、どのツールもディレクトリの暗号化に対応していない点が挙げられる。ただし、特定のディレクトリの内部にあるファイルをすべて暗号化する、あるいは、そうしたディレクトリ中のファイルを.tar.gzないしは.zipファイルにまとめてから改めて暗号化するという処理はできるので、手間さえかければディレクトリ単位の暗号化と同等の処理を行えない訳でもない。ところがKGpgを使うと、目的のフォルダを直接ダブルクリックしてアーカイブ化と暗号化をするように指示するだけで、後はすべてこのプログラムが自動的に処理してくれるのである。その他にもKGpgには、デスクトップに配置される“シュレッダ”へのドラッグアンドドロップで任意のファイルを削除するという機能も装備されている(ただしディレクトリの削除はできない)。これは非常に重宝する機能ではあるが、使用するに当たっては、開発者による注意事項に目を通しておくことをお勧めする。KGpgの操作性は非常に優れており、コンピュータの使用経験の浅いユーザであっても短時間で使用法をマスターできるはずだ。
GnuPGは現在も着実に開発作業が進められているが、現状でも多数のオペレーティングシステムをサポートしている。そのコンパイルはほとんどのUnixで実行可能であり、Windows用に移植されたGpg4Winも利用できる。特にUnixシステムの場合はメールの暗号化もかなりのレベルで対応しており、メールクライアントに統合されたGnuPGについてはGnuPG FAQの第4.15節に一覧されている(残念ながらWindows環境におけるOpenPGP標準のサポート状況はそれほど高くない)。その他のメール用ツールが必要であれば、Aegyptenプロジェクトを探せばいいだろう。
読者の中には、暗号化技術に関するより詳しい解説に興味を覚えた方がおられるかもしれないが、初心者向けの手頃な解説としては、Wikipediaの記事およびCryptography FAQのサイトがお勧めである。
Rui Lopesはポルトガル人Webデザイナであり、独立系の映画製作も手がけると同時に、様々な分野の最新テクノロジを常に追いかけ続けている。