| BIND GnuPGを使ったPGP署名の確認方法 | ||||
| BINDを提供するISCでは、OpenPGPを使って各ファイルのデジタル署名を行っている | ||||
| デジタル署名によって、ファイルの改ざんの有無と、署名確認の時に使用した公開鍵で作成されたことを証明することができる | ||||
| ここでは、OpenPGPを実装したGnuPGソフトウェアを使って、BINDのソースファイルの署名確認を行う流れを説明する | ||||
| GnuPGの鍵の管理方法や暗号化等についての説明は行わない | ||||
| 用語の説明 | ||||
| PGP ・・・・ Pretty Good Privacy フィル・ジマーマンが開発、公開した暗号ソフトウェア | ||||
| OpenPGP ・・・・ PGPをベースにRFC化された仕様のこと またはその技術のこと | ||||
| GnuPG ・・・・ OpenPGPに従って開発されたフリーの暗号ソフトウェア | ||||
| GnuPGを使った署名確認の流れ | ||||
| 署名によるファイルの改ざんの有無だけをチェックしたい場合は、以下の2と4は不要 | ||||
| ただし、5を実行したときに、「この鍵は信用できる署名で証明されていません!」と警告が出力される | ||||
| 1. CentOSにGnuPGパッケージをインストールする | ||||
| 2. 自分自身の鍵のペア(秘密鍵と公開鍵)を作成する | ||||
| 3. ISCのPGP公開鍵をダウンロードし、インポートする | ||||
| 4. 自分の鍵を使って、ISCのPGP公開鍵を署名する(=信頼する) | ||||
| 5. BINDのソースファイルと署名ファイルをダウンロードし、ISCのPGP公開鍵を使ってデータの改ざんがないことを確認する | ||||
| 1.GnuPGのインストール | ||||
| CentOS5.4では、デフォルトでGnuPGのパッケージがインストールされている | ||||
| [ 確認方法 ] | ||||
| # yum list installed | grep gnupg | ||||
| gnupg.i386 1.4.5-14 installed | ||||
| インストールされていない場合は、yumコマンドでインストールを行う | ||||
| [ 設定例 ] | ||||
| # yum install gnupg | ||||
| コマンド一覧 | ||||
| PGP署名でよく使われるコマンド | ||||
| 鍵の作成 | ||||
| gpg --gen-key | 公開鍵と秘密鍵を作成する | |||
| 公開鍵のインポート | ||||
| gpg --import 公開鍵 | ファイル形式で提供されている場合 | |||
| gpg --search-keys 相手メールアドレス [ --keyserver 鍵サーバ ] | 鍵サーバから検索してダウンロードする場合 | |||
| 鍵の確認 | ||||
| gpg --list-keys | インポート済み公開鍵の表示 | |||
| gpg --list-secret-key | インポート済み秘密鍵の表示 | |||
| gpg --list-sigs | 署名された鍵の表示 | |||
| 署名ファイルの検証 | ||||
| gpg --verify 署名ファイル | クリア署名(対象ファイル内に署名内容が含まれる)の検証 | |||
| gpg --verify 分離署名ファイル 署名対象のファイル | 分離署名(署名が別ファイルで保存)の検証 BINDはこちら | |||
| ローカル署名 | ||||
| gpg --lsign-key (署名対象公開鍵の)ユーザID | 自分の秘密鍵を使って相手の公開鍵をローカル署名 | |||
| インポート済鍵の削除 | ||||
| gpg --delete-secret-key 鍵ID | インポート済み秘密鍵の削除(公開鍵よりも先に実施する) | |||
| gpg --delete-key 鍵ID | インポート済み公開鍵の削除 | |||
| gpg --delete-secret-and-public-key 鍵ID | 秘密鍵と公開鍵の両方を同時に削除 | |||
| 2.自分自身のPGP鍵を作成する | ||||
| 署名確認だけしたいのであれば、自分の鍵は使わないので作成する必要がない | ||||
| ここでは、4でISCの公開鍵を署名(=信頼)するために作成することにしている | ||||
| [ 設定例 ] | ||||
| # gpg --gen-key | 自分自身の鍵を作成する | |||
| gpg (GnuPG) 1.4.5; Copyright (C) 2006 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. | ||||
| gpg: ディレクトリー「/root/.gnupg」ができました | 鍵や設定ファイル等を保存するディレクトリとして、 | |||
| gpg: 新しい構成ファイル「/root/.gnupg/gpg.conf」ができました | $HOME/.gnupgが作られる | |||
| gpg: 警告: 「/root/.gnupg/gpg.conf」のオプションは起動している間、有効になりません | ||||
| gpg: 鍵輪「/root/.gnupg/secring.gpg」ができました | ||||
| gpg: 鍵輪「/root/.gnupg/pubring.gpg」ができました | ||||
| ご希望の鍵の種類を選択してください: | ||||
| (1) DSAとElgamal (既定) | ||||
| (2) DSA (署名のみ) | ||||
| (5) RSA (署名のみ) | ||||
| 選択は? 1 | この検証では特に決めることもないのでデフォルトの1にする | |||
| DSA keypair will have 1024 bits. | ||||
| ELG-E keys may be between 1024 and 4096 bits long. | ||||
| What keysize do you want? (2048) | デフォルトの2048で良いのでenter | |||
| 要求された鍵長は2048ビット | ||||
| 鍵の有効期限を指定してください。 | ||||
| 0 = 鍵は無期限 | ||||
| <n> = 鍵は n 日間で満了 | ||||
| <n>w = 鍵は n 週間で満了 | ||||
| <n>m = 鍵は n か月間で満了 | ||||
| <n>y = 鍵は n 年間で満了 | ||||
| 鍵の有効期間は? (0)0 | 特に有効期限を設けないので0を選択 | |||
| Key does not expire at all | ||||
| これで正しいですか? (y/N) y | ||||
| あなたの鍵を同定するためにユーザーIDが必要です。 | ||||
| このソフトは本名、コメント、電子メール・アドレスから | ||||
| 次の書式でユーザーIDを構成します: | ||||
| "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>" | ||||
| 本名: test1000 | 本名は5文字以上 | |||
| 電子メール・アドレス: test1000@example.co.jp | メールアドレス入力 | |||
| コメント: my gpg-key | コメントはなくてもよい | |||
| 次のユーザーIDを選択しました: | ||||
| “test1000 (my gpg-key) <test1000@example.co.jp>” | ||||
| 名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? O | 問題なければo(英文字のオー) | |||
| 秘密鍵を保護するためにパスフレーズがいります。 | ||||
| パスフレーズを入力: xxxxxx | パスワード設定 | |||
| パスフレーズを再入力: xxxxxx | ||||
| 今から長い乱数を生成します。キーボードを打つとか、マウスを動かす | ||||
| とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で | ||||
| 乱雑さの大きないい乱数を生成しやすくなるので、お勧めいたします。 | ||||
| ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | ||||
| +++++.+++++++++++++++++++++++++++++++++++++++++++++.. | ||||
| ++++++++++..++++++++++>++++++++++..........>+++++.................................+++++ | ||||
| 十分な長さの乱数が得られません。OSがもっと乱雑さを収集 | 何もしなくても数分たてば完了する | |||
| できるよう、何かしてください! (あと277バイトいります) | もしキーボードをたたくのであれば無難な文字列にすること | |||
| gpg: /root/.gnupg/trustdb.gpg: 信用データベースができました | 公開鍵と秘密鍵が作成された | |||
| gpg: 鍵7A286F08を絶対的に信用するよう記録しました | 自分の鍵は絶対的に信用する | |||
| 公開鍵と秘密鍵を作成し、署名しました。 | 自分の鍵を自分の鍵で署名(=信頼)する | |||
| gpg: 信用データベースの検査 | ||||
| gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル | ||||
| gpg: 深さ: 0 有効性: 1 署名: 0 信用: 0-, 0q, 0n, 0m, 0f, 1u | ||||
| pub 1024D/7A286F08 2011-09-23 | ||||
| 指紋 = B399 EF0B F095 59BB BE36 B250 99FC A88D 7A28 6F08 | ||||
| uid test1000 (my gpg-key) <test1000@example.co.jp> | ||||
| sub 2048g/9903E9D4 2011-09-23 | ||||
| # gpg --list-keys | インポート済み公開鍵の確認 | |||
| /root/.gnupg/pubring.gpg | ||||
| ------------------------ | ||||
| pub 1024D/7A286F08 2011-09-23 | 今回作成した自分の公開鍵 | |||
| uid test1000 (my gpg-key) <test1000@example.co.jp> | ||||
| sub 2048g/9903E9D4 2011-09-23 | ||||
| # gpg --list-secret-keys | インポート済み秘密鍵の確認 | |||
| /root/.gnupg/secring.gpg | ||||
| ------------------------ | ||||
| sec 1024D/7A286F08 2011-09-23 | 今回作成した自分の秘密鍵 | |||
| uid test1000 (my gpg-key) <test1000@example.co.jp> | ||||
| ssb 2048g/9903E9D4 2011-09-23 | ||||
| # gpg --list-sigs | 署名した鍵の確認 | |||
| /root/.gnupg/pubring.gpg | ||||
| ------------------------ | ||||
| pub 1024D/7A286F08 2011-09-23 | 自分の鍵で自分の公開鍵を署名している | |||
| uid test1000 (my gpg-key) <test1000@example.co.jp> | ||||
| sig 3 7A286F08 2011-09-23 test1000 (my gpg-key) <test1000@example.co.jp> | ||||
| sub 2048g/9903E9D4 2011-09-23 | ||||
| sig 7A286F08 2011-09-23 test1000 (my gpg-key) <test1000@example.co.jp> | ||||
| 3.ISCのPGP公開鍵のインポート | ||||
| 署名確認をするためには、ファイルの署名で使われている公開鍵(ここではISCのPGP公開鍵)をインポートしなければならない | ||||
| [ 設定例 ] | ||||
| # cd /tmp | 適当なディレクトリへ移動 | |||
| # wget http://149.20.64.42/files/pgpkey2009.txt | ISCのPGPの公開鍵のダウンロード | |||
| # ls | 確認 | |||
| pgpkey2009.txt | ||||
| # gpg --import pgpkey2009.txt | ISCの公開鍵をインポート | |||
| gpg: 鍵0B7BAE00: 公開鍵“Internet Systems Consortium, Inc. (Signing key, 2009) | ||||
| <pgpkey2009@isc.org>”を読み込みました | ||||
| gpg: 処理数の合計: 1 | ||||
| gpg: 読込み: 1 (RSA: 1) | ||||
| gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル | ||||
| gpg: 深さ: 0 有効性: 1 署名: 0 信用: 0-, 0q, 0n, 0m, 0f, 1u | ||||
| # gpg --list-keys | インポートした公開鍵の確認 | |||
| /root/.gnupg/pubring.gpg | ||||
| ------------------------ | ||||
| pub 1024D/7A286F08 2011-09-23 | 自分の公開鍵 | |||
| uid test1000 (my gpg-key) lt;test1000@example.co.jp> | ||||
| sub 2048g/9903E9D4 2011-09-23 | ||||
| pub 2048R/0B7BAE00 2009-05-19 [満了: 2012-05-18] | 今回インポートしたISCの公開鍵の情報 | |||
| uid Internet Systems Consortium, Inc. (Signing key, 2009) <pgpkey2009@isc.org> | 2048bit RSA鍵 鍵ID:0B7BAE00 | |||
| sub 2048R/321216F8 2009-05-19 [満了: 2012-05-18] | 有効期限:2012/5/18 | |||
| ↑ http://www.isc.org/about/openpgp で公開されている | ||||
| 鍵IDと一致しているかぐらいは確認する | ||||
| [ 参考 ] | ||||
| # gpg --search-keys pgpkey2009@isc.org | 公開鍵を鍵サーバからダウンロードした場合 | |||
| gpg: “pgpkey2009@isc.org”をhkpサーバーsubkeys.pgp.netから検索 | 電子メールで検索したが、このアドレスで間違いないか不安 | |||
| (1) Internet Systems Consortium, Inc. (Signing key, 2009) <pgpkey2009@isc. | ||||
| 2048 bit RSA key 0B7BAE00, 作成: 2009-05-19 | ||||
| Keys 1-1 of 1 for "pgpkey2009@isc.org". 番号(s)、N)次、またはQ)中止を入力してください >1 | ||||
| gpg: 鍵0B7BAE00をhkpからサーバーsubkeys.pgp.netに要求 | ||||
| gpg: 鍵0B7BAE00: 公開鍵“Internet Systems Consortium, Inc. (Signing key, 2009) | ||||
| <pgpkey2009@isc.org>”を読み込みました | ||||
| gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル | ||||
| gpg: 深さ: 0 有効性: 1 署名: 0 信用: 0-, 0q, 0n, 0m, 0f, 1u | ||||
| gpg: 処理数の合計: 1 | ||||
| gpg: 読込み: 1 (RSA: 1) | ||||
| 4.自分の鍵を使って、ISCのPGP公開鍵を署名する | ||||
| インポートしたISCのPGP公開鍵を署名(=信頼)する | ||||
| ただし、その署名の範囲が外部に影響しないようにローカルだけにする | ||||
| なぜなら、本当にISCのPGP公開鍵だという証拠もないのに署名(=信頼)するからである | ||||
| [ 設定例 ] | ||||
| # gpg --lsign-key \ | 公開鍵をローカル署名する | |||
| "Internet Systems Consortium, Inc. (Signing key, 2009) <pgpkey2009@isc.org>" | " "内は、ローカル署名する対象のユーザID | |||
| ユーザIDの代わりに鍵IDの0B7BAE00を指定してもよい | ||||
| pub 2048R/0B7BAE00 作成: 2009-05-19 満了: 2012-05-18 利用法: SC | ||||
| 信用: 未知の 有効性: 未知の | ||||
| sub 2048R/321216F8 作成: 2009-05-19 満了: 2012-05-18 利用法: E | ||||
| [ unknown] (1). Internet Systems Consortium, Inc. (Signing key, 2009) <pgpkey2009@isc.org> | ||||
| pub 2048R/0B7BAE00 作成: 2009-05-19 満了: 2012-05-18 利用法: SC | ||||
| 信用: 未知の 有効性: 未知の | ||||
| 主鍵の指紋: FA76 7A86 A371 E359 22F6 A5C8 D811 B53F 0B7B AE00 | ||||
| Internet Systems Consortium, Inc. (Signing key, 2009) <pgpkey2009@isc.org> | ||||
| この鍵は2012-05-18で満了します。 | ||||
| 本当にこの鍵にあなたの鍵“test1000 (my gpg-key) <test1000@example.co.jp>”で署名してよいですか | ||||
| (7A286F08) | ||||
| 署名は、書出し不可に設定されます。 | ||||
| 本当に署名しますか? (y/N) y | ||||
| 次のユーザーの秘密鍵のロックを解除するには | ||||
| パスフレーズがいります:“test1000 (my gpg-key) <test1000@example.co.jp>” | ||||
| 1024ビットDSA鍵, ID 7A286F08作成日付は2011-09-23 | ||||
| パスフレーズを入力:xxxxx | 自分の鍵のパスワードを入力 | |||
| # gpg --list-sigs | 署名した鍵の確認 | |||
| /root/.gnupg/pubring.gpg | ||||
| ------------------------ | ||||
| pub 1024D/7A286F08 2011-09-23 | ||||
| uid test1000 (my gpg-key) <test1000@example.co.jp> | ||||
| sig 3 7A286F08 2011-09-23 test1000 (my gpg-key) <test1000@example.co.jp> | ||||
| sub 2048g/9903E9D4 2011-09-23 | ||||
| sig 7A286F08 2011-09-23 test1000 (my gpg-key) <test1000@example.co.jp> | ||||
| pub 2048R/0B7BAE00 2009-05-19 [満了: 2012-05-18] | 今回自分の鍵で署名をしたISCの鍵の情報 | |||
| uid Internet Systems Consortium, Inc. (Signing key, 2009) <pgpkey2009@isc.org> | ||||
| sig 3 0B7BAE00 2009-05-19 Internet Systems Consortium, Inc. (Signing key, 2009) | ||||
| <pgpkey2009@isc.org> | ||||
| sig 2DC6FF82 2009-05-19 [ユーザーIDが見つかりません] | ||||
| sig 1BC91E6C 2009-05-19 [ユーザーIDが見つかりません] | ||||
| sig CF9890F8 2009-05-20 [ユーザーIDが見つかりません] | ||||
| sig 6BB6BE6A 2009-05-21 [ユーザーIDが見つかりません] | ||||
| sig D297AB8E 2009-05-20 [ユーザーIDが見つかりません] | ||||
| sig L 7A286F08 2011-09-23 test1000 (my gpg-key) <test1000@example.co.jp> | 自分の鍵でローカル署名(sig L)していることを示す | |||
| sub 2048R/321216F8 2009-05-19 [満了: 2012-05-18] | ||||
| sig 0B7BAE00 2009-05-19 Internet Systems Consortium, Inc. (Signing key, 2009) | ||||
| <pgpkey2009@isc.org> | ||||
| 5.PGP署名の確認 | ||||
| BINDのソースファイルと署名ファイルをダウンロードし、ISCのPGP公開鍵を使ってデータの改ざんがないことを確認する | ||||
| ISCでは、分離署名(署名内容が別のファイルで保存される)方式を採用している | ||||
| [ 設定例 ] | ||||
| # wget http://ftp.isc.org/isc/bind9/9.6-ESV-R3/bind-9.6-ESV-R3.tar.gz | BIND本体のダウンロード | |||
| # wget http://ftp.isc.org/isc/bind9/9.6-ESV-R3/bind-9.6-ESV-R3.tar.gz.asc | 署名ファイルのダウンロード (拡張子は.asc) | |||
| # ls | 確認 | |||
| bind-9.6-ESV-R3.tar.gz pgpkey2009.txt bind-9.6-ESV-R3.tar.gz.asc | (同じディレクトリ内に保存しないといけないわけではない) | |||
| # gpg --verify bind-9.6-ESV-R3.tar.gz.asc bind-9.6-ESV-R3.tar.gz | 署名の確認 | |||
| gpg: 2010年12月01日 11時24分15秒 JSTにRSA鍵ID 0B7BAE00で施された署名 | ISCの公開鍵(鍵ID:0B7BAE00)で署名されていることを示す | |||
| gpg: “Internet Systems Consortium, Inc. (Signing key, 2009) <pgpkey2009@isc.org>”からの 正しい署名 | ||||
| [ 参考 ] ISCのPGP公開鍵を署名しなかった場合 | ||||
| 警告が出るだけ | ||||
| ローカル署名した場合と比べて何か問題となっているわけではない | ||||
| # gpg --verify bind-9.6-ESV-R3.tar.gz.asc bind-9.6-ESV-R3.tar.gz | ||||
| gpg: 2010年12月01日 11時24分15秒 JSTにRSA鍵ID 0B7BAE00で施された署名 | ||||
| gpg: “Internet Systems Consortium, Inc. (Signing key, 2009) <pgpkey2009@isc.org>” | ||||
| からの正しい署名 | ||||
| gpg: 警告: この鍵は信用できる署名で証明されていません! | ISCの公開鍵が本当にISCのものかどうか証明されていない | |||
| gpg: この署名が所有者のものかどうかの検証手段がありません。 | ||||
| 主鍵の指紋: FA76 7A86 A371 E359 22F6 A5C8 D811 B53F 0B7B AE00 | ||||