パッケージの「署名」確認

RPM テクノロジーによって、アプリケーションのインストールは即座に簡単に行うことができます。そして、インストールしたものが気に入らなければ、そのアプリケーションをシステムから簡単に削除できます。

しかし、RPM が使いやすいといっても、それは RPM のセキュリティが甘いということではありません。それは RPM 開発チームでは、Gnu Privacy Guard (GnuPG とも言います) を開発しており、これによってダウンロードしたパッケージが信頼できるものであることが保証されるためです。

たとえば、今、パッケージ coolapp-1.1.rpm をダウンロードしたとします。ファイルの整合性を簡単にチェックするには、以下のように入力します。

rpm -K coolapp-1.1-1.rpm

すぐに、coolapp-1.1-1.rpm: md5 OK というメッセージが表示されます。この短いメッセージは、ファイルのチェックが完了し、ダウンロードで損傷していないことを示しています。

それはよしとして、パッケージの開発者は信頼できるのでしょうか。本当にまちがいのない開発者でしょうか。そのとき、そのパッケージが開発者の GnuPG 署名されていれば、その開発者は名前通りのまちがいない開発者ということになります。

GnuPG は安全な通信のためのツールで、PGP 暗号技術に完全に取って代わるフリーな技術です。GnuPG を使用すれば、ドキュメントの正当性を認証し、他の受取人との間でデータを暗号化、および解読できます。このツールでは、PGP 5.x ファイルも解読、検証できます。

Red Hat Linux のインストール時、GnuPG はデフォルトでインストールされます。それでは、GnuPG を使用して開発者の鍵をチェックできるように、そのしくみの初歩を説明しましょう。

GnuPG では、暗号形式として公開鍵の交換という形式を使用しています。所有者の鍵をチェックすれば、その所有者が名乗っている通りの所有者であることを確認できます。公開鍵暗号では、ユーザは公開鍵秘密鍵とで構成される鍵の組を作成します。

公開鍵は通信相手または公開されているキーサーバ (ユーザの公開鍵を格納するオンラインリポジトリ) に交付して構いませんが、秘密鍵は誰にも伝えてはなりません。

新規の鍵の組の生成

GnuPG を使用するには、まず最初に新規の鍵の組、すなわち自身の公開鍵と秘密鍵を生成する必要があります。これは、シェルプロンプトで --gen-key オプションを使用すれば行うことができます。

秘密鍵は誰にも渡さないこと: 重要な点は、公開鍵は安全な通信を行いたい相手の誰に渡しても構いませんが、秘密鍵は決して誰にも渡さない、ということです。

Xterm では gpg --gen-key と入力します。ユーザは自分のユーザアカウントで作業することが最も多いわけですから、この操作は root からではなくユーザアカウントから行うようにします。初期画面に、推奨オプション (デフォルト) を含む鍵オプションが以下のように表示されます。

gpg (GnuPG) 1.0.1; Copyright (C) 1999 Free Software Foundation, Inc. This program comes with ABSOLUTELY NO WARRANTY.This is free software, and you are welcome to redistribute it under certain conditions.See the file COPYING for details.Please select what kind of key you want:(1) DSA and ElGamal (default) (2) DSA (sign only) (4) ElGamal (sign and encrypt) Your selection?

実際には、オプションの選択を必要とするほとんどの画面では、デフォルトオプションを、カッコ内にデフォルトと示して提示しています。特別な理由がない限り、[Enter] を押してデフォルトオプションをそのまま指定するとよいでしょう。

初期画面では、デフォルトオプションをそのまま指定してください: (1) DSA and EiGamal 。このオプションでは、デジタル署名を作成し、2 種類の方法で暗号化 (および解読) を行うことができます。[1] と入力し、[Enter] を押してください。

次に、キーサイズ、すなわち鍵の長さを選択します。一般に、鍵の長さが長いほど、ユーザのメッセージは不正アクセスに対する抵抗力が高くなることになります。デフォルトサイズの 1024 ビットでほとんどのユーザには十分ですから、[Enter] を押します。

次のオプションでは、鍵の有効期間の指定が求められます。通常、デフォルト - 0 = key does not expire - で問題ありません。有効期限をあえて設定する場合は、公開鍵を交換する相手にも有効期限を通知する必要があり、失効したら新しい公開鍵を交付する必要がありますから注意してください。

次の作業は、ユーザのユーザ ID、名前、電子メールアドレス、およびオプションのコメントの入力です。終了したら、入力した情報の要約が表示されます。

入力した選択を受け入れたら、パスフレーズ、すなわちユーザが新しい鍵の所有者であることを立証するパスワードを入力する必要があります。

パスフレーズには安全なものを: アカウントパスワードと同様、GnuPG のセキュリティを最適にするためには、好ましいパスフレーズが重要です。たとえば、大文字と小文字を混ぜる、数値や句読点記号を使用する、などの方法を取ってください。

パスフレーズを入力、確認すると、鍵が生成されます。以下のようなメッセージが表示されます。

We need to generate a lot of random bytes.It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. +++++.+++++.++++++++....++++++++++..+++++.+++++.+++++++.+++++++ +++.++++++++++++++++++++++++++++++++++++++..........................++++ 

画面の動きが止まったら、新しい鍵が作成され、ディレクトリ .gnupg に格納されます。鍵の一覧を表示するには、コマンド gpg --list-keys を使用します。以下のような画面が表示されます。

[newuser@localhost newuser]$ gpg --list-keys/home/newuser/.gnupg/pubring.gpg ----------------------------------------- pub 1024D/B7085C8A 2000-04-18 Your Name
<you@yourisp.net>sub 1024g/E12AF9C4 2000-04-18 

鍵の交換

鍵の組を作成したら、その公開鍵を誰かと交換することができます。交換は、自分の公開鍵をエクスポートし、相手の公開鍵をインポートすることによって行います。

鍵のエクスポート

鍵をエクスポートして、メールで送るまたは Web ページに貼り付けるようにするためには、以下のコマンドを使用します。

gpg --armor --exportyou@yourisp.net

結果は以下のように表示されます。

-----BEGIN PGP PUBLIC KEY BLOCK----- Version:GnuPG v1.0.1 (GNU/Linux) Comment:For info see http://www.gnupg.org mQGiBDj8sFIRBACoyF4UucTkkuDV/KIW/kCbyzAx18OKXosVJkn4Sb/zhc/IVxoE e/idTkzB292CUvN4KGFxCXyE0nKG/Vjc2lHwepsN41IcYQTVXUL0raITYYxyOHQe 7BJfjW0cYB/tyJLurr+iOB8JFs4HdZcCQzR9aufqcN4ErCVorrAM8k0y5wCggM9G +Qcr32lplMKXxgf6NLj1O2oCMUwECYrrUTbxE82aZAFuJj55O/QNyv0eWXWeJvzf oPLBTaxQDp4MaYZUc5qwgxY6sxz9gBUqAJRNUbg2U5lK5A4emNYVRh4tRs6etpaH +SQpA/4qRhKRHyTRK8CmGRPg9zfMkCVDHFjvA2cDXeN0Rz1Qd3WWWEGg3ytz4Omv sYkzMAh0988HMzxWCRKXVPJoNjGHXnyvt44eb5oFE6u/b+RDcNu5FL7V7snXfOfp GhF+YNq74tt9YFlOEjvQMRKcBXjU6NnZ1pWK7fPs8W1tF2Nzo7Q1UGF1bCBHYWxs YWdoZXIgKHd3dy5yZWRoYXQuY29tKSA8cGF1bGdhbGxAcmVkaGF0LmNvbT6IVgQT =NYlu -----END PGP PUBLIC KEY BLOCK----- 

出力の保存は簡単: 公開鍵ブロックは、出力をファイルにリダイレクトすることにより保存できます。保存すれば、これを電子メールのファイルに挿入したり、Web ページにコピーしたり、貼り付けたりすることができます。出力を /home ディレクトリにある mykey.txt というファイルにリダイレクトするには、以下のコマンドに > mykey.txt を追加します。

gpg --armor --exportyou@yourisp.net > mykey.txt

このようにすれば、誰かに鍵を送る時にはファイル mykey.txt をいつでも挿入できます。

鍵のインポート

誰かの公開鍵をインポートする場合、その鍵はキーリングに追加します。そうすることにより、その通信相手からのドキュメントまたはファイルをダウンロードする時に、キーリングに追加したその鍵に照らしてそのドキュメントの正当性を確認できます。

鍵をインポートするには、--import オプションを使用します。試しに Red Hat の公開鍵をダウンロード、インポートしてみてください。そうすれば、Red Hat のパッケージを検証したい時は、取得した鍵を使っていつでもチェックできます。

Red Hat の公開鍵は http://www.redhat.com/about/contact.html にあります。ブラウザから、ダウンロードリンクをクリックしながら [Shift] キーを押せば鍵をダウンロードでき、さらに [OK] ボタンを押すとそのファイル (例: redhat2.asc) を保存できます。ここでは、シェルプロンプトで以下のコマンドを入力し、鍵をインポートしてみてください。

gpg --import redhat2.asc 

インポート処理が終わるとメッセージが表示され、鍵が処理されたことが通知されます。鍵が追加されたことを確認する場合は、[gpg --list-keys] と入力します。今、Red Hat からダウンロードした鍵が、自分の鍵と共に表示されます。

 [newuser@localhost newuser]$gpg --list-keys/home/newuser/.gnupg/pubring.gpg ----------------------------------------- pub 1024D/DB42A60E 1999-09-23 Red Hat, Inc <security@redhat.com> sub 2048g/961630A2 1999-09-23 

鍵はリンク以外からでも: 場合によっては、鍵をリンクとしてダウンロードできないこともありますが、どのような鍵もテキストファイルとして保存できます。保存したファイルの場所と名前がわかりさえすれば、そのファイルをキーリングにインポートできます。

パッケージの検証

ダウンロードしたパッケージを確認するコマンド (rpm --K ファイル名) は、GnuPG 鍵の生成、および Red Hat の鍵を追加する前に使用したプロシージャと同じです。ただし、すでに鍵は Red Hat からユーザのキーリングに追加してありますから、md5 gpg OK という少し異なるメッセージが表示されます。これは、パッケージに損傷がないこと、およびパッケージの提供元、すなわち Red Hat が信頼できるものであることを表しています。

ここがスタート

GnuPG、および暗号技術には、ここで説明したよりもまだまだたくさんの内容があります。実は、はるかに深い情報があり、このマニュアルではとても説明できるものではありません。しかし、鍵管理、鍵のインポートエクスポートなどの概念は「Chapter 13」を参照すればその出発点とすることができます。