2.1 zkLogin関連技術解説 ⚡️
SuiのzkLoginは、GoogleやFacebookなどの既存のWebアカウント情報を使って、ブロックチェーン上のウォレット(Suiアドレス)を生成し、dApps(分散型アプリケーション)を利用可能にする画期的な機能です。
この仕組みにより、ユーザーは従来のウォレット管理で必須だったシードフレーズや秘密鍵を覚える必要がなくなり、web3への参加ハードルが劇的に下がります。
このレッスンでは、zkLoginを支える主要な技術要素と、実際に認証が行われるまでの流れを初心者にも分かりやすく解説します。
主要機能
このプロジェクトで実装するアプリの主要機能です。
- zkLogin認証機能
- Google OAuth による OpenID 認証機能
- Supabase連携によるユーザーソルトの保管機能
- JWTとユーザーソルトを元にしたSuiウォレット導出機能
- 1 SUIの送金デモ機能
- NFTのミントデモ 機能
zkLoginを支える技術要素
zkLoginは、複数の技術要素を組み合わせることで、安全で使いやすい体験を実現しています。
1. OpenID Connect(OIDC)とJSON Web Token(JWT)
- OIDCは、Googleなどのプロバイダーがユーザー認証に使用する標準的なプロトコルです。
- ユーザーがOIDCプロバイダー(OP)にログインし、認証に成功すると、署名付きのJWT(JSON Web Token) を取得します。
- JWTは、
ヘッダー
、ペイロード
、署名
の3つの部分で構成され、ユーザーに関する情報をJSON形式で含みます。zkLoginは、このJWTを「ユーザーが本人であること」の証明の基盤として利用します。
2. 一時的なキーペア(Ephemeral Key Pair)
- ユーザーはJWTを取得する前に、そのセッション中だけ一時的に利用する秘密鍵と公開鍵のペア(
eph_sk
,eph_pk
)を生成します。 - この一時的な公開鍵(
eph_pk
)は、OIDCプロトコルにおけるnonce
パラメータに埋め込まれます。
nonce
はリプレイ攻撃(一度使用されたデータを再利用する攻撃)を防ぐための使い捨ての値です。 - このキーペアはセッションが終了すると破棄されるため、ユーザーが管理する必要はありません。
本デモアプリではブラウザのローカルストレージに保存しますが、本番環境ではより安全な方法が推奨されます。
3. ユーザーソルト(User Salt)
-
JWTには、ユーザーを識別するための
sub
(subject)IDが含まれています。しかし、これを直接使用すると、SNSアカウントとウォレットが紐づいてしまい、プライバシー上のリスクが生まれます。
-
そこでzkLoginでは、
salt
(ソルト) と呼ばれるランダムな値をユーザーの識別子と組み合わせて、Suiアドレスを生成します。 -
salt
があることで、第三者はユーザーのSuiアドレスから元のSNSアカウントを特定することができなくなり、プライバシーが保護されます。