# Keyoxide

この記事の内容は2021年3月頃のものです。2022年12月に内容の一部を更新しました。

Keyoxide (opens new window)は、分散されたオンラインアイデンティティを確立する方法のひとつです。Keyoxideに則ってデジタル署名を追加した公開鍵をOpenPGPに則って公開すれば、特定のサービスに依存せずオンラインのアイデンティティを確立し確認できます。

自分の公開鍵にはidentity proofとして下記のような形式のnotation[1]を添付したデジタル署名を追加してOpenPGP公開鍵サーバに公開します。

proof@ariadne.id=自分の管理するSNSアカウントのURL

自分の管理するSNSアカウントには、proofとして自分の鍵対の指紋を掲示します。

Keyoxideでは、identity proofとSNSアカウントに掲示されたproofとに一貫性があることを確認することで、identity proofを追加した鍵対を管理している人と、SNSアカウントにproofを掲示する権限のある人とが同一であることを確認できます。日常的にSNSで交流している相手の公開鍵を信頼の網に追加する場合には、Keyoxideによるアイデンティティの確認を参考にできそうです。

# アイデンティティの確立

例として、主著者のMastodonアカウントにproofを追加してみます。同様の手順で、Mastodonの他、Pleroma、Pixelfed、Peertube、WriteFreelyなどにproofを追加 (opens new window)できます。

# Identity Proofの追加

まず、自分の公開鍵にidentity proofを追加します。鍵対の指紋はF60960D80B224382CA8D831CB56C20316D6E8279で、Mastodonアカウントはhttps://mastodon.zunda.ninja/@zundanにあります。

$ gpg --edit-key F60960D80B224382CA8D831CB56C20316D6E8279
gpg> notation
Enter the notation: proof@ariadne.id=https://mastodon.zunda.ninja/@zundan
gpg> save

追加したnotationは下記のように--edit-keyshowprefコマンドで表示される内容のNotations:の行で確認することができます。

$ gpg --edit-key F60960D80B224382CA8D831CB56C20316D6E8279
gpg (GnuPG) 2.2.19; Copyright (C) 2019 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Secret key is available.

sec  rsa3072/B56C20316D6E8279
     created: 2020-06-24  expires: 2022-06-24  usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa3072/164F21FF001C8CD1
     created: 2020-06-24  expires: 2022-06-24  usage: E
[ultimate] (1). zunda <zundan@gmail.com>

gpg> showpref
[ultimate] (1). zunda <zundan@gmail.com>
     Cipher: AES256, AES192, AES, 3DES
     Digest: SHA512, SHA384, SHA256, SHA224, SHA1
     Compression: ZLIB, BZIP2, ZIP, Uncompressed
     Features: MDC, Keyserver no-modify
     Notations: proof@ariadne.id=https://mastodon.zunda.ninja/@zundan

gpg> quit

ヒント

Notationは、自己署名として、公開鍵に付随しているユーザーID (メールアドレス)のいずれかに添付されます。公開鍵に付随しているすべてのnotationは、インポートした公開鍵に対するgpg --check-sigs --list-options show-notationsコマンドやファイルに対するgpg --show-key --with-sig-listコマンドで表示することができますが、あるユーザーIDに複数の自己署名が添付されている場合には、最新のもののみが有効になる場合が多く (opens new window)、表示されたnotationの一部には公開鍵から取り除かれたものもある (opens new window)場合があります。

追加したnotationを含む公開鍵をOpenPGP公開鍵サーバに公開します。

$ gpg --send-key F60960D80B224382CA8D831CB56C20316D6E8279
gpg: sending key B56C20316D6E8279 to hkps://keys.openpgp.org

# SNS Proofの追加

Mastodonにproofを追加する場合には、アカウントのプロフィール補足情報に、自分の鍵対の指紋を設定します。この他のActivityPubアカウントへのproofの追加手順は、ActivityPub — Keyoxide Docs (opens new window)を参考にしてみてください。

Mastodonのアカウントのプロフィール補足情報への鍵対の指紋の設定

# アイデンティティの確認

KeyoxideによるProfile URL generator (opens new window)で得られるProfile URL (https://keyoxide.org/鍵対の指紋)を閲覧することでアイデンティティの確認ができます。 今回の例ではhttps://keyoxide.org/F60960D80B224382CA8D831CB56C20316D6E8279です。

Keyoxideによるアイデンティティの確認

主著者のMastodonアカウントの右に「verified ✔」と表示されていて、identity proofとMastodonに掲示したproofとの間に矛盾がないことがわかります[2]

注意

公開鍵のidentity proofとSNSアカウントのproofはそれぞれなりすましをしたい人でも設定することができてしまいます。アイデンティティの確認のためには、identity proofに設定されているSNSアカウントと、そのSNSアカウントに掲示されているproofの鍵対の指紋との両方が一致する必要があります。

注意

Keyoxideによるプロファイルページに表示されているアイコンは、アイデンティティの確認対象ではありません。見た目にだまされないよう注意が必要です。

ヒント

Keyoxideによるプロファイルページに表示されているアイコンは、Gravatar (opens new window)から設定することができます。

KeyoxideのProfile URL generatorに指定した公開鍵にidentity proofが追加されていない場合には「No claims associated」と、notationに指定したSNSアカウントにproofが掲示されていない場合には「unverified」と表示されます。

# 手作業での確認

Keyoxideによるアイデンティティの確認は、万が一Keyoxideのウェブサイトが停止してしまっている場合でも可能です。

# Identity Proofの取得

OpenPGP公開鍵サーバなどから取得した公開鍵に追加されているidentity proofは、下記のように確認することができます。

ダウンロードした公開鍵について確認する場合は、確認対象のユーザーID (下記ではuid zunda <zundan@gmail.com>)に添付された自己署名のうち最新のもの(下記では2021-03-06)のみが有効です。その自己署名に含まれるSignature notation proof@ariadne.id=あるいはSignature notation proof@metacode.biz=で始まる行が有効なidentity proofです。

$ gpg --show-keys --with-sig-list ~/Downloads/F60960D80B224382CA8D831CB56C20316D6E8279.asc
pub   rsa3072 2020-06-24 [SC] [expires: 2022-06-24]
      F60960D80B224382CA8D831CB56C20316D6E8279
uid                      zunda <zundan@gmail.com>
sig 3    N   B56C20316D6E8279 2021-03-06  zunda <zundan@gmail.com>
   Signature notation: proof@metacode.biz=https://mastodon.zunda.ninja/@zundan
sig 3        B56C20316D6E8279 2021-03-01  zunda <zundan@gmail.com>
  :
sub   rsa3072 2020-06-24 [E] [expires: 2022-06-24]
sig          B56C20316D6E8279 2020-06-24  zunda <zundan@gmail.com>

自分の鍵束に追加されている公開鍵について確認する場合は、下記の手順で有効なnotationのみを表示させることができます。Notation proof@ariadne.id=あるいはNotation proof@metacode.biz=で始まる行が有効なidentity proofです。

$ gpg --edit-key F60960D80B224382CA8D831CB56C20316D6E8279
gpg (GnuPG) 2.2.19; Copyright (C) 2019 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Secret key is available.

sec  rsa3072/B56C20316D6E8279
     created: 2020-06-24  expires: 2022-06-24  usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa3072/164F21FF001C8CD1
     created: 2020-06-24  expires: 2022-06-24  usage: E
[ultimate] (1). zunda <zundan@gmail.com>

gpg> showpref
[ultimate] (1). zunda <zundan@gmail.com>
     Cipher: AES256, AES192, AES, 3DES
     Digest: SHA512, SHA384, SHA256, SHA224, SHA1
     Compression: ZLIB, BZIP2, ZIP, Uncompressed
     Features: MDC, Keyserver no-modify
     Notations: proof@metacode.biz=https://mastodon.zunda.ninja/@zundan

gpg> quit

# SNSに掲示されたProofの確認

上記で得られたSNSアカウントをブラウザなどで閲覧し、確認対象の鍵対の指紋をページ内検索で見つけます。

Mastodonに表示されたproof

注意

なりすましを防ぐため、確認対象のSNSアカウントのみが書きこめる場所に鍵対の指紋が書いてあることの確認が必要です。


  1. 本稿の執筆時にはproof@metacode.biz notationが推奨されていましたが、2021年11月からproof@ariadne.id notationが推奨となりました (opens new window)proof@metacode.biz notationも引き続き有効です。 ↩︎

  2. 本稿の執筆後にnotationの追加や削除をおこなっています。現状ではアイデンティティの確認ができない状態になっているかもしれません。 ↩︎