このサービスについては、中国語圏ではまだ紹介されていないようですが、GitHub やいくつかの Fediverse ではユーザーが使用しているのを見かけます。
類似の Keybase サービスは以前試したことがありますが、PGP サブキーや PGP の機能をサポートしていなかったため、使用しませんでした。一方、Keyoxide の設計は確かにより分散化され、自主的です。
一応、いくつかの作業を行いました(中国語翻訳や他の言語でのプロトコルの実装を含む)ので、ここで紹介します。
正確な詳細、ドキュメント、コードについては公式ウェブサイトKeyoxideを参照してください。
概要#
公式によれば:
Keyoxide はプライバシーに配慮したツールで、分散型オンラインアイデンティティを作成および検証します。
実生活のアイデンティティに対するパスポートのように、Keyoxide は人々のオンラインアイデンティティを検証するために使用され、誰とやり取りしているのか、偽者ではないことを確認できます。
実生活のパスポートとは異なり、Keyoxide はオンラインアイデンティティや「ペルソナ」と連携しており、これらのアイデンティティは匿名である可能性があり、プライバシーを保護するために複数の別々のペルソナを持つことができます。
私の説明としては、Keyoxide
は、さまざまなチャネルにおけるアイデンティティの一貫性を確保することを目的としています:暗号学と分散型ホスティングを用い、代理または自己検証を許可することで、複数のチャネルにおけるアイデンティティの一貫性を保証します。
それはあなたがあなたであることを証明するものではなく、複数のチャネル(またはその管理者)が同じ鍵の管理者によって制御されることを証明するものです。簡単に言えば、A プラットフォームのあるアカウントと B プラットフォームのあるアカウントが同一人物であることを証明することです(チャネルにはドメイン名などのより多くの意味があります)。
規範#
アイデンティティの構成に関して、Keyoxide
はAriadne Specを使用してオンラインアイデンティティの構成フォーマットを説明します。
原リンクの後ろにある規範を深く掘り下げる前に、私の簡単な説明を信じても構いません:オンラインアイデンティティは、鍵で署名された(関連知識は非対称暗号学についての一般的な説明を参照)アイデンティティ文書であり、文書は以下のいくつかの要素で構成されています:
- メタデータ:使用される暗号情報を示し、これはオンラインアイデンティティ文書であることを示します。
- Claims:宣言、つまりいくつかのオンラインチャネルやアカウントのアイデンティティに対する宣言、たとえば、あるドメイン名がこのアイデンティティに属することや、ある GitHub アカウントがこのアイデンティティに属することを宣言します。
- ユーザーが記録したい個人情報(メール、プロフィール、アバターのリンクなど)
その後、文書は署名されて配布されます。
では、これらのチャネルが本当にこのアイデンティティに属することをどうやって検証するのでしょうか?
さまざまなサービスプロバイダーやチャネルに対して、所有者のみが制御できる情報を公開するための異なる API や方法があります。たとえば、ドメイン名に対しては DNS の TXT レコード、GitHub の場合はアカウントの公開 Gist です。これらの情報の中で、所有者は特定の証明を記録します:
アイデンティティ証明は次のようになります:
- 暗号鍵の識別子の URI 表現
- 暗号鍵の識別子の URI 表現の暗号ハッシュ
- Ariadne アイデンティティプロファイルのウェブ表現を指す URL
言い換えれば、所有者はアカウントに署名プロファイル文書に使用される URI(鍵の指紋に似たもの)またはその URI のハッシュまたはプロファイル文書へのリンクを記録しました。
こうして、署名されたプロファイル文書を取得した人は、各クレームのアカウントが規範に従って証明を配置しているかどうかを確認できます。もしそうであれば、対応するチャネルがこのアイデンティティによって制御されていることを証明します。
フォーマット#
Claim
のフォーマットは[email protected]=CLAIM
であり、ここでのCLAIM
の内容は各Available claims/proofsの要求を参照してください。
proof
(これはあなたの各アカウントに配置されるもので、Claim
内のproof@...
は文字通りの意味です)のフォーマットにはいくつかの種類があります:
- URI:
openpgp4fpr:3637202523e7c1309ab79e99ef2dc5827b445f4b
(後文のASP
の場合はaspe:domain.tld:ASPFINGERPRINT
) - ハッシュ化された URI:
$argon2id$v=19$m=16,t=2,p=1$UElOT0ZIU09mSHlReE1lcg$2nJmgFL0s3DHPksuSE2enw
- メッセージ:
[Verifying my cryptographic key: FINGERPRINT_URI]
- プロファイル URL:
https://keyoxide.org/FINGERPRINT
またはhttps://keyoxide.org/EMAIL
注釈:
- 上記のフォーマットは PGP 鍵に関するもので、
FINGERPRINT
はあなたの公開鍵の指紋(小文字?)(PGP に関する知識はさまざまな一般的な説明を参照)であり、FINGERPRINT_URI
はopenpgp4fpr:FINGERPRINT
です。 Hashed UR
は URI のargon2
またはbcrypt
ハッシュです。- メッセージ内の他の内容は重要ではなく、重要なのは
FINGERPRINT_URI
を含むことです。 Profile URL
は特定のKeyoxide
インスタンスが提供するプロファイルページのリンクであり、リダイレクトも可能です。
OpenPGP での使用#
まず、OpenPGP の鍵が必要です。このステップはこの記事で説明するものではなく、他のガイドを参照してください。
次に、あなたは:
gpg --edit-key FINGERPRINT
uid N
notation
そして、notation
に一行で[email protected]=CLAIM
を配置し、いくつかのClaim
を配置します。
save
その後、公開鍵を`keys.openpgp.org`または`Web Key Directory`にアップロードします。
[Available claims/proofs](https://docs.keyoxide.org/service-providers/)の要求に従って、各チャネルの情報を更新することを忘れないでください。そうしないと、検証の結果は失敗します。
その後、[Keyoxide](https://keyoxide.org/)で鍵IDの指紋またはメールを検索して、プロファイル文書を取得できます。
## Ariadne Signature Profile
OpenPGPの他に、署名された`profile`文書を提供するための独自の規範もあります。PGP公開鍵に注釈を付けることは最良の選択ではないと思いますが、新しいフォーマットにも普及の難しさがありますので、読者の判断にお任せします。
この方法は、[JSON Web Signature (JWS)](https://www.rfc-editor.org/rfc/rfc7515)を使用してアイデンティティ文書に署名し、特定のOpenPGP実装に依存せずにより広範な実装を可能にします。より高度な暗号学的原則をサポートします。
規範に従って、`ASP`は次のものを使用します:
- algorithm: "EdDSA", curve: "Ed25519" ([RFC8037](https://www.rfc-editor.org/rfc/rfc8037))
- algorithm: "ES256", curve: "P-256"
これらの2つの`JWS`の署名アルゴリズムと曲線の組み合わせです。
さらに、`JWS`内に[`JWK`](https://www.rfc-editor.org/rfc/rfc7517)フォーマットの公開鍵を含めます。
したがって、いわゆる`Profile JWS`を使用するには、[RFC7515](https://www.rfc-editor.org/rfc/rfc7515)第3.1節で定義されたコンパクトシリアル化(Compact Serialization)を使用してシリアル化する必要があります。
`Profile jWS header`では:
`typ`=`JWT`
`alg`=署名アルゴリズム、見て[IANA-JOSE](https://www.iana.org/assignments/jose/jose.xhtml)
`jwk`=`JWK`フォーマットの公開鍵(つまり公開鍵を表すJSONの一種)
`kid`=公開鍵のこの規範に特有の指紋、以下を参照
`Profile JWS payload`には、name、claims、descriptionなどのペイロードが内容として含まれます(具体的なフォーマットは[Ariadne Signature Profile v0](https://ariadne.id/related/ariadne-signature-profile-0/)を参照)。
### ASP指紋
`ASP`の指紋は、[RFC7638](https://www.rfc-editor.org/rfc/rfc7638.html)で定義された`JWK`指紋の計算方法に従い、`SHA512`をハッシュアルゴリズムとして使用してRFC規範の指紋を取得し、その最初の16バイトを無填充の`BASE32`で取得して`ASP`の指紋とします。
指紋は大文字小文字を区別せず、コード内では大文字に変換されます。
### ASPEサーバーとクライアント
`ASP`を取得したら、それを公開して取得できる限り、OpenPGPのアイデンティティ文書と同じ方法で検証できます。
規範は`Ariadne Signature Profile Exchange Protocol`を定義しており、APIを介して相互作用できるサービスサーバーを想定しています。これを使用して`ASP`をアップロード、保存、公開できます。
この交換プロトコルに従って、クライアントとサーバーは相互作用し、`ASP`をアップロード、更新、または削除します。
### 検証
あなたが成功裏に`ASP`をアップロードしたと仮定し、その指紋が`ASPFINGERPRINT`で、所在のASPEサービスサーバーのドメイン名が`domain.tld`である場合、この`ASP`は`ASPE URI`として`aspe:domain.tldASPFINGERPRINT`を持ちます。
この時、[Keyoxide](https://keyoxide.org/)にこの`ASPE URI`を入力すれば、検証できます。
### ASPの使用方法
さて、問題は、`ASP`をどのように構築し、それをサーバーにアップロードするかということです。
まず、`keyoxide.org`というドメインは`ASPE`サービスサーバーであるため、プロトコルに従って相互作用できます。
一つは、[asp.keyoxide](https://asp.keyoxide.org/)でオンラインウェブインターフェースが提供されており、`ASP`を生成して指定されたドメインのサーバーにアップロードできますが、サポートされているクレームチャネルは限られており(少なくとも数ヶ月前はそうでした)、完全にカスタマイズすることはできません。
もう一つは、[kx-aspe-cli](https://codeberg.org/keyoxide/kx-aspe-cli)ですが、こちらも非常に限られた設計しかサポートしていません。
もしあなたがローカルで`ASP`をカスタマイズしたい場合(もちろん、サービスプロバイダーのチャネルに従ってクレームを提供し、設定ファイルを編集する必要があります)、さらには自分で鍵を生成したい場合、私はその目的を達成するためにコマンドラインツールを以前に作成しました:[aspe-client-go](https://codeberg.org/wind_mask/aspe-client-go)。私自身は現在`keyoxide.org`と相互作用できることを確認しています(もちろん、私が後に言及する自分で作成したサーバーも含まれます)。
## プロモーション
このツールとプロトコルの使用を促進したい場合は、サーバーのホスティングに参加できます。これには以下が含まれます:
- `Keyoxide`のインスタンス、つまりアイデンティティ構成文書を検証できるサービス
- `ASPE`サービスサーバー、`ASP`を保存し公開提供できます
前者のガイドは[Self-hosting Keyoxide](https://docs.keyoxide.org/guides/self-hosting/)を参照してください。
後者には[aspe-server-rs](https://codeberg.org/keyoxide/aspe-server-rs)がありますが、まだデータストレージが統合されていないようです。私は[aspe-server-go](https://codeberg.org/wind_mask/aspe-server-go)という実装を書きましたが、APIとストレージを実現しているはずです。