匿名資格情報 — DeFi のコンプライアンス + プライバシー基盤プリミティブ

調査: KVAC · PS-sigs · Coconut · 閾値発行 · Sybil 耐性 · DeFi KYC 応用
匿名資格情報ピラミッド
コア問題: 「匿名だが認可される」

認可グループに属することを証明できて、かつ誰なのかを明かさないことは可能か?

従来型 KYC:
  当局 ──[Alice に資格情報を発行]──▶ Alice が資格情報を提示 ──▶ 検証者は「Alice だ」と判定

匿名資格情報:
  当局 ──[Alice に資格情報を発行]──▶ Alice が再ランダム化した証明を提示
                                          ──▶ 検証者: 「資格情報は有効」(ただし Alice だと判定しない)

実現する: KYC なしに身元公開 · 繰り返し使用しても非リンク可能 · 選択的な属性開示
匿名資格情報の 3 階建ての進化 KVAC CCS 2014 · Chase, Meiklejohn, Zaverucha PS-sigs CT-RSA 2016 · Pointcheval & Sanders Coconut NDSS 2019 · Sonnino et al. LEVEL 1 MAC 基盤 発行者 = 検証者 ペアリング不要 LEVEL 2 署名ベース 公開検証 再ランダム化可能 LEVEL 3 閾値ベース t-of-n 発行 単一故障点なし UTT · ZEBRA 電子現金 / SNARK-KYC PEReDi · Platypus CBDC · ZKBob PEReDi (5-of-10) CBDC 委員会 公開検証を追加 閾値を追加

Level 1 — KVAC (CCS 2014)

MAC 基盤ペアリング不要

最速の構成。発行者と検証者が同じ当事者 — 検証者は自分の MAC をチェック。ペアリング演算なしで非リンク可能なマルチ属性資格情報を実現。

制限: 発行者のみが検証可能(第三者による検証不可)

Level 2 — PS-sigs (CT-RSA 2016)

再ランダム化可能公開検証

2020 年代のコンプライアンスプライバシーの実質的標準。2 つの群元素の署名、提示ごとに再ランダム化可能。公開鍵を持つ誰もが検証可能 → 発行と検証を分離。

制限: 単一発行者 = 単一故障点

Level 3 — Coconut (NDSS 2019)

t-of-n 閾値単一故障点なし

PS-sig 発行を n 当局に分散。閾値 PVSS で実現。任意の t 当局が部分署名を提供。保有者が有効な資格情報に集約 — 中央発行と区別不可。

必要条件: セットアップ時に DKG 式典が必要

基本的洞察

各レベルは下位レベルのキー制限を解決する。KVAC は高コストなペアリングを排除。PS-sigs は発行者と検証者を分離。Coconut は単一発行者の信頼前提を排除。結果: t-1 の悪意ある当局が損なわせることのできない匿名資格情報。

KVAC — 鍵付き検証匿名資格情報

Chase, Meiklejohn, Zaverucha · CCS 2014 · KVAC

解決する問題

以前の匿名資格情報 (RSA/ペアリングベース) は遅かった。MAC (メッセージ認証コード) 演算のみで非リンク可能なマルチ属性資格情報を構築できるか?

キー洞察: 発行者 = 検証者にする

検証者が自分自身の MAC をチェックするため、ペアリング演算が不要。資格情報を発行する当事者が検証する。この制限により大幅な高速化が可能。

MAC 対 署名: なぜ重要か

従来型署名ベースの資格情報

// 発行者は (sk, pk) を持つ
σ = Sign(sk, attributes)
// 資格情報は σ を含む
Verify(pk, σ, attributes) // 誰もが検証可能

// 非リンク可能性のため再ランダム化:
σ' = ReRand(σ)  // ペアリングが必要
ペアリング: コスト高 任意の当事者が検証可能

KVAC — MAC ベースの資格情報

// 発行者は (sk) を持つ — 公開鍵なし
t  = MAC(sk, attributes)
// 資格情報 = MAC タグ t
VerifyMAC(sk, t, attributes) // 発行者のみ!

// ZK 証明で再ランダム化:
ZKProof(t, attributes) // ペアリング不要!
ペアリング不要: 高速 発行者のみが検証可能
特性

基本特性

  • 非リンク可能性: 各提示は以前の提示とリンク可能な情報を開示しない
  • マルチ属性: 単一の資格情報が複数の属性フィールドを符号化
  • 選択的開示: 選択した属性のサブセットのみ開示
  • 効率性: 楕円曲線ペアリングなし → ペアリングベースより約 10 倍高速

暗号技術的詳細

// セットアップ: 発行者が生成
(sk, pk) = KeyGen()
// sk は MAC に使用、pk はオプション

// 発行
t = sk₀ + sk₁·m₁ + sk₂·m₂ + ... (mod p)

// 提示 (有効な MAC の ZK 証明)
π = Prove("I know (t, m̄) s.t. VerifyMAC(sk,t,m̄)")
Verify(π) // 検証者 = 発行者が π をチェック
ZEBRA — SNARK 拡張 (ePrint 2022)

KVAC のオンチェーン問題

問題

KVAC は発行者=検証者が必要。しかしオンチェーンでは、スマートコントラクトが発行者になれない(秘密鍵がオンチェーンに存在しない)。KVAC 資格情報をオンチェーンで検証するにはどうするか?

ZEBRA ソリューション: SNARK 化

ソリューション

KVAC 検証を SNARK 証明の内側にラップする。ユーザーは「有効な KVAC 資格情報を保有」を証明 → SNARK 証明がオンチェーンで公開 → スマートコントラクトが SNARK を検証 (MAC を直接検証しない)。

// オフライン (ユーザー側):
credential = KYC_Provider.Issue(user_attrs)    // KVAC 資格情報
sybil_id   = UniqueID(credential)              // アンチ-Sybil タグ

π = SNARK_Prove("I hold a valid KYC credential with attr ≥ threshold")

// オンチェーン (スマートコントラクト):
require(SNARK_Verify(π, sybil_id), "unauthorized")
require(!used[sybil_id], "Sybil attempt")   // 同じユーザー = 同じ sybil_id

また Sybil 耐性も追加: 資格情報から導出された一意なプロトコルごとの ID → 同じ人物は同じコンテキスト内で同じタグを得る、異なるコンテキスト間では異なるタグ。

KVAC を使用するシステム
UTT (2022) KVAC
分散電子現金システム。各コイン発行 = KVAC 資格情報。ZK 証明がユーザーごとの予算限度 (支出上限) を強制。身元を開示しない。最初の実用的な KVAC ベースの支払いシステム。
ZEBRA (ePrint 2022) KVAC + SNARK
「適格投資家のみの DeFi」— ZK で適格投資家資格情報 (KYC プロバイダーから発行) を保有していることを証明、身元を開示しない。KVAC → SNARK → オンチェーン検証。Sybil 耐性を追加。
PS-sigs — 短い再ランダム化可能署名

Pointcheval & Sanders · CT-RSA 2016 · 2020 年代のコンプライアンスプライバシーの実質的標準となった

解決する問題

KVAC は発行者 = 検証者が必要。しかし現実のシナリオ (銀行が KYC を発行、DeFi プロトコルが検証) では、彼らは異なる当事者。非リンク可能性を損なわずに公的に検証可能な匿名資格情報が必要。

キー洞察: 再ランダム化可能署名

署名を再ランダム化可能にしつつ公的に検証可能に保つ。保有者は各提示前に再ランダム化 — 各提示は完全に異なる → 非リンク可能。公開鍵を持つ誰もが正当性を検証可能。

再ランダム化メカニズム
発行フェーズ: ───────────────────────────────────────────────── 発行者: (sk, pk) ← KeyGen() σ = (σ₁, σ₂) = (g^r, g^(r·(x + y·m))) ← 2 つの群元素 ここで m = 属性 → σ を Alice に送信 提示フェーズ (毎回): ───────────────────────────────────────────────── Alice: r' ←$ Zp (毎回新しい乱数) σ' = (σ₁^r', σ₂^r') ← 再ランダム化署名 証明: π = ZKProof("I know m s.t. e(σ₁', pk·g^m) = e(σ₂', g)") → (σ', π) を公開 — 検証者は毎回異なる σ' を見る 検証: ───────────────────────────────────────────────── 検証者: e(σ₁', pk) · e(σ₁', g)^m = e(σ₂', g) をチェック ペアリング e: G₁ × G₂ → Gₜ を使用 (例. BLS12-381)
特性

署名特性

  • 短い: ちょうど 2 つの群元素 (σ₁, σ₂)
  • 再ランダム化可能: 無効化しながら再ランダム化
  • 非リンク可能: 各提示は新しく見える
  • 公開検証可能: pk を持つ任意の当事者が検証可能
  • 選択的開示: 選択した属性のみ開示

技術要件

  • ペアリングフレンドリー曲線が必要 (BLS12-381 が標準)
  • Type-3 ペアリング: G₁ × G₂ → Gₜ
  • 公開鍵サイズ = n 個の属性に対して O(n)
  • 証明/検証: 2 つのペアリング (最新ハードウェアで高速)
  • 属性コミットメントに対する ZK 知識証明
選択的開示
// 資格情報が属性を持つ: [country, age, accreditation_status, AML_score]

// シナリオ A: DeFi アクセス制御 — 適格認可のみを証明
π_A = ZKProve("I hold PS-sig on attrs where accreditation_status = 'accredited'")
// → 開示: accreditation_status. 隠蔽: country, age, AML_score

// シナリオ B: 年齢ゲート — 正確な年齢を開示せず 18 歳以上を証明
π_B = ZKProve("I hold PS-sig on attrs where age ≥ 18")
// → 開示: age_range (≥18). 隠蔽: 正確な年齢, country など

// 両証明: 非リンク可能 (異なる σ' 再ランダム化) + 選択的開示
PS-sigs が標準になった理由

他の代替案との利点

スキーム署名サイズ公開検証再ランダム化
CL signatures大 (RSA)ありなし
BBS+1 元素ありなし
KVAC2 元素発行者のみあり
PS-sigs2 元素ありあり

PS-sigs を使用するシステム

Coconut 閾値 PS-sig 拡張

PEReDi 中央銀行委員会を伴う CBDC

Platypus 信頼分散型の CBDC

ZKBob コンプライアンス対応のシールド転送

Fabric AT Hyperledger Fabric 監査可能トークン

Balancing Privacy 学術調査 (2022)

量子耐性の注意点

PS-sigs はペアリングフレンドリー曲線 (BLS12-381) に依存し、量子コンピュータに脆弱 (Shor アルゴリズムが離散対数を破る)。同等の機能を持つ量子耐性等価物は現在存在しない。これは活発な未解決問題。

Coconut — 閾値発行匿名資格情報

Sonnino, Al-Bassam, Bano, Meiklejohn, Danezis · NDSS 2019

解決する問題

PS-sigs は単一発行者 = 単一故障点を持つ。発行者が危険にさらされると、すべての資格情報が危険にさらされる。CBDC、規制コンプライアンス、またはコンソーシアムシナリオでは、分散発行が必要。

キー洞察: PS-sig 発行に適用される閾値 PVSS

閾値秘密分散 (PVSS) を PS-sig 発行プロセスに適用。n 当局が各部分署名を発行。保有者が任意のt-of-n部分署名を有効な完全 PS-sig 資格情報に集約 — 中央発行と区別不可。

閾値発行フロー
Coconut t-of-n 閾値発行フロー (t=3, n=5 の例) ユーザー Alice 当局₁ 部分署名 σ₁ 当局₂ 部分署名 σ₂ 当局₃ 部分署名 σ₃ 当局₄ オフライン 当局₅ オフライン 盲目的 リクエスト 集約 σ = Agg(σ₁,σ₂,σ₃) t=3 of n=5 で十分 再ランダム化 σ' = PS.ReRand(σ) 中央発行と同じに見える 提示 検証者へ t=3 of n=5 閾値 t-1=2 が危険: 資格情報について ゼロ情報
数学的構成
// セットアップ: DKG 式典が n 個のキーシェアを生成
(sk₁,...,skₙ)  DKG(t, n)
pk = PublicKey(sk₁,...,skₙ)   // 統合公開鍵

// 発行: ユーザーが各当局に盲目的にリクエスト
for i  {1,...,t}:
  σᵢ = Auth_i.PartialSign(skᵢ, blind_msg)
  // 各 σᵢ はシェア skᵢ 下の部分 PS-sig

// 集約: 任意の t 個の部分署名で十分
σ = Aggregate(σ₁,...,σₜ)      // Lagrange 補間を使用
σ = Unblind(σ, blind_factor)  // 盲目化因子を削除

// 結果: 完全な PS-sig (中央発行と同じ構造)
// 識別不可: σ = PS.Sign(sk, m) と同じ

// セキュリティ: t-1 が詐欺的に共謀 → m について ゼロ情報
実世界での適用: 委員会シナリオ

中央銀行 CBDC 委員会

10 人の中央銀行メンバー。任意の 5 人が共署する必要。4 人が危険にさらされた → 資格情報は発行されない。

t=5 of n=10
PEReDi (CCS 2022)
完全な Coconut CBDC 実装。TX ごとと累積限度は ZK で強制。各支払い: トランザクションをリンクせずに日次限度以下を証明する資格情報。

銀行コンソーシアム KYC

12 人のコンソーシアム銀行が各部分 KYC 資格情報を発行。7 人が同意する必要。単一の銀行が偽の資格情報を発行するのを防ぐ。

t=7 of n=12
Coconut CBDC パイロット
ECB と BoE のパイロット検討。デジタルユーロとデジタルポンドの資格情報発行用にさまざまな構成を検討。
比較: 単一発行者 対 閾値
特性PS-sigs (単一)Coconut (閾値)
発行者数1n (任意の t-of-n)
危険化閾値1 つの危険化 = 完全な破損t-1 個の危険化は OK
セットアップ簡単なキー生成DKG 式典が必要
資格情報構造2 つの群元素同じ (識別不可)
発行コスト1 つの部分署名n 個の部分署名 + 集約
信頼モデル1 つの当事者を完全に信頼t-of-n 多数を信頼
DeFi 応用マップ

3 つの軸での応用: 分散型アイデンティティ/KYC · 監査可能支払い · DeFi アクセス制御

A. 分散型アイデンティティ / KYC
あなたが誰か → 検証されたが公開されない
zkKYC 2021
「KYC 証明書 → ZKP → オンチェーン検証」を形式化する最初の論文。一般的な SSI フレームワーク。設計パターンの概念実証。
zkKYC-DeFi 2022
実用的な実装。KYC 発行者 + 分散型オラクルネットワーク (DON) でオンチェーン検証。DeFi プロトコルが DON 経由で証明をチェック。オラクル分散化を追加。
CanDID S&P 2021
Web2 をブリッジ: ユーザーは OAuth (Google/Facebook) アイデンティティを持つ → MPC 委員会 + TEE が分散資格情報に変換。発行者はブロックチェーン信頼を必要としない。「レガシー互換」パス to DID。
SyRA ePrint 2024
Kiayias et al. 「Sybil 耐性匿名署名」。コンテキストごとの一意なタグ: 同じ人物 → 同じドメイン内で同じタグ、異なるドメイン間では異なるタグ。匿名資格情報システムの一般化 Sybil 耐性。
B. 監査可能支払い
CBDC · 電子現金 · コンプライアンスとプライバシー
UTT 2022
KVAC + ZK 証明 → 予算追跡による分散電子現金。支出限度はユーザーごとに強制。各コイン発行 = KVAC 資格情報。非リンク可能支払いと上限強制。
PEReDi CCS 2022
Coconut 閾値 → CBDC。5-of-10 中央銀行委員会が資格情報を発行。各支払い: 日次 + 累積限度以下を証明する ZK 証明。完全に非リンク可能なトランザクション。デジタルユーロ研究の参照実装。
Platypus CCS 2022
PS-sigs → CBDC。中央銀行 + 規制当局の分割信頼モデル。PEReDi より強い非リンク可能性特性。異なる脅威モデル: 銀行と規制当局の非共謀を仮定。
Fabric 監査可能トークン AFT 2020
PS-sigs → Hyperledger Fabric。許可型台帳。監査鍵により規制当局が選択的監査を可能に。最初のエンタープライズグレード匿名資格情報支払いシステム。
C. DeFi アクセス制御
許可型 DeFi 監視なし
ZEBRA ePrint 2022
「適格投資家のみの DeFi」: ZK で適格投資家資格情報 (KYC プロバイダーから発行) を保有していることを証明 (身元公開なし)。KVAC → SNARK → オンチェーン。Sybil 耐性: 同じ人物は同じプロトコル固有タグを取得。
コンプライアンス基本設計
一般的なパターン: DeFi プロトコルが前提条件を設定 「認証済みユーザーのみが対話」。ユーザーがオフラインで ZK 資格情報証明を生成。プロトコルがオンチェーンで検証。オンチェーンにユーザーデータを保存しない。規制対応 + プライバシー保護。
ZKBob
PS-sigs を使用したコンプライアンス対応シールド転送。引き出し限度。規制当局の監査能力。Polygon で運用中。最初の広く使用される匿名資格情報 DeFi 製品。
スキーム選択ガイド
ユースケース推奨スキーム理由
高速オフチェーン電子現金 (同じ演算子が発行 + 検証)KVACペアリング不要、最速検証
KYC 資格情報: 銀行発行、DeFi 検証PS-sigs公開検証可能、再ランダム化可能
CBDC: 中央銀行委員会が発行Coconutt-of-n 閾値、単一発行者の単一故障点なし
KVAC 資格情報からのオンチェーン検証KVAC + SNARKZEBRA パターン: SNARK が KVAC をオンチェーンでラップ
コンソーシアム KYC (複数銀行)Coconut単一銀行が発行を制御しない
レガシー OAuth/Web2 アイデンティティをブリッジCanDIDMPC 委員会 + TEE が OAuth → DID に変換
資格情報ライフサイクル
登録 発行 保有 提示 ────────────── ────────────────── ────────────────── ────────────────────────────── ユーザーが 現実世界で ユーザーが ユーザーが資格情報を再ランダム化 属性へのコミットメント KYC が発生 資格情報を σ' ← ReRand(σ) を生成 (AML, 制裁, ローカルに保存 生存確認) (絶対にオンチェーンではない) ZK 証明を生成: C = Commit(m₁,m₂) π = Prove("有効な cred, attr≥threshold") 発行者が署名: 資格情報: ユーザーが C を σ = Sign(sk, C) · 非リンク可能 DeFi プロトコルに (σ', π) を送信 発行者に送信 (盲目的, · 再使用可能 身元非公開) σ をユーザーに送信 · 偽造不可 スマートコントラクト: (または閾値 · 譲渡不可 VerifyProof(π) → 許可/拒否 部分署名)
未解決問題 & Sybil 耐性
Sybil 攻撃の問題
Sybil 攻撃とは?

1 人がN 個のアカウントを作成、各々が有効な資格情報を取得 → N 票、N 個のエアドロップ、N 個のエアドロップ報酬、N 個のガバナンス投票。資格情報システムだけでは、ユーザーが複数の資格情報を取得できる場合を防げない。

Eve が資格情報を取得:
  KYC_Provider → σ₁ (アカウント: Eve@gmail.com)
  KYC_Provider → σ₂ (アカウント: EveAlt@gmail.com)
  KYC_Provider → σ₃ (アカウント: VPN_Eve@proton.me)

各資格情報は有効 → 3 倍のガバナンス投票
匿名資格情報: 誰が Eve かを知る人はいない
Sybil 対策ソリューション
CanDID (S&P 2021)
閾値 MPC 委員会 + OAuth。委員会が OAuth アイデンティティごとに一意の内部 ID を割り当て → 資格情報が H(ID) を含む → 同じ人物 = 同じハッシュ → Sybil は検出可能。Web2 アイデンティティの一意性をブリッジ。
SyRA (ePrint 2024)
コンテキストごとのタグ: tag = PRF(secret, context)。「DeFi-X」では、ユーザーは常に同じタグを生成。異なるプロトコル: 異なるタグ。同じプロトコル内の Sybil: 同じタグ → 検出可能。クロスプロトコル: 非リンク可能。
ZEBRA (ePrint 2022)
一意な ID が KVAC 資格情報に発行時に埋め込まれている。各発行には一意の現実世界アイデンティティチェックが必要 → 複数の資格情報には複数の KYC チェックが必要。
SyRA: コンテキストごとのタグ構成
// ユーザーが秘密鍵 usk を持つ
// コンテキスト = 特定プロトコル ("DeFi-Uniswap-v4", "DAO-Compound")

// タグ生成 (コンテキストごとに決定的):
tag = PRF(usk, context)   // 疑似ランダム関数
     // 例. H(usk || "DeFi-Uniswap-v4")

// 提示: タグが正しく形成されていることの ZK 証明
π = ZKProve("I know usk with valid credential s.t. tag = PRF(usk, context)")

// 特性:
// 1. 同じユーザー、同じコンテキスト: タグは常に同じ → Sybil 検出
// 2. 同じユーザー、異なるコンテキスト: 異なるタグ → コンテキスト間で非リンク可能
// 3. 異なるユーザー、同じコンテキスト: 異なるタグ → 区別可能

// Sybil 対抗強制:
require(!used_tags[context][tag], "Sybil: 同じユーザーが 2 度目を試行")
5 つの未解決研究問題
01

大規模での資格情報失効

アキュムレータベースの失効が標準アプローチ: 発行者は有効な資格情報の暗号アキュムレータを保持。失効時にホルダーが証人証明を更新。しかし数百万ユーザーで、既存すべての資格情報の証人を更新するのは計算上不可能。

未解決の質問

失効した資格情報がもう検証されず、有効ホルダーが証人を更新する必要がない部分線形時間失効を達成するには?

活動的な研究分野 関連: RSA アキュムレータ, Merkle アキュムレータ
02

クロス司法管轄域の資格情報互換性

日本 FSA の KYC 資格情報は US SEC が規制する DeFi プロトコルによって受け入れられない。異なる規制フレームワークは異なる属性要件を持ち、異なる「検証済み」の概念を持ち、異なる許容発行者を持つ。司法管轄域をまたがって資格情報形式を翻訳するための標準は存在しない。

未解決の質問

クロス司法管轄域の資格情報合成プロトコルを定義できるか。そこでは日本 KYC を持つユーザーが EU GDPR コンプライアンスを証明できるが、どの司法管轄域のシステムを使用したかを公開しない?

政策 + 暗号交差分野
03

量子耐性匿名資格情報

PS-sigs と Coconut はいずれもペアリングフレンドリー楕円曲線 (BLS12-381, BN254) を必要とする。これらは Shor アルゴリズムで量子コンピュータに破られる。標準署名の格子ベース代替案は存在するが、再ランダム化可能な格子ベース署名で同等の非リンク可能性特性を達成してない。

ステータス: 未解決

短い再ランダム化署名 + 公開検証性 + 選択的開示 + 効率的な ZK 証明 — を同時に達成する格子ベース構成の既知の例はない。

長期脅威 今ハーベスト-後で復号化が適用
04

合成可能 Sybil 耐性

SyRA がコンテキストごとのタグを提供。タグはコンテキスト間で非リンク可能。しかし同一セッション内で複数プロトコルに資格情報を提示するとき、タイミングとメタデータが暴露漏洩でクロスコンテキスト相関を漏らす可能性 — 暗号タグが非リンク可能でも。敵対的観察下での合成プライバシーは保証されない。

未解決の質問

「合成可能 Sybil 耐性」を形式的に定義し達成するには? そこでは Protocol A への資格情報開示が、タイミング分析でも Protocol B とのユーザー相互作用について何も漏らさない?

形式定義が必要
05

DKG なしの閾値分散

Coconut は分散鍵生成 (DKG) 式典を必要とする。DKG 自体が信頼前提を持つ: 式典は対話的である必要があり、参加者が同時にオンラインである必要があり、悪質な参加者が出力をバイアスできる。CBDC コンテキストでは、10 銀行の DKG 式典は後勤務と政治的に複雑。

未解決の質問

Coconut と同等のセキュリティを達成する閾値発行スキームを構築できるか。ただし対話的な DKG 式典を必要としない? 非対話的セットアップは「ドロップイン」権限追加を有効にする。

関連: NIDKG, 説明責任サブグループマルチシグ
サマリー比較: Sybil 対策アプローチ
システムSybil 検出方法クロスプロトコルプライバシーWeb2 互換オンチェーン
CanDIDMPC 委員会 + OAuth 一意 IDありあり (Google/FB)オフチェーン
SyRAコンテキストごとの PRF タグあり (構成上)SyRA 発行者が必要ZK 経由
ZEBRAKVAC 資格情報内の一意 ID部分的KVAC 発行者が必要SNARK 経由
PEReDiTX ごとのシリアル番号 (完全 Sybil 耐性ではない)支払いは非リンク可能CBDC コンテキストのみオンチェーン限度チェック