320.2 高度な GPG

2017-02-03

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 信用データベースといい。鍵の信用度や有効性を記録しているデータベース

スポンサーリンク