320.2 高度な GPG
重要度 4
説明 GPGの使用方法を知っていることが求められる。これには、鍵の生成、署名、鍵サーバへの発行も含まれる。複数の秘密鍵とIDの管理も含まれる。
主要な知識範囲
- GPGを使用した暗号化と署名
- 秘密鍵・公開鍵の管理
- GPGサーバの知識
- GPG の設定
重要なファイル、用語、ユーティリティ
- openssl
- RSA, DH 及び DSA
- SSL
- X.509
- CSR
- CRL
gpgとは?
GNU Privacy Guard (GnuPG) とは、Pretty Good Privacy (PGP) の別実装として、GPL に基づいた暗号化ソフトである。
OpenPGP 規格 (RFC4880) に完全準拠しているが、古い PGP との互換性は完全ではない。
gpgコマンド
書式
gpg [–homedir ディレクトリ名] [–options ファイル名] [オプション] サブコマンド [引数]
※ []は省略可能
gpg 主なサブコマンド
| -d または –decrypt | データを複合 |
| –delete-key [名前] | 公開鍵リングから鍵を削除 |
| –edit-key | 鍵への署名または編集 |
| -e または –encrypt | データを暗号化 |
| -s [ファイル名] または –sign [ファイル名] | 署名を作成 |
| –gen-key | 新しい鍵を作成 |
| –gen-revoke [名前] | 指定した名前の失効証明書を作成 |
| –list-key [名前] | 公開鍵リングに登録されている鍵情報を一覧表示 |
| –list-piblic-keys [名前] | 公開鍵リングに登録されている鍵情報を一覧表示 |
| –recv-keys [鍵ID] | 鍵サーバから鍵を読み込む |
| –refresh-keys [鍵ID] | 鍵サーバに接続し、ローカルに保存している公開鍵を更新 |
| –search-keys [名前] | 鍵サーバから鍵を探す |
| –send-keys [鍵ID] | 鍵サーバに鍵を登録する |
| –sign-key [名前] | 相手の公開鍵を自分の公開鍵で署名 |
| –verify | [署名ファイル名] [検証ファイル名] 署名を検証 |
gpg 主なオプション
| -homedir [ディレクトリ名] | GPGのホームディレクトリ |
| -keyring [ファイル名] | キーリングの一覧に指定した鍵を加える |
| -keyserver [サーバ名] | 鍵を検索に、指定した鍵サーバを用いる |
| -o [フィアル名] または –output [ファイル名] | 指定したファイルに出力 |
| –options [ファイル名] | 指定したファイルからオプションを読む |
例
+ 新しい鍵のペアを作成
※ ssh経由だと作成できないので実機でログインして作成する
# gpg --gen-key
gpg (GnuPG) 2.0.14; Copyright (C) 2009 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
ご希望の鍵の種類を選択してください:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (署名のみ)
(4) RSA (署名のみ)
# 「2」を入力
選択は? 2
DSA keys may be between 1024 and 3072 bits long.
# 「2048」を入力
What keysize do you want? (2048)
要求された鍵長は2048ビット
鍵の有効期限を指定してください。
0 = 鍵は無期限
<n> = 鍵は n 日間で満了
<n>w = 鍵は n 週間で満了
<n>m = 鍵は n か月間で満了
<n>y = 鍵は n 年間で満了
# 「0」を入力
鍵の有効期間は? (0)
Key does not expire at all
# 「y」を入力
これで正しいですか? (y/N) y
You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
# 本名: 「gpgtest」を入力
本名: gpgtest
# 電子メール・アドレス: 「hoge@example.com」を入力
電子メール・アドレス: hoge@example.com
コメント:
次のユーザーIDを選択しました:
“gpgtest <hoge@example.com>”
# 「O」を入力
名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? O
秘密鍵を保護するためにパスフレーズがいります。
今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、お勧めいたします。
[省略]
# 「598939CF」が鍵ID
gpg: 鍵598939CFを絶対的に信用するよう記録しました
公開鍵と秘密鍵を作成し、署名しました。
gpg: 信用データベースの検査
gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル
gpg: 深さ: 0 有効性: 1 署名: 0 信用: 0-, 0q, 0n, 0m, 0f, 1u
pub 2048D/598939CF 2015-10-05
指紋 = CAD8 B6FB 2663 6103 8DBA 8A68 6BE5 3BC8 A2A4 EF37
uid gpgtest<xxxxxx@example.com>
sub 2048g/F55060E7 2015-10-04
キーリングに登録されている鍵情報の一覧を表示する
# gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub 2048D/598939CF 2015-10-04
uid pgptest <xxxxxx@gamil.com>
sub 2048g/F55060E7 2015-10-04
+ 公開の信用度を設定
# gpg --edit-key 598939CF
gpg (GnuPG) 2.0.14; Copyright (C) 2009 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
秘密鍵が使用できます。
pub 2048D/598939CF 作成: 2015-10-04 満了: 無期限 利用法: SC
信用: 絶対的 有効性: 絶対的
sub 2048g/F55060E7 作成: 2015-10-04 満了: 無期限 利用法: E
[ultimate] (1). pgptest <gmkkk@gamil.com>
# コマンドで「trust」を入力
コマンド> trust
pub 2048D/598939CF 作成: 2015-10-04 満了: 無期限 利用法: SC
信用: 絶対的 有効性: 絶対的
sub 2048g/F55060E7 作成: 2015-10-04 満了: 無期限 利用法: E
[ultimate] (1). pgptest <gmkkk@gamil.com>
他のユーザーの鍵を正しく検証するために、このユーザーの信用度を決めてください
(パスポートを見せてもらったり、他から得た指紋を検査したり、などなど)
1 = 知らない、または何とも言えない
2 = 信用し ない
3 = ある程度信用する
4 = 完全に信用する
5 = 絶対的に信用する
m = メーン・メニューに戻る
# 「5」を入力
あなたの決定は? 5
本当にこの鍵を絶対的に信用しますか? (y/N) y
pub 2048D/598939CF 作成: 2015-10-04 満了: 無期限 利用法: SC
信用: 絶対的 有効性: 絶対的
sub 2048g/F55060E7 作成: 2015-10-04 満了: 無期限 利用法: E
[ultimate] (1). pgptest <gmkkk@gamil.com>
# 「quit」を入力
コマンド> quit
鍵サーバから公開鍵を取込み
鍵サーバー(pgp.mit.edu)からBINDの公開鍵(911A4C02)を取り込む
# gpg --keyserver pgp.mit.edu --recv-keys 911A4C02 gpg: 鍵911A4C02をhkpからサーバーpgp.mit.eduに要求 gpg: 鍵911A4C02: 公開鍵“Internet Systems Consortium, Inc. (Signing key, 2015-2016) <codesign@isc.org>”を読み込みました gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル gpg: 深さ: 0 有効性: 1 署名: 0 信用: 0-, 0q, 0n, 0m, 0f, 1u gpg: 処理数の合計: 1 gpg: 読込み: 1 (RSA: 1)
署名されたファイルを検証
上記の作業で、鍵サーバー(pgp.mit.edu)からBINDの公開鍵(911A4C02)を取り込む済みのこと
必要用件:bind-9.10.3.tar.gz、bind-9.10.3.tar.gz.ascもダウンロード済みなこと
書式:
gpg –verify XXXX.asc(sig) YYYY.tar.gz
gpg –verify XXXX.asc(sig)
gpgv XXXX.asc(sig)
※ 電子署名のファイルは元のファイル名に.ascという拡張子を追加したものであることが多い。また、.sigの場合もあります。
# gpg --verify bind-9.10.3.tar.gz.asc bind-9.10.3.tar.gz gpg: 2015年09月16日 10時19分52秒 JSTにRSA鍵ID 911A4C02で施された署名 gpg: “Internet Systems Consortium, Inc. (Signing key, 2015-2016) <codesign@isc.org>”からの正しい署名 gpg: 警告: この鍵は信用できる署名で証明されていません! gpg: この署名が所有者のものかどうかの検証手段がありません。 主鍵の指紋: ADBE 9446 286C 7949 05F1 E075 6FA6 EBC9 911A 4C02 # gpg --verify bind-9.10.3.tar.gz.asc # gpgv bind-9.10.3.tar.gz.asc
鍵サーバに鍵を登録
# gpg --keyserver pgp.nic.ad.jp --send-keys 3136XXXA gpg: 鍵3136XXXAをhkpサーバーpgp.nic.ad.jpへ送信 + 相手の公開鍵を自分の秘密鍵で署名 # gpg --sign-key 598XXXCF + 破棄証明書を作成 # gpg --gen-revoke 598XXXCF sec 2048D/598XXXCF 2015-10-04 pgptest <xxx@example.com> この鍵にたいする失効証明書を作成しますか? (y/N) y 失効の理由を選択してください: 0 = 理由は指定されていません 1 = 鍵がパクられました 2 = 鍵がとりかわっています 3 = 鍵はもう不用です Q = キャンセル (ここではたぶん1を選びます) # 「1」を入力 あなたの決定は? 1 予備の説明を入力。空行で終了: 失効理由: 鍵がパクられました (説明はありません) # 「y」を入力 よろしいですか? (y/N) y 次のユーザーの秘密鍵のロックを解除するには パスフレーズがいります:“pgptest <xxx@example.com>” 2048ビットDSA鍵, ID 598XXXCF作成日付は2015-10-04
gpgv
gpgv は gnupg の機能限定バージョンで、署名のチェックのみ行なうことができる
書式
gpgv オプション [ファイル名]
[]は省略可能
gpg-agent
gpg-agent は gpg の秘密鍵を管理するにに利用できる
パスフレーズの入力をキャッシュしておいてくれるので、パスフレーズの入力を1回だけ行えば良くなります
書式
gpgpg-agent オプション [ファイル名]
[]は省略可能
キーリング
名前の通り、鍵を束ねるものです。これらのファイルは、実行ユーザの $HOME/.gnupg/ に格納されています
| secring.pgp | 秘密鍵を束ねるキーリング |
| pubring.pgp | 公開鍵を束ねるキーリング |
| trustedkeys.pgp | 信頼された公開鍵が格納されているキーリング |
| trustdb.gpg | 信用データベースといい。鍵の信用度や有効性を記録しているデータベース |


コメント