$30 off During Our Annual Pro Sale. View Details »

Gaming & ZoKrates

Avatar for oggata oggata
October 01, 2022
50

Gaming & ZoKrates

Avatar for oggata

oggata

October 01, 2022
Tweet

Transcript

  1. Single Multiplay WHY IS ZERO-KNOWLEDGE PROOF NECESSARY? Gaming & ZoKrates

    Game用のVPS  (Minecraft , PalWorld , Arkなどで使われている) ソーシャルゲーム(人と繋がるこ とが前提の場合) チート行為の排他は重要
  2. WHAT IS A ZERO-KNOWLEDGE PROOF? https://pages.cs.wisc.edu/~mkowalcz/628.pdf?ref=morioh.com&utm_source=morioh.com Gaming & ZoKrates アリババの洞窟にはA

    とB の2 つ道がある。太郎さんは洞窟の中に ある秘密の抜け道を通るための合言葉を花子さんから教えてもら いたい。花子さんはこの合言葉を1 万円で売ってくれると言ってい るものの、太郎さんは花子さんが本当に合言葉を知っていると確 信するまでは支払うつもりはなく、花子さんも、太郎さんがお金 を支払うまではそれを共有しない。 この両者硬直の状態を解決して取引を確実なものとするためには 次のような証明手順を踏めば良い。 太郎さんは洞窟の外で待って いる。花子さんはA かB どちらかの道で洞窟の奥へと進む(このと き太郎さんには花子さんがどちらを選択したかは見られない) 。太 郎さんは洞窟に入り、分岐点でA かB どちらかの道から戻ってくる よう花子さんに指示する。花子さんは太郎さんに言われた方の道 から分岐点に戻る。1 〜3 を繰り返す。
  3. 項目 アリババの洞窟 ZK-SNARKs 証明回数 100回 1回 通信 往復必要 一方通行 確実性

    99.99...% 100% 発明年 1980年代 2010年代 用途 教育 実用 1980 年代: ゼロ知識証明(対話型) 1985 年: 楕円曲線暗号 1986 年: FIAT-SHAMIR 変換 1990 年代: PCPS 理論 ← 大発見 2001 年: ペアリング暗号 ← 楕円曲線の応用 2010 年代: QAP ← 実用化の鍵 2016 年: GROTH16 ← 最適化 → すべてが統合してZK-SNARKS 誕生
  4. What is ZoKrates? WHAT IS ZOKRATES? ZoKrates は、** ゼロ知識証明(ZK-SNARKs )を簡単に作成・使用するためのツールキット**

    で す。 ### 特徴 - ** 高級言語**: Python に似た分かりやすい構文 - ** 完全なツールチェーン**: コンパイル→セットアップ→証明生成→検証まで一貫してサポート - ** ブロックチェーン統合**: Ethereum 、Solana などのスマートコントラクトと連携可能 - ** オープンソース**: GitHub で公開されており、誰でも利用可能 ### なぜZoKrates が必要? ZK-SNARKs を直接実装するのは非常に複雑です: - 数学的な知識(楕円曲線、ペアリング暗号など) - 低レベルの回路設計 - 暗号学的パラメータの管理 ZoKrates はこれらを抽象化して、プログラマーが簡単に使えるようにしています。 Gaming & ZoKrates
  5. What is ZoKrates? ## 基本的な概念 ### 1. 証明者(Prover )と検証者(Verifier )

    ``` 証明者: 「私は秘密の情報X を知っている」 検証者: 「それを証明してください(でもX は教えないで) 」 証明者: [ 証明を生成] 検証者: [ 証明を検証] → 「OK 、信じます」 ``` ### 2. プライベート入力とパブリック入力 - ** プライベート入力(private )**: 秘密情報。証明には含まれるが、値は明かされない - ** パブリック入力(public )**: 公開情報。誰でも見られる ### 3. 回路(Circuit ) ZoKrates プログラムは「回路」にコンパイルされます。 これは数学的な制約条件の集まりで、 「この条件を満たす入力が存在する」ことを証明します。 WHAT IS ZOKRATES? Gaming & ZoKrates
  6. ZoKrates でゲーム ロジックを書く Solidity コードを自 動生成 Ethereum にデプロ イ 検証

    contract Verifier { function verifyTx( Proof memory proof, uint[1] memory input ) public view returns (bool r) { // 楕円曲線の点の計算 uint256[6] memory p = ...; // ペアリング演算(暗号学的な検証) return pairing( Pairing.negate(proof.A), proof.B, ... ); } } verifier.sol def main( private field[5] hand_cards, private field[5] mana_zone, field required_mana_cost ) -> field { // 1. 手札にカードがあるかチェック field card_in_hand = 0; for u32 i in 0..5 { field is_match = if hand_cards[i] == 30 { 1 } else { 0 }; card_in_hand = card_in_hand + is_match; } assert(card_in_hand == 1); // 2. マナが足りるかチェック field mana_count = 0; for u32 i in 0..5 { field has_card = if mana_zone[i] > 0 { 1 } else { 0 }; mana_count = mana_count + has_card; } assert(mana_count >= required_mana_cost); return 1; } mana_check.zok WHAT IS ZOKRATES? Gaming & ZoKrates
  7. Proving Key (証明鍵) 、Verification Key (検証鍵) 、 Ethereum 秘密鍵(ウォレットの鍵) 【準備】開発者

    【プレイ】アリス 【検証】スマートコン トラクト ① zokrates setup → proving.key と verification.key を生成 ② verification.key → Solidity コント ラクトを生成してデプロイ ③ proving.key をWeb で公開(誰で もダウンロード可能) ④ proving.key をダウンロード(誰 でも可能) ⑤ 自分の秘密情報(手札)で証明を 生成 Verification Key (検証鍵) ⑥ 自分のETH 秘密鍵でトランザクシ ョン署名 ⑦ Ethereum に送信 ⑧ verification.key で証明を検証 「誰かが正しい手札を持っている」 ⑨ msg.sender で確認「アリスが送 信した」 ⑩ 両方OK なら処理実行 WHAT IS ZOKRATES? Gaming & ZoKrates
  8. WHAT IS A ZERO-KNOWLEDGE PROOF? // デュエル・マスターズ: マナコスト支払い検証 // プレイヤーが「このカードをプレイできる」ことを、手札を公開せずに証明

    // カードID をハッシュ値で表現(簡略化のため数値) // 実際にはSHA256 などを使用 DEF MAIN( // プライベート入力(秘密情報) PRIVATE FIELD[5] HAND_CARDS, // 手札の5 枚のカードID PRIVATE FIELD[5] MANA_ZONE, // マナゾーンの5 枚のカードID PRIVATE FIELD CARD_TO_PLAY, // プレイしたいカードのID // パブリック入力(公開情報) FIELD REQUIRED_MANA_COST, // 必要なマナコスト FIELD CARD_TO_PLAY_COMMITMENT // プレイするカードのコミットメント ) -> FIELD { // 1. プレイするカードが本当に手札にあるかチェック FIELD CARD_IN_HAND = 0; FOR U32 I IN 0..5 { FIELD IS_MATCH = IF HAND_CARDS[I] == CARD_TO_PLAY { 1 } ELSE { 0 }; CARD_IN_HAND = CARD_IN_HAND + IS_MATCH; } ASSERT(CARD_IN_HAND == 1); // 手札に1 枚だけ存在することを確認 // 2. コミットメントの検証(カードをすり替えていないか) FIELD COMMITMENT = CARD_TO_PLAY * CARD_TO_PLAY; // 簡略化したハッシュ ASSERT(COMMITMENT == CARD_TO_PLAY_COMMITMENT); // 3. マナゾーンのカード枚数をカウント FIELD MANA_COUNT = 0; FOR U32 I IN 0..5 { FIELD HAS_CARD = IF MANA_ZONE[I] > 0 { 1 } ELSE { 0 }; MANA_COUNT = MANA_COUNT + HAS_CARD; } // 4. マナコストが足りているか検証 ASSERT(MANA_COUNT >= REQUIRED_MANA_COST); // 検証成功を返す RETURN 1; } Gaming & ZoKrates
  9. WHAT IS A ZERO-KNOWLEDGE PROOF? Gaming & ZoKrates // デュエル・マスターズ:

    デッキ構築ルール検証 // 「デッキが40 枚以上」 「同名カードが4 枚以下」をデッキ内容を明かさずに証明 DEF MAIN( // プライベート入力(デッキの内容は秘密) PRIVATE FIELD[40] DECK_CARDS, // デッキの40 枚 // パブリック入力 FIELD DECK_HASH // デッキ全体のハッシュ値(コミットメント) ) -> FIELD { // 1. デッキが40 枚あることを確認 FIELD CARD_COUNT = 0; FOR U32 I IN 0..40 { FIELD HAS_CARD = IF DECK_CARDS[I] > 0 { 1 } ELSE { 0 }; CARD_COUNT = CARD_COUNT + HAS_CARD; } ASSERT(CARD_COUNT >= 40); // 40 枚以上 // 2. 同名カードが4 枚以下であることを確認 // 各カードID についてカウント(簡略化のため最初の10 枚だけチェック) FOR U32 CHECK_CARD IN 0..10 { FIELD COUNT = 0; FOR U32 I IN 0..40 { FIELD IS_SAME = IF DECK_CARDS[I] == CHECK_CARD { 1 } ELSE { 0 }; COUNT = COUNT + IS_SAME; } // 同名カードは4 枚まで ASSERT(COUNT <= 4); } // 3. デッキのハッシュ値を計算して検証(すり替え防止) FIELD CALCULATED_HASH = 0; FOR U32 I IN 0..40 { CALCULATED_HASH = CALCULATED_HASH + DECK_CARDS[I]; } // 実際にはSHA256 などを使うべき ASSERT(CALCULATED_HASH == DECK_HASH); RETURN 1; }
  10. WHAT IS A ZERO-KNOWLEDGE PROOF? Gaming & ZoKrates // デュエル・マスターズ:

    シールド・トリガー検証 // 「このカードは本当にシールドにあった」ことを事後的に証明 DEF MAIN( // プライベート入力 PRIVATE FIELD[5] SHIELD_CARDS, // シールドの5 枚のカード PRIVATE FIELD TRIGGERED_CARD, // トリガーしたカードID PRIVATE FIELD SHIELD_POSITION, // どのシールドがブレイクされたか(0-4 ) // パブリック入力 FIELD SHIELD_COMMITMENT, // シールド全体のコミットメント FIELD TRIGGERED_CARD_REVEALED // 公開されたトリガーカード ) -> FIELD { // 1. シールドの枚数が正しいか(5 枚以下) FIELD SHIELD_COUNT = 0; FOR U32 I IN 0..5 { FIELD HAS_SHIELD = IF SHIELD_CARDS[I] > 0 { 1 } ELSE { 0 }; SHIELD_COUNT = SHIELD_COUNT + HAS_SHIELD; } ASSERT(SHIELD_COUNT <= 5); // 2. ブレイクされた位置のカードが正しいか FIELD CORRECT_CARD = 0; FOR U32 I IN 0..5 { FIELD POSITION_MATCH = IF I == SHIELD_POSITION { 1 } ELSE { 0 }; FIELD CARD_MATCH = IF SHIELD_CARDS[I] == TRIGGERED_CARD { 1 } ELSE { 0 }; CORRECT_CARD = CORRECT_CARD + (POSITION_MATCH * CARD_MATCH); } ASSERT(CORRECT_CARD == 1); // 3. 公開したカードが実際のトリガーカードと一致するか ASSERT(TRIGGERED_CARD == TRIGGERED_CARD_REVEALED); // 4. シールドのコミットメント検証(事前に設定したシールドと一致するか) FIELD CALCULATED_COMMITMENT = 0; FOR U32 I IN 0..5 { CALCULATED_COMMITMENT = CALCULATED_COMMITMENT + SHIELD_CARDS[I]; } ASSERT(CALCULATED_COMMITMENT == SHIELD_COMMITMENT); // 5. トリガーアイコンがあるか確認(簡略化) // 実際にはカードID からトリガーフラグを確認する FIELD HAS_TRIGGER = IF TRIGGERED_CARD >= 1000 { 1 } ELSE { 0 }; ASSERT(HAS_TRIGGER == 1); RETURN 1; }
  11. 用途 データ量 実現可能性 方法 デッキ検証 40枚 ◎ 直接処理 カード検索 100万枚

    ◎ Merkle Tree 勝率計算 1万人 ◦ 分割処理 全件統計 10万人 △ オフチェーン+証明 APPLICATIONS IN GAMING Gaming & ZoKrates
  12. ┌───────────────────── ────────────────┐ │ 政府・自治体 │ │ - マイナンバーカード │ │

    - デジタル住民票 │ │ - 電子証明書 │ └──────────────┬────── ────────────────┘ │ 公式データ発行 ↓ ┌───────────────────── ────────────────┐ │ ユーザー │ │ 「政府が『東京都民』と認めている」 │ │ このデータを使ってZK 証明を生成 │ └──────────────┬────── ────────────────┘ │ ZK 証明 ↓ ┌───────────────────── ────────────────┐ │ ETHEREUM │ │ 「この証明は政府発行データに │ │ 基づいている」と検証 │ └───────────────────── ────────────────┘ JAVASCRIPT // マイナンバーカードから住所取得(仮想コード) ASYNC FUNCTION GETMYLOCATION() { // 1. マイナンバーカードをIC カードリーダーで読み取り CONST MYNUMBERCARD = AWAIT READMYNUMBERCARD(); // 2. 住所情報を取得(電子署名付き) CONST ADDRESSDATA = { PREFECTURE: 13, // 東京都 CITY: 113, // 渋谷区 ADDRESS: " 道玄坂1-2-3", SIGNATURE: "0X1A2B3C..." // 政府の電子署名 }; // 3. 署名を検証(政府の公開鍵で) CONST ISVALID = VERIFYSIGNATURE( ADDRESSDATA, ADDRESSDATA.SIGNATURE, GOVERNMENT_PUBLIC_KEY ); IF (ISVALID) { // 4. このデータでZK 証明を生成 RETURN ADDRESSDATA; } } Gaming & ZoKrates LOCATION PROOF
  13. ZKPassport アプリ App Store / Google Play でダウンロード可能 パスポートのNFC をスキャン

    年齢・国籍を証明 採用企業 Google Cloud 、Velodrome 、Aave などが主要クライ アント Biometric Update Aztec Network Aztec テストネットでは、ZKPassport を統合してノー ドオペレーターが人間であることを証明し、ネットワ ークに参加できるようにしています 1. アプリをダウンロード └→ App Store: ZKPassport └→ 公式サイト: https://zkpassport.id/ 2. パスポートをスキャン └→ スマホをかざすだけ(数秒) 3. 証明を生成 └→ 「18 歳以上」 「EU 市民」など └→ 詳細は秘密のまま 4. dApp で使用 └→ エアドロップ └→ 年齢制限コンテンツ └→ 投票 Gaming & ZoKrates 実用的な機能 Sybil 攻撃防止: 1 パスポート = 1 ウォレット 年齢確認: 18 歳以上を証明(生年月日は秘密) 国籍証明: EU 市民を証明(どの国かは秘密) プライバシー保護: ローカルで証明生成 📊 成長状況 Self は2025 年に900 万ドルのシード資金調達を完 了し、参加者にはGreenfield Capital 、Softbank の SBI Fund 、Polygon の創業者などが含まれています Biometric Update インドのAadhaar デジタルID システムにも対応し、 インドの成人の99% がリモートでオンボーディング 可能 Biometric Update 結論: zkPassport は完全に実用段階で、今すぐ使え ます! LOCATION PROOF
  14. zkLogin (Sui ) Google ログインで ブロックチェーンに アクセス、760 万ト ランザクション以上 の実績

    X 秘密鍵不要 zkPassport / Self Protocol パスポートで身分証 明 700 万ユーザー 1. 認証・ログイン 系 zkSync Era Ethereum で7 番目 に大きいLayer 2 ネ ットワーク、 TVL7.6 億ドル以 上、4 億トランザク ション処理済み KuCoin Polygon zkEVM EVM 互換でトラン ザクション費用を最 大90% 削減 KuCoin StarkNet ZK-STARKs 使用 (量子耐性) Trusted Setup 不要 Scroll EVM 互換Layer 2 2. スケーリング (Layer 2 )系 ZKML (Zero- Knowledge Machine Learning ) AI モデルの推論を検 証可能に、主要プロ ジェクトにRisc Zero 、Succinct 、 Modulus Labs など ICME EZKL ディープラーニング モデルの検証 Python から使える 3. AI ・機械学習系 Axiom 過去のブロックチェ ーンデータに安全に アクセス GitHub Hyper Oracle プログラマブル zkOracle ネットワ ーク GitHub 4. オラクル・デー タ系 Gaming & ZoKrates LOCATION PROOF