次の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
がどのキーを使用するかをどのように決定するか?サブキーがファイルに保存される順序(上記のとおり)または作成/有効期限(新しいものが優先)に基づいていますか?
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. */