Skip to content

アイデンティティ

署名と証明書チェーン

Concrntはユーザーが自身の秘密鍵を用いて自己の同一性を証明します。 Concrntでは秘密鍵にsecp256k1を採用し、アドレスフォーマットはbech32エンコードが利用されています。

署名の検証プロセスは’ecrecover’アルゴリズムを使用して行われます。簡単に説明すると、ECDSA署名は、元のメッセージと署名の値、1bitのリカバリーパラメーターをもとに署名者の公開鍵を復元することができます。 こうして復元した公開鍵からアドレスを計算することで、署名の正しさを検証することができます。このアルゴリズムの利点は、公開鍵を別途共有する必要がないところです。

サブキー

Concrntにはサブキーという概念を導入しています。

というのも、使い捨てしても大して問題のない仮想通過のウォレットならともかく、SNSアカウントを1つの秘密鍵で守り切るのはほぼ不可能です。頻繁にいろんな端末で開きたいものですからね。

秘密鍵の扱いを容易にするためには、いつでも新しい鍵を生成でき、そしてその鍵をいつでも無効化できる必要があります。

Concrntでは、自身の秘密鍵を使って別の秘密鍵に対して署名を施すことで、証明書を作ることができます。この証明書をプロフィールのように公開することで、アドレスと直接紐づいた秘密鍵をオフラインに厳重に保管した上で、柔軟にアカウントを運用することができます。

証明書はいつでも無効化できますが、これは一般にwebで使われている証明書と同様に、証明書失効リスト(CRL)を公開することで行われます。なので、サブキーによる署名を検証する際は、証明書の最新の状態についてドメインに問い合わせる必要があります。

認証

Concrntではユーザーが自分が所有する鍵で署名して作るjwtを用いて現住所サーバーに対して身分を証明します。また、通信先が外部サーバーである場合は、これに加えて 現住所サーバーが発行するPassportを組み合わせて用います。

jwtは以下の形式で表現されます。

[TODO]

Passportは以下の形式で表現されます。

[TODO]