GitHub に登録されている OpenPGP 公開鍵の情報を取得する
【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)
という感じに中身を見ることができる。
以上,広告記事でした(笑)
ブックマーク
参考図書
- 暗号化 プライバシーを救った反乱者たち
- スティーブン・レビー (著), 斉藤 隆央 (翻訳)
- 紀伊國屋書店 2002-02-16
- 単行本
- 4314009071 (ASIN), 9784314009072 (EAN), 4314009071 (ISBN)
- 評価
20世紀末,暗号技術の世界で何があったのか。知りたかったらこちらを読むべし!
- 暗号技術入門 第3版 秘密の国のアリス
- 結城 浩 (著)
- SBクリエイティブ 2015-08-25 (Release 2015-09-17)
- Kindle版
- B015643CPE (ASIN)
- 評価
SHA-3 や Bitcoin/Blockchain など新しい知見や技術要素を大幅追加。暗号技術を使うだけならこれ1冊でとりあえず無問題。