LoginSignup
18

More than 5 years have passed since last update.

gpgコマンドの使い方

Posted at

前回の投稿から、さらにGPGについて調べたので共有します。内容が多いので、説明は必要最低限にします。

gpg(GnuPG)は、OpenPGP(Pretty Good Privacy)*のGnu実装です。(* RFC4880)

web of trust

SSLではchain of trustで信頼関係を構築しますが、PGPではweb of trustという方法で、信頼関係を構築します。

web of trustでは、validとtrustという似て非なる二つの概念を用います。また、それらをつなぐものとして、signがあります。

valid
対象: key+uidの組
種類: unknown、marginal、full
意味: key+uidの身元は保証されている
trust
対象: key
種類: none、unknown、marginal、full、ultimate
意味: keyの管理者(owner)はきちんとした判断能力を有している
sign
key+uidの身元を保証すること

none trustとunknown trustに違いはありませんが、noneとすることでtrustできないという判断をしたことを明示できます。

full trustとultimate trustに違いはありません(多分)が、ultimateは自分が作ったkeyにのみ適用するようにします。また、自分が作ったkeyはデフォルトでultimate trustとなっています。

key+uidがfull validであるための条件は、

  • key+uidをsignしている
  • key+uidが3つ以上のmarginalのkeyにsignされている

です。どちらかを満たせばvalid(full valid)となります。一方、

  • key+uidが1つまたは2つのmarginal trustなkeyにsignされている

場合には、marginal validとなります。

web of trustの例は、Using trust to validate keysを見てください。

pub keyとsub key

PGPは公開鍵暗号を用います。そのため、使用される鍵は、秘密鍵と公開鍵のpairです。以下、鍵のpairを単に鍵といいます。

鍵pairには、pub keyとsub keyの二種類があります。pub keyが一番重要な鍵で、sub keyはpub keyに紐づけられた鍵です。pub keyが重要なのは、pub keyがあればsub keyをいくらでも作ることができるからです。

pub key <- sub key1
        <- sub key2
        ...

pub keyと公開鍵(public key)は別の概念なので、注意してください。また、pub keyはmaster keyと呼ばれることもあります。

keyserver

gpgコマンドを使ってローカルで作った公開鍵を公開するには、keyserverを利用します。keyserver同士は同期しているので、一つのkeyserverにアップロードするだけで良いです。また、当然ながら、keyserverにuploadされるのは公開鍵だけです。

keyserverに一度uploadしたものを削除することはできません。その場合は、revokeを使用してください。

コマンド操作

以下の説明で、

gpg> ...

となっている部分は、

gpg --edit-key <key-id>

で対話モードに入った後の状態を意味しています。

対話モードを終了するときは、

gpg> save

で、変更を保存してください。(trustを除く)

設定ファイル

gpgの設定ファイルは、~/.gnupg/gpg.confです。

~/.gnupg/gpg.conf
<option> <value> <value> ...

* <option>: ロングオプションの--を省略したもの

コマンドでも指定した場合、コマンドのオプションが優先されます。以下、コマンドのロングオプションにデフォルト値を設定したいときは、このファイルに書いてください。

keyserverに対する操作

使用するkeyserverは、コマンドのオプションで指定することができます。

gpg --keyserver <url>
  • 鍵の公開
gpg --send-keys <key id> <key id>
  • 鍵の取得
gpg --recv-key <key-id>
  • 鍵の検索
gpg --search-key <key-id>

key操作

  • keyring内の鍵を表示
# 公開鍵keyring
gpg --list-keys
# 秘密鍵keyring
gpg --list-secret-keys

秘密鍵を持っていない場合、gpg --list-secret-keysの結果は、

sec#  rsa3072 2019-01-29 [SC] [expires: 2020-01-29]
      AEE26A5E89D476DC5A8195132DD30C64EC41FA6B
uid           [ultimate] hogehoge <hogehoge@example.com>

のように、secの後に#が付いて表示されます。

pub key操作

自分が持っている鍵は、ローカルなkeyring(鍵束)にimport(追加)して保管します。

  • pub keyの作成
# 簡単バージョン
gpg --gen-key
# 詳しく設定
gpg --gen-full-key
  • pub keyのimport(ファイルから)

インターネット等から得たpub keyをkeyringに追加するには、

# 公開鍵/秘密鍵
gpg --import <key file>

とします。

  • pub keyのexport
# 公開鍵
gpg [--armor] [--output <file>] --export-keys <key-id>
# 秘密鍵
gpg [--armor] [--output <file>] --export-secret-keys <key-id>

armorを省略した場合は、バイナリ形式で出力されます。
outputを省略した場合は、標準出力に出力されます。

  • pub keyの削除
# 秘密鍵を持っている場合、先に消しておく
gpg --delete-secret-keys <key-id>
gpg --delete-keys <key-id>
  • pub keyのrevoke
# pub keyのrevoke用鍵の作成
gpg --gen-revoke <key-id> --outfile <file>
# pug keyのrevoke
gpg --import-key <file>
  • pub keyの更新
gpg --refresh-keys [<key-id>]

<key-id>を省略した場合は、keyring内の全ての鍵が更新されます。

sub key操作

  • sub keyの追加
gpg> addkey
  • sub keyの削除
gpg> key <key num>
gpg> delkey
  • sub keyのrevoke
gpg> key <key num>
gpg> revkey

uid操作

uidはpub keyに対してのみ関連づけられます(多分)。

  • uidの追加
gpg> adduid
  • uidの削除(鍵をkeyserverにuploadしていないことが前提)
gpg> uid <user num>
gpg> deluid
  • uidのrevoke
gpg> uid <user num>
gpg> revuid
  • uidに署名
gpg> uid <user num>
gpg> sign

sign

signはkey+uidの組*に対して行います。(* uidがkeyの間で一意でないことに注意)

signを行うユーザーは、--default-keyオプションまたは-uオプションで選択できます。このとき選択できるのは、

  • key-id
  • uid

で、key+uidの組は選択できないので注意してください。

signには3段階のlevelがあり、

0 means you make no particular claim as to how carefully you verified the key.

1 means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful
for a "persona" verification, where you sign the key of a pseudonymous user.

2 means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID
on the key against a photo ID.

3 means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the
key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key
owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key
belongs to the key owner.
(man gpg(1)より)

です。どのlevelでsignするかは--default-cert-levelオプションで設定できます。デフォルトは0です。また、--ask-cert-levelオプションを付けることで、sign実行時にlevelを聞いてくれます。ネットの記事では、このオプションをつけている場合が多いです。

  • signの表示
gpg --list-sigs
# または
gpg --check-sigs
  • signの追加

uidの選択を省略すると、全てのuidに対してsignされます。

gpg> uid <user num>
gpg> sign
  • signの削除
gpg> uid <user num>
gpg> delsig
uid  hogefuga <hogefuga@example.com>
sig!3        2CDD40C5ECD1FA3B 2019-01-30  [self-signature]
Delete this good signature? (y/N/q)n  #入力
uid  hogefuga <hogefuga@example.com>
sig!         B294B64FD3D54E8B 2019-01-30  piyoo <piyoo@example.com>
Delete this good signature? (y/N/q)y  #入力
  • signのrevoke
gpg> uid <user num>
gpg> revsig
You have signed these user IDs on key 1BE140C53CD1FC3B:
     hogefuga <hogefuga@example.com>
   signed by your key 2CDD40C5ECD1FA3B on 2019-01-30
   signed by your key 3A94B64AC3364C8B on 2019-01-30

user ID: "hogefuga <hogefuga@example.com>"
signed by your key 2CDD40C5ECD1FA3B on 2019-01-30
Create a revocation certificate for this signature? (y/N) n #入力
user ID: "hogefuga <hogefuga@example.com>"
signed by your key 3A94B64AC3364C8B on 2019-01-30
Create a revocation certificate for this signature? (y/N) y #入力

trust (ownertrust)

trustはpub keyに対して設定されます。trustはローカル環境(trust-db)に保存されます。

trustには5つのlevelがあります。

1 = I don't know or won't say
2 = I do NOT trust
3 = I trust marginally
4 = I trust fully
5 = I trust ultimately
(gpg> trustの実行結果より)

gpg> trust

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18