Debain での GnuPG
GnuPG は OpenPGPの実装の一つで、GPGと呼ばれることもあります。 Debian では、2016/07/12現在、gpg コマンドは 1.4系で、 gpg2 パッケージで 2.1系を提供しています。 普段使いでgpg 1.4系をわざわざ使う必要はないとは思うので、以下ではgpg2 を利用することにしています。 以下では、gpg と gpg2 の違いに触れることはありませんが、例えば、RSAではなく楕円暗号を使おうと思ったら、gpg2 を使うしかありません。
PGP での鍵の使われ方
ざっくり言うと、暗号化と署名の場合に鍵を利用することがあると思います。 説明の都合で、ファイルをAさんからBさんへ送るというシチュエーションで考えてみます。 (AさんとBさんが同一人物でも同じです)
- ファイルを暗号化して送信
- Aさんは暗号化をするとき、Bさんの公開鍵を利用します
- Bさんは復号するとき、 Bさんの暗号鍵を利用します
- ファイルに署名して送信
- Aさんは署名するとき、Aさんの秘密鍵を利用します
- Bさんは署名を検証するとき、 Aさんの公開鍵を利用します
鍵の管理体系について
上述の通り、暗号化と署名時に鍵を利用することができますが、事前に公開鍵を配布しておく必要があります。 このために、公開鍵サーバーを利用することができます。
公開鍵をここにアップロードしておき、公開鍵を利用したいユーザーは、鍵ID (16進8桁) を指定するかユーザー情報(“名前 <メールアドレス>")の一部を指定して、鍵を受け取ることができます。 ただ、ユーザー情報から、鍵を検索・受け取ることはできるのですが、第3者が同じ情報を使って別の鍵を登録することもできてしまいます。 もし、間違って、別の鍵でファイルを暗号化してしまうと、相手は復号できないだけでなく、別の人が復号できていまいます。
そういった事態を極力防ぐために、フィンガープリントを確認することが必要になります。 (鍵ID, ユーザー情報, フィンガープリントの3つを重複させることはめったにできない、という前提です。) 秘密鍵を生成した人は、鍵ID, ユーザー情報のほか、フィンガープリントを提供しておき、公開鍵を利用する人は、公開鍵を受け取ったときにフィンガープリントを確認してから、利用するという手順です。
鍵の有効性を確認するための別の考え方として、 web of trust という考え方があり、 What is not WoT? (In Japanese: WoT とはなんでないか) に詳しく載っています。
gpg2の使い方
鍵の生成
gpg2 --full-gen-key
鍵の失効
# まず失効用の証明書を作成しておく
# 厳重に保管しておく必要がある
gpg2 -o revoke.asc --gen-revoke <keyid>
# ... 失効したくなったら
gpg2 --import revoke.asc
公開鍵サーバーの利用
アップロード
gpg2 --send-key <keyid>
ダウンロード
# 検索
gpg2 --search-keys (<keyid>|<user>)
# インポート
gpg2 --recv-keys <keyid>
鍵を信用する
gpg2 --edit-key <keyid>
gpg> trust
...
gpg> (適切に 1-5 のどれかを選択)
gpg> q
gpg2 --update-trustdb
公開鍵のフィンガープリント
gpg2 --fingerprint
ファイルの暗号化
gpg2 -e -r <keyid> plain.txt
# 同時署名をする場合
gpg2 -se -r <keyid> plain.txt
ファイルの復号
gpg2 plain.txt.gpg
ファイルの署名
gpg2 -sa plain.txt
ファイルの署名の検証
gpg2 -d plain.txt.asc
資料
- GNU Privacy Guard講座 トップ
- GnuPG で遊ぶ - 暗号化してみる
- 盗難/紛失に備えるGPG鍵の作り方
- What is not WoT? (In Japanese: WoT とはなんでないか)
comments powered by Disqus