PGPとGnuPG
RSA暗号アルゴリズムを組み込んで,使いやすい暗号ツールとして開発されたのがPGPです。製品としてPGPメールが有名ですが,PGP自体はメールに限らずファイルや文書に暗号化や電子署名ができるツールです。
PGPの概略は図10のようになっています。平文にはまず自分の署名を付けます。それは前半のMD5とRSAで実行されます。平文本体に署名するのではなく,MD5という機能で計算された数値(ハッシュ値)を,秘密鍵で暗号化します。これが電子署名になります。なお,MD5については次号以降で解説する予定です。
 |
図10●PGPの仕組み
[画像のクリックで拡大表示] |
本体に署名しないのは,発信者の公開鍵を持っていなくても受信者はとりあえず平文が読める利点に加え,公開鍵暗号は動作速度が遅いために巨大なファイルの暗号化には時間を要するので,代わりにハッシュ値に署名しています。
この電子署名を平文本体とつなげて,ZIPでサイズを圧縮します。その後が,秘匿のための暗号化です。この暗号化には送信相手の公開鍵を必要としますが,その公開鍵で文書全体を暗号化するわけではありません。文書全体の暗号化にはIDEAという共有鍵暗号を使います。IDEAはDESよりもソフトウエアで実現すると高速に動作することを目標に設計された暗号方式です。RSA暗号は,このIDEA暗号で使った鍵をさらに暗号化するのに使われています。
このように公開鍵暗号の弱点である計算速度を,高速な共有鍵暗号で補い,共有鍵の受け渡しを公開鍵暗号を使って行います。これをハイブリッド方式と呼ぶことがあります。
PGPは使いやすく便利なツールだったのですが,使われている暗号がRSAとIDEAであり,これらは商用で利用すると使用料を支払わなければなりませんでした。そこで商用でも無料で使用できるように暗号方式を差し替えて開発されたのが「GnuPG」です。LinuxにもGnuPGがインストールされていて,簡単に公開鍵暗号を試してみることができます。
コマンド名がgpgです。PGPがpgpだったのに対し,GnuPGではつづりが入れ替わっていることに注意してください。GnuPGバージョン2では,コマンド名がpgp2になっています。
コマンド指示はオプションで指定することになっており,秘密鍵は次のように作成します。
対話的に進めていき,必要事項を入力すると自分の秘密鍵と公開鍵のペアが出来ます。公開鍵をexportして,他人に送信できます。-aオプションを付けると,読める状態で出力されます。例えば,図11のような出力が公開鍵になります。
$gpg2 -a --export hata
----BEGIN PGP PUBLIC KEY BLOCK----
Version: GnuPG v2.0.1 (GNU/Linux)
mQGiBEXb/jgRBAC1yOD・・・
lMMQj6ZI21IEkSsKqMV・・・
wxXo0Fhw/kXImfTW1a2・・・
・・・
SVS+2zYjSZvZAKCVV23・・・
MhKqagU=
=FuUO
----END PGP PUBLIC KEY BLOCK----
|
図11●公開鍵の作成方法
|
送られてきた公開鍵は--importオプションで取り込むことができます。取り込んだ鍵は--listコマンドで一覧を表示できます(図12)。
$gpg2 -a --list-keys
/home/hata/.gnupg/pubring.gpg
-----------------------------
pub 1024D/8C624967 2007-02-21
uid Alice Hata <alice@hata.cc>
sub 2048g/A355824F 2007-02-21
pub 1024D/DB362349 2007-04-02
uid Hiroaki Hata <hata@qc5.so-net.ne.jp>
sub 2048g/50CF499F 2007-04-02
|
図12●取り込んだ公開鍵をリストアップ
|
あるファイルtest.txtを暗号化するには-eオプションを使います。
やはり対話形式で,受信者は誰なのかを指定すると暗号化されたファイルが出力されます。出来上がったtest.txt.ascが暗号化ファイルです。- aオプションも指定したので,暗号化ファイルも文字データとして読み取れますので,メールに張り付けて送ることもできます。ただし,catコマンドやエディタで中身を確認すれば,意味をなさない暗号文だということが分かるでしょう。