web-dev-qa-db-ja.com

暗号化中のGnuPGサブキー選択の優先順位

次の6つのサブキーのセットがあります

$ gpg -K
...
ssb>  rsa2048 2017-10-04 [E] [expires: 2027-10-02]
ssb>  rsa2048 2017-10-04 [S] [expires: 2027-10-02]
ssb>  rsa2048 2017-10-04 [A] [expires: 2027-10-02]
ssb>  rsa2048 2015-02-12 [E] [expires: 2025-01-05]
ssb>  rsa2048 2016-01-05 [A] [expires: 2026-01-02]
ssb>  rsa2048 2016-08-20 [S] [expires: 2026-08-18]

コンテキストは、新しいスマートカード(Yubikey)を購入し、そのための新しいサブキーを生成したことです。私はpubkeyに古いサブキーの記録を保持したかったので、たとえばGithubは、古いサブキーで署名された私の古いコミットを「確認済み」として表示し続けます。

ただし、これからは新しいサブキーのみprimarlyが使用されるようにしたいと思います。例えば誰かが私に暗号化されたメッセージを送信した場合、新しいサブキーを使用してもらいます。

私は気づきました gpg -eはデフォルトで新しい暗号化サブキーを使用するため、これは意図したとおりに機能しますが、私の質問はwhy?です。

つまり、暗号化中にgpgがどのキーを使用するかをどのように決定するか?サブキーがファイルに保存される順序(上記のとおり)または作成/有効期限(新しいものが優先)に基づいていますか?

6
Radek Simko

GnuPGは常に、それぞれの操作に対して最新の有効な(サブ)キーを選択します(通常、サポートされているアルゴリズムを使用した最新の失効しないキー)。特定のサブキーを選択した場合でも、GnuPGは最初に関連する主キーを解決してから、この選択プロセスを開始します。これを上書きするには、postfix !を指定されたキーに。これは、たとえば、必要に応じてgit構成で行うことができます。

私は規範的なリファレンスを知りません( GnuPGコードを除く ):RFC 4880(OpenPGP)もGnuPGのマニュアルページもマニュアルも動作を定義していないようです。キー比較関数からの関連するコード行:

if (old->validity == new->validity && uid_is_ok (&new->key, uid)
    && old->creation_time < new->creation_time)
  return -1;      /* Both keys are of the same validity, but the
                     NEW key is newer.  */
4
Jens Erat