GitHub に登録されている OpenPGP 公開鍵の情報を取得する

no extension

【2020-10-14】 同じ話を Zenn で書いてしまった。 併せてどうぞ orz

ネットで見かけた小ネタで(笑)

GitHub の git リポジトリにアクセスする際に使う SSH 公開鍵を取得する方法は割と知られているようだが

$ curl -s https://github.com/spiegel-im-spiegel.keys

似た感じで登録している OpenPGP 公開鍵も取得できる。 ただし出力は JSON 形式で,こんな感じ。

$ curl -s https://api.github.com/users/spiegel-im-spiegel/gpg_keys
[
  {
    "id": 305745,
    "primary_key_id": null,
    "key_id": "2287557885231C76",
    "raw_key": "-----BEGIN PGP PUBLIC KEY BLOCK-----\r\n\r\n ... \r\n-----END PGP PUBLIC KEY BLOCK-----",
    "public_key": "...",
    "emails": [
      {
        "email": "...",
        "verified": true
      }
    ],
    "subkeys": [
      {
        "id": 305746,
        "primary_key_id": 305745,
        "key_id": "5B07C6DBBBDAB020",
        "raw_key": null,
        "public_key": "...",
        "emails": [
        ],
        "subkeys": [
        ],
        "can_sign": false,
        "can_encrypt_comms": true,
        "can_encrypt_storage": true,
        "can_certify": false,
        "created_at": "2018-02-15T11:34:33.000Z",
        "expires_at": null
      }
    ],
    "can_sign": true,
    "can_encrypt_comms": false,
    "can_encrypt_storage": false,
    "can_certify": true,
    "created_at": "2018-02-15T11:34:33.000Z",
    "expires_at": "2020-02-15T00:22:09.000Z"
  },
  {
    ...
  },
  ...
]

いろいろ端折ってるが,あしからず。

この中で raw_key 項目に GitHub へ登録した ASCII armor 形式の公開鍵がそのまま入っている。 取り出しは jq コマンドを使って以下のようにできる。

$ curl -s https://api.github.com/users/spiegel-im-spiegel/gpg_keys | jq -r .[0].raw_key
-----BEGIN PGP PUBLIC KEY BLOCK-----

mFIEWoTPwRMIKoZIzj0DAQcCAwRBr6HVaUrhEBxBcty/ToFv3aJyC+yojwVG84CL
...
JgA=
=gjzz
-----END PGP PUBLIC KEY BLOCK-----

ただし raw_key 項目は登録した公開鍵によっては null になっているようだ。 なんでだろう。

登録した鍵の公開鍵パケットのみであれば public_key 項目にセットされている1

$ curl -s https://api.github.com/users/spiegel-im-spiegel/gpg_keys | jq -r .[0].public_key
xlIEWoTPwRMIKoZIzj0DAQcCAwRBr6HVaUrhEBxBcty/ToFv3aJyC+yojwVG84CLs/XUsT7TUUxrrME+RrzbCs4PMYjdZ9B9nCcD1ni2Bjk+GI9/

これはバイナリデータを Base64 形式で符号化したもののようだ。 なので base64 コマンドで復号し,更に拙作の gpgpdump で可視化すれば

$ curl -s https://api.github.com/users/spiegel-im-spiegel/gpg_keys | jq -r .[0].public_key | base64 -d | gpgpdump 
Public-Key Packet (tag 6) (82 bytes)
    Version: 4 (current)
    Public key creation time: 2018-02-15T09:09:37+09:00
        5a 84 cf c1
    Public-key Algorithm: ECDSA public key algorithm (pub 19)
    ECC Curve OID: nistp256 (256bits key size)
        2a 86 48 ce 3d 03 01 07
    ECDSA EC point (uncompressed format) (515 bits)

という感じに中身を見ることができる。

以上,広告記事でした(笑)

ブックマーク

参考図書

photo
暗号化 プライバシーを救った反乱者たち
スティーブン・レビー (著), 斉藤 隆央 (翻訳)
紀伊國屋書店 2002-02-16
単行本
4314009071 (ASIN), 9784314009072 (EAN), 4314009071 (ISBN)
評価     

20世紀末,暗号技術の世界で何があったのか。知りたかったらこちらを読むべし!

reviewed by Spiegel on 2015-03-09 (powered by PA-APIv5)

photo
暗号技術入門 第3版 秘密の国のアリス
結城 浩 (著)
SBクリエイティブ 2015-08-25 (Release 2015-09-17)
Kindle版
B015643CPE (ASIN)
評価     

SHA-3 や Bitcoin/Blockchain など新しい知見や技術要素を大幅追加。暗号技術を使うだけならこれ1冊でとりあえず無問題。

reviewed by Spiegel on 2015-09-20 (powered by PA-APIv5)


  1. ちなみに公開鍵パケットのみで自己署名もない状態では暗号化も署名検証もできない。少なくとも GnuPG はそうなっている。 ↩︎