keyoxideセットアップ

Table of Contents

背景・動機

友人のこまもか君(@Comamoca_)がTwitterでなりすましをされていた。

自分はまだされたことがないが、将来的になりすまされた時の為に今のうちに手を打っておこうということで今回対応した。

試したこと・やったこと

0. 方針を決める

インターネットでなりすましではないことを証明するのは根本的に難しい。

ChatGPTによると、本人性を証明するためのアプローチは次の3つが上げられる。

  • A. 他媒体連携型証明(クロスメディア検証)
  • B. 動画・写真による自己証明
  • C. 本人だけが知る事実・履歴を提示

今回の要件としては、自分のことをあまり知らない不特定多数から見て自己をどう証明するのかというものがある。 私の場合Twitter/GitHub/ブログがメインなので、これらを証明する手段が求められている。(A. 他媒体連携型証明)

GPG KeyのYubiKey運用をはじめた にも書いたとおり、可能な限りGPGに寄せたいと考えている。 自分のソーシャルアカウントや公開鍵との関連性を証明するサービスはいくつかあるようだ。

  • Keybase
  • Keyoxide
  • Sigstore
  • etc..

当初keybaseを採用しようとしていたが、自分にとってSNS機能は不要だったり、Zoomが買収してから開発が停滞気味という噂を聞き、Keyoxideを採用することにした。

また友人のnatsukiumも利用していたので決断の後押しになった。

https://keyoxide.org/DCCB2D69E06EEAA48904F8A12D5ADD7530F56A42

1. Keyoxideに認識させる

基本的にはドキュメントを参考に上から順に行えばよい。

https://docs.keyoxide.org/getting-started/creating-profile-openpgp/

GPG KeyのYubiKey運用をはじめた ですでにSigned Keyは持っていたのでGPG Key生成手順はスキップできた。

次のコマンドで public.asc を生成して管理画面からアップロードする。

https://keys.openpgp.org/upload

$ gpg --armor --output public.asc --export <key>

keyoxide側が勝手にopenpgpを参照してページを作ってくれる。

https://keyoxide.org/0B10DAA7BA0236D7382287660F79C0AB03FD7A1C

2. Twitter紐付け作業

こちらを参考に対応する。

https://docs.keyoxide.org/service-providers/twitter/

openpgp4fpr:<fpr> を含めたツイートをする。

ツイートのリンクを notation で付与する。

$ gpg --edit-key <key>

> notation
@Enter the notation: proof@ariadne.id=https://twitter.com/takeokunn/status/1927387715441414384

> save

次のコマンドで public.asc を生成して管理画面からアップロードする。

https://keys.openpgp.org/upload

$ gpg --armor --output public.asc --export <key>

3. GitHub紐付け作業

こちらを参考に対応する。

https://docs.keyoxide.org/service-providers/github/

openpgp4fpr:<fpr> を含めたGistを作成する。

https://gist.github.com/takeokunn/51d8c50bb4e6f08ff50d68a125d7fb54

Gistのリンクを notation を付与する。

$ gpg --edit-key <key>

> notation
@Enter the notation: proof@ariadne.id=https://gist.github.com/takeokunn/51d8c50bb4e6f08ff50d68a125d7fb54

> save

次のコマンドで public.asc を生成して管理画面からアップロードする。

https://keys.openpgp.org/upload

$ gpg --armor --output public.asc --export <key>

4. DNS紐付け作業

こちらを参考に対応する。

https://docs.keyoxide.org/service-providers/dns/

openpgp4fpr:<fpr> を含めたTXT Recordを作成する。

$ dig TXT takeokunn.org | grep openpgp
takeokunn.org.          300     IN      TXT     "openpgp4fpr:0B10DAA7BA0236D7382287660F79C0AB03FD7A1C"

DNSの情報を notation を付与する。

$ gpg --edit-key <key>

> notation
@Enter the notation: proof@ariadne.id=dns:takeokunn.org?type=TXT

> save

次のコマンドで public.asc を生成して管理画面からアップロードする。

https://keys.openpgp.org/upload

$ gpg --armor --output public.asc --export <key>

得られた結果・所感

多少作業が詰まったが、無事keyoxide上で証明できた。

https://keyoxide.org/0B10DAA7BA0236D7382287660F79C0AB03FD7A1C

showpref で現在の notations を確認できる。

@gpg> showpref
[ultimate] (1). takeo obara <bararararatty@gmail.com>
     Cipher: AES256, AES192, AES, 3DES
     AEAD: OCB, EAX
     Digest: SHA512, SHA384, SHA256, SHA224, SHA1
     Compression: ZLIB, BZIP2, ZIP, Uncompressed
     Features: MDC, AEAD, Keyserver no-modify
     Notations: proof@ariadne.id=https://gist.github.com/takeokunn/51d8c50bb4e6f08ff50d68a125d7fb54
                proof@ariadne.id=https://twitter.com/takeokunn/status/1927387715441414384
                proof@ariadne.id=dns:takeokunn.org?type=TXT

今後の展開・検討事項

今回はkeyoxideに入門しただけなので、keyoxide自体の仕組みや実際の実装を読んで理解を深めたい。