GnuPGのメモ @ Debian Sid

Posted on Tue 12 July 2016 in blog

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

資料