github メモ(途中)

commit に自動で署名を付ける
git config user.signingkey 192401039+skyflare2001@users.noreply.github.com
git config commit.gpgsign true

Password and authentication
  • Security Keys は FIDO U2F が使われている。
    • ログイン時には、パスワードの入力が必要。
  • Passkeys は FIDO2 で、Yubikey の場合、PIN 入力が求められる。
    • Passkey でログインする場合は、ユーザ名、パスワードの入力がいらない。
    • ykman fido credentials list で登録された情報を確認すると、
      github.com d829230454ed43b9... account-name の形式で登録が追加されていた
    • 同じ Passkey に複数の github アカウントを登録すると、
      github.com d829230454ed43b9... account-name1
      github.com 3027caa4c1f296744ed340c6... account-name2
      という形で登録され、Passkey でログインを試みると、選択画面が表示される。

ykman fido credentials list の出力フォーマットは、
<relying_party_identifier(RPID)> <credential_id> <user_name>

github の場合は、RPID に github.com が入り、user_name に github のユーザ名が入っている。(恐らく、ログインするユーザ名リストはここから取っている。RPID が github.com なものをリストしている。)

同じアカウントで、Passkey の登録を一度消して、もう一度登録し直しても、credential_id は同じだった。
同じアカウントに、複数の Passkey を登録した場合も、それぞれの鍵に登録される credential_id は同じになっていた。
(google account の passkey も、複数の鍵に FIDO2 の登録をしたとき、アカウントが同じ場合は credential_id が同じになる。)

Settings の Emails は、あくまで、自身が管理しているメールアドレス
  • 既に github アカウントに紐付けられているメールアドレスは登録できない。
  • Primary の他にアドレスを追加できるが、ここに登録すると、そのアドレスで github にアカウント登録できなくなる。
    • verify email していなくても、何故か登録できなくなる。いたずら厳禁
verified 表示のために必要なこと(gpg 署名の場合)
  • commit の Author の email が、github が本人と認識している正規のメールアドレスになっている
    • email は、
      • Primary のメールアドレス
      • Settings → Emails で新規に追加したメールアドレス
        (このアドレスで github からの email の検証を済ませておくことが必要)
      • アドレス非公開設定にしたときに表示される ID+USERNAME@users.noreply.github.com のようなアドレス
  • commit の Author の email が登録されている github アカウントで、その GPG 署名の公開鍵を GPG keys から登録済み
  • git commit -S[keyid] で署名を付けたとき、現時点で github は発行者のメールアドレスは見ていない。commit の Author の email とそのキーID の鍵が登録されているかどうかをみている。つまり、発行者のメールアドレスは適当でもいい。
    (今後仕様が変更される可能性はある。)

GPG 署名の登録は、そのメールアドレスのアカウントで行えばよく、submit 先の git repository で登録はいらない。
verified は、その commit と Author の紐付けを github が証明するだけで、その repository の owner が承認したとかではない。

git commit -S[keyid] で署名を付けたとき

同じキーID に複数の uid が紐付いているとき、

$ gpg -k
/home/user/.gnupg/pubring.kbx
-----------------------------
pub   ed25519 2024-11-30 [SC]
      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
uid           [  不明  ] skyflare2001 <192401039+skyflare2001@users.noreply.github.com>
uid           [  究極  ] yubi-cmd-key <yubi-cmd-key@xxx>
uid           [  不明  ] skyflare2001 <skyflare2001@xxx>
sub   cv25519 2024-11-30 [E]
sub   ed25519 2024-11-30 [A]

-S[key-id] で署名を付けると、キーIDと発行者が埋め込まれる。

$ git commit -a -m test -Syubi-cmd-key@xxx
$ git log --show-signature
commit 528895964a4c40659110c209c404cb3244f4333a
gpg: 2025年01月26日 13時53分46秒 JSTに施された署名
gpg:                EDDSA鍵xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxを使用
gpg:                発行者"yubi-cmd-key@xxx"
gpg: "skyflare2001 <192401039+skyflare2001@users.noreply.github.com>"からの正しい署名 [不明の]
gpg:                 別名"yubi-cmd-key <yubi-cmd-key@xxx>" [究極]
gpg:                 別名"skyflare2001 <skyflare2001@xxx>" [不明の]
Author: user <192401039+skyflare2001@users.noreply.github.com>
Date:   Sun Jan 26 13:53:46 2025 +0900

    test

-S[key-id] で、同じ鍵でも別の uid のメールアドレスにした場合は、発行者はそのアドレスになる。

$ git commit -a -m test -S192401039+skyflare2001@users.noreply.github.com
$ git log --show-signature
commit f7353bf7b8d12d4c23464945b3c42bba3c119ca0 (HEAD -> work)
gpg: 2025年01月26日 13時54分12秒 JSTに施された署名
gpg:                EDDSA鍵xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxを使用
gpg:                発行者"192401039+skyflare2001@users.noreply.github.com"
gpg: "skyflare2001 <192401039+skyflare2001@users.noreply.github.com>"からの正しい署名 [不明の]
gpg:                 別名"yubi-cmd-key <xxx>" [究極]
gpg:                 別名"skyflare2001 <xxx>" [不明の]
Author: user <192401039+skyflare2001@users.noreply.github.com>
Date:   Sun Jan 26 13:54:12 2025 +0900

    test

以下の部分は、自身の $HOME/.gnupg の鍵情報に基づいていて、commit に埋め込まれているわけではない。
そのため、uid を追加したら、commit に変更がなくても、git log –show-signature で別名が増えた状態になる。

gpg: "skyflare2001 <192401039+skyflare2001@users.noreply.github.com>"からの正しい署名 [不明の]
gpg:                 別名"yubi-cmd-key <xxx>" [究極]
gpg:                 別名"skyflare2001 <xxx>" [不明の]