チャールズ・ホスキンソン氏が2026年7月14日、動画「repo for zero knowledge recovery」を公開し、自ら中心となって開発したオープンソース・リポジトリ「proof-zk-recovery」を紹介しました。
このプロジェクトが取り組むのは、SecondFiのインシデント後に残った難問です。取引署名に使う派生鍵が漏洩した状況で、正当な利用者は、攻撃者が入手していない上位の秘密――復元フレーズとマスターシード――を知っていることを、秘密そのものを見せずに証明できるのか。そして、その証明だけを根拠に、保全された資金を新しい安全なウォレットへ払い出せるのか。
公開リポジトリは、この問いに対する設計だけを示したものではありません。gnarkで構築したGroth16回路、証明生成器、Plutus V3検証コントラクト、Leanによる意思決定ロジックの形式化、監査・照合資料、MPC信頼設定の枠組み、ブラウザ向けの試作画面までを収録し、Cardano Previewテストネット上で実際に証明を検証して5 tADAを新しいウォレットへ払い出した取引証拠を提示しています。
一方、これは本番用の回収アプリではありません。現在のPreview用検証鍵は単独運営の信頼設定で作られており、資金を先に保全する運用、対象者リストのガバナンス、再請求防止、外部監査など、実資産を扱う前に閉じるべき課題が明記されています。
本稿では、2026年7月16日時点のリポジトリHEAD 7f54c35fce466039bc0c2adfe9c86693ef7bc4ac と、ユーザー提供の動画字幕を基準に、何が実証され、なぜ技術的に重要で、どこから先が未完なのかを整理します。後半には動画の日本語完全翻訳を掲載します。
前回の「実験」から、公開された検証可能な実装へ
SIPO.TOKYOは6月30日、ホスキンソン氏の動画「Update」を紹介しました。当時、リポジトリは責任ある開示のため非公開で、本人は約306件のコミットと、Cardano Preview上でGroth16検証器を動かした初期成果を説明していました。
今回公開されたGitHubリポジトリは、7月16日の確認時点で659 commitsに達しています。動画で本人が述べた「650以上」と整合します。
増えたのはコード量だけではありません。公開物には、少なくとも次の層があります。
- 要件を記述する英語仕様とEARS要件
- 24語の復元フレーズからCardanoの派生資格情報までを扱うgnark回路
- 336バイトのGroth16証明を生成するGo実装
- 証明を検証し、条件に一致する資産だけを払い出すPlutus V3コントラクト
- コントラクトの意思決定ロジックを検証するLean 4形式化
- 仕様・回路・コントラクト・形式化のずれを追う照合マップと16回の監査/レビュー資料
- MPCによるGroth16信頼設定セレモニーの枠組み
- 回収利用者側と運営側の試作Webアプリ
- Cardano Preview上のロック、検証、請求トランザクション証拠
つまり今回は、アイデアの公開というより、「第三者がコード、仕様、取引、残課題を同じ場所で検証できる状態への移行」です。
関連する過去記事:
何をゼロ知識で証明するのか
発想の核心は、漏洩した派生鍵と、漏洩していないマスターシードの非対称性です。
階層的決定性ウォレットでは、マスターから子鍵へは一方向に導出できます。しかし、漏洩した末端の派生鍵から、上位の復元フレーズやマスターシードを逆算することはできません。攻撃者が末端の鍵を持っていても、正当な利用者だけが「その鍵を生んだ根」を知っている可能性があります。
proof-zk-recovery は、概略として次の関係を証明します。
- 証明者は、あるCardano資格情報
Cを標準の派生経路で導くマスター秘密を知っている。 Cと払い戻し対象額は、運営者が公開した適格性スナップショットのMerkle木に含まれる。- 証明は、スナップショットのroot、バージョン、スクリプトハッシュ、
C、対象資産、回収先D、役割に結びついている。 - 払い出し先
Dの支払い資格情報は、侵害された資格情報Cと異なり、証明を見た第三者が別の宛先へ差し替えることはできない。
復元フレーズ、マスター鍵、派生パス、Merkle証明は秘密のwitnessとして端末内に残り、オンチェーンに出るのは336バイトの証明と公開された回収先などです。
ここで重要なのは、「ゼロ知識証明が資金を魔法のように取り戻す」のではないことです。資金は、攻撃者に使われる前に回収コントラクトの管理下へ移されていなければなりません。その上で、誰にいくら返すかを決める認証手段としてゼロ知識証明を使います。すでに攻撃者が使い切った資金を巻き戻す仕組みではありません。
Cardano上で実際に何が確認されたのか
リポジトリは、設計図ではなくCardano Preview上の実行証拠を提示しています。主要な段階は三つに分けて読むと分かりやすくなります。
E1:CardanoノードがGroth16証明を検証した
最初のゲート実験では、5 tADAを検証スクリプトにロックし、実際の336バイト証明を使って解放しました。証明の1バイトを変更した負例は、無効な曲線点になる段階でノードに拒否されています。
これは、Plutus V3のスクリプトが、約345万制約の回路から作られた証明をオンチェーンで検証できることを示します。
E2:証明検証と払い出し条件を一つの請求処理で実行した
次の実験では、完全な RedemptionValidator を使い、証明の妥当性だけでなく、対象額、回収先への拘束、自己払いの禁止を同時に確認しました。5 tADAを保管コントラクトへロックし、まっさらな回収先ウォレットを証明に結びつけ、請求トランザクションで払い出しています。
最初の回路は3,450,403制約で、E2のオフチェーンCEK測定は3,914,957,868 ExCPU、2,826,629 ExMemでした。READMEは、当時のPreviewの1トランザクション上限に対してCPU約39.1%、メモリ約17.1%と報告しています。
D ≠ C を回路内で強制し、鍵を作り直して再実証した
その後、回収先 D の支払い資格情報が、侵害された C と同じにならないことを、回路内の必須条件として追加しました。これにより回路は3,450,487制約へ変わり、古い証明鍵は無効になったため、新しい鍵とコントラクトで再デプロイされています。
この改訂版でも、保管UTxOとticketを消費し、ticketをburnした上で、5 tADAを結びつけられた回収先へ払う一連の処理がPreviewで成立しました。リポジトリは、改訂版の実測値を約5.94e9 ExCPU、約10.95e6 ExMemとしています。
数字が二組あるのは矛盾ではありません。3,450,403制約・39.1%という値は最初のE2回路、3,450,487制約・約5.94e9 ExCPUという値は D ≠ C などを追加した後の改訂版です。
なぜCardanoにとって重要なのか
1. 大きな秘密計算と、小さなオンチェーン証明を分離できた
復元フレーズからの鍵派生、Ed25519の計算、ハッシュ、Merkle包含確認をすべてオンチェーンで直接実行すれば、現実的なコストには収まりません。
Groth16では重い計算を利用者側で証明し、チェーンは短い証明を検証します。今回の実装では証明が336バイト、コミットメント対応の検証鍵が672バイト、公開入力が32バイトです。回路が約345万制約でも、オンチェーン検証の形を一定の大きさに保てる点が重要です。
Cardano側では、CIP-381でPlutusに提供されたBLS12-381のペアリング演算が、この検証器の土台になっています。今回の価値は、新しい暗号方式を発明したことより、既存の暗号部品、回路、gnarkの証明形式、Plutusの組み込み関数を、バイト単位で一致する実装として結びつけたことにあります。
2. 「証明が正しい」だけでなく「払い出し全体が正しい」を扱った
証明の検証だけでは安全な回収には足りません。クライアントが任意の公開入力を渡せる、対象額を変えられる、宛先を差し替えられる、コントラクト自身へ払い戻せる、といった余地が残れば、正しい証明でも資金移動は壊れます。
RedemptionValidator は、コントラクトが信頼するdatum、パラメータ、redeemerから公開入力を再構成し、証明、対象額、宛先を一体として検証します。この「証明器と業務ロジックの境界」に踏み込んだ点が、単純な暗号デモとの違いです。
3. 仕様、回路、コントラクト、形式化のずれを明示的に管理した
リポジトリは、同じ関係を英語仕様、gnark回路、Plutusコントラクト、Lean証明の四つで表現しています。最も危険なのは、それぞれが個別には正しく見えても、違うものを検証していることです。
そこで照合マップと監査資料を置き、どこに未証明の継ぎ目が残るかまで記録しています。完成を装うより、検証済みの境界と未完の境界を公開したことに、このコードベースの強さがあります。
「本番コードではない」と強調すべき理由
ホスキンソン氏は動画で、「大きな労力をかけたが、これはproduction codeではない」と明言しています。READMEのTODOも、実資産を扱う前に必要な項目を隠していません。
1. Previewの信頼設定は単独運営
Groth16では、証明鍵と検証鍵を作る信頼設定が必要です。秘密の乱数、いわゆるtoxic wasteを保持した者は、偽の主張に対する証明を作れる可能性があります。
リポジトリにはMPCセレモニーの枠組みがありますが、現在Previewにデプロイされた鍵は1人の運営者による設定で作られました。READMEは、テストネットでは受け入れた境界だが、価値を持つデプロイには受け入れられない、と明記しています。本番では独立した複数参加者、公開ビーコン、永続化されたtranscript、第三者による再検証が必要です。
2. 本当の難所は「攻撃者より先に保全する」運用
ゼロ知識証明は、保全済み資金の正当な請求者を識別できます。しかし、攻撃者が先に資金を動かせる状況で、どうやって対象資金を回収コントラクトへ移すのかは別問題です。READMEはこれを sweep race と呼び、「現実世界での難所で、現在は名づけられているが解決していない」としています。
3. 誰が対象者リストと対象額を決めるのか
回路は、公開されたMerkle rootに対する包含を証明します。しかし、そのrootの元になる (資格情報, 払い戻し対象額) リストを誰が作り、誰が異議を申し立て、保管資産の合計と債務の合計が一致することをどう確認するかは、ガバナンスの問題です。
暗号は、正しいrootに対する正しい証明を検証できます。root自体の公正さまでは自動的に保証しません。
4. 再請求防止、形式化、外部監査が残る
リポジトリは、複数請求時の使用済み状態を管理するspent map/nullifierがまだオンチェーンで完全には強制されていないこと、回路が仕様上の関係を正しくモデル化しているというLean上の継ぎ目が残ること、コンパイル後のUPLCまで形式検証が届いていないこと、コミットメントのエンコーディングをさらに堅牢化する必要があることを挙げています。
そして、実資産を扱う前の外部監査を明確な必須項目としています。
Phil氏の評価と、Eryx PoCとの関係
Cardano開発者のPhil氏(@phil_uplc)は、公開された proof-tool リポジトリの回路と全体アーキテクチャの中核的な基盤が proof-zk-recovery に由来すると紹介し、「今年見た中で最も技術的に印象的なコードベースの一つ」と評価しました。
これはPhil氏による技術者としての評価であり、独立監査の結論ではありません。ただし、前日に公開されたEryxのPoCを含め、複数の開発者が同じ回収問題へ取り組み、回路やツールを公開し始めた流れを理解する手がかりになります。
ホスキンソン氏自身も、責任ある開示のためリポジトリ公開を控えていたが、SecondFiで起きたことに関する他の公開リポジトリが現れたため、今は多くの人に見てもらう価値が上回ったと動画で説明しています。
オープンソース化によって、今後問われるのはコミット数の多さではありません。第三者が回路と仕様の一致を再現できるか、Preview取引を独立に検証できるか、指摘をIssueやPRとして閉じられるか、本番用セレモニーと監査を公開手続きとして完了できるかです。
この公開の意味
proof-zk-recovery が示した最大の成果は、「復元フレーズを公開せずに所有を証明する」というアイデアが、Cardano Preview上で資金を動かすところまで一続きになったことです。
これは、本番回収の完成を意味しません。しかし、単なる可能性の説明でもありません。
- 約345万制約の証明をCardanoノードが検証した
- 証明を新しい回収先と対象額に結びつけた
- 改ざん証明、誤った金額、誤った宛先を拒否する負例を置いた
- 形式化と監査資料を含め、未完の継ぎ目を公開した
- 本番へ必要な信頼設定、ガバナンス、運用、監査をTODOとして明記した
この五つが同時にそろったことで、議論は「ゼロ知識証明で救済できるかもしれない」から、「どの信頼境界を、誰が、どの公開手続きで閉じるのか」へ進みました。
利用者向けの注意も明確です。このリポジトリは研究・試作・検証のためのものであり、実際の復元フレーズを入力して資産回収に使う段階ではありません。SecondFiの影響を受けた可能性がある場合は、第三者から届くDMや非公式サイトへ復元フレーズを入力せず、公式案内と独立監査の結果を確認してください。
以下は、チャールズ・ホスキンソン氏の動画「repo for zero knowledge recovery」(YouTube ID:cXys2NTeevk)をもとにした日本語完全翻訳です。読みやすさのため、言い淀み、重複、明らかな自動字幕の乱れを整えています。固有名詞の補正は透明性メモに記載しました。正確な表現は必ず原動画をご確認ください。
チャールズ・ホスキンソン氏動画「repo for zero knowledge recovery」完全翻訳
オープンソースとして世界へ公開する
こんにちは。チャールズ・ホスキンソンです。暖かく晴れたコロラドからライブ配信しています。いつも暖かく、いつも晴れ、時々コロラドです。
今日は2026年7月14日です。私がオープンソース化し、世界へ公開するものについて、短い動画を作りたいと思いました。
これは、ほかの人たちから少し助けを借りながら、私自身が書いたコードです。大部分は私が書き、その後、ほかの人たちが加わって、いくつか素晴らしい機能を追加してくれました。
これはGitHubリポジトリの proof-zk-recovery です。
SecondFi事件から始まった開発
私はSecondFiのハッキングが起きた直後に、これに取り組み始めました。
今月Cardanoにハードフォークで導入する技術があります。ゼロ知識証明のための新しいプリミティブが数多く加わります。そこで私は、その技術を使って、24語の復元フレーズから導出された鍵が、ある派生パスに属することを証明できるGroth16証明を作れるかに関心を持ちました。
実質的には、SecondFiの回収アプリになるものです。
大変な作業でした。週末や、そのほかの時間も使って取り組みました。そして意図せず、ConsensysがWASM上でこれを動かす際に抱えていると思われる問題も解決しました。何かを修正することができました。
使っているのはGo、それから少しのHaskell、少しのRust、Pythonです。650以上のコミットがあり、本当に大量のコーディングをしました。かなり包括的な解説も用意しています。
責任ある開示を経て公開へ
私は責任ある開示のため、このリポジトリの公開を控えていました。しかし、SecondFiで何が起きたのかについて、ほかの人たちが公開リポジトリを出すようになりました。そのため、今も非公開にしておく価値はないと考えています。
もっと多くの人に見てもらいたいと思っています。
ここには、私がCardano Previewネットワークへ送ったトランザクションの証拠があります。ADAをロックし、Groth16証明を生成し直して送信し、ADAを回収できました。
property-based testingも行いましたし、そのほかにも多くのことを行いました。
私の知る限り、これはCardano向けにこれまで作られた中でも、最も包括的なGroth16回路の一つだと思います。深さはK=22です。約360万のパラメータがあり、かなり大きなものです。
そして、私たちが持つ新しい高度なプリミティブを誰かが実際に使う、初めての機会でもあります。
非常に広範なドキュメントを用意しました。かなり多くのものを入れています。
MPC、ブラウザWASM、そしてCardanoの能力
自分自身の証明鍵を生成するためのマルチパーティ計算セレモニーも実行できます。さらに、ブラウザ内のWASMでこれを動かすこともできます。これは本当に素晴らしいことです。すべてここにあります。
どうぞ自由にリポジトリをforkし、内容を見てください。
これはproduction codeではありません。形式化、Leanの記述、property-based testing、fuzzing、そのほかさまざまなことに多大な労力を注いでいますが、私はproduction codeを書きません。
それはほかの誰かがやります。
(笑)
ただし、これをどのように行うかは、このリポジトリが示しています。そして、Cardanoが素晴らしく、非常に高い能力を持つことも示しています。
私は引き続きリポジトリに取り組みます。
Stefan Contuは、証明に関する信頼実行環境を追加しました。RuslanはEMURGOに勤務しています。そしてGiulianoも関わっています。
ゼロ知識暗号とマルチパーティ計算をCardano上でどのように行うのか、そして私たちの新しいプリミティブのおかげで、それがどれほど効率的になり得るのかを理解するうえで、見る価値のある良いリポジトリです。
自由に試し、Previewへ証明を送ってみてほしい
ぜひ楽しんでください。中身を見て、遊んでみてください。コードをコンパイルして、実際に動かせるか試してみてください。
皆さんも自分のGroth16証明をPreviewへ、そして近いうちにmainnetへ送れるようになります。どうですか。
これは、チャールズ・ホスキンソンが書いた、とても珍しいコードです。
もっとも、先日気づいたのですが、今ではこうしたコードがかなり増えています。
今年書いたcontributionは4,000を超えています。大量のコードです。狂ったように書いています。今では65のリポジトリに関わっています。
少しやり過ぎていると思います。
それでは、これで十分です。皆さん、楽しんでください。確認したい方のた《小王子》是法国作家安托万·德·圣埃克苏佩里于1943年写成的著名儿童文学短篇小说めに、リポジトリへのリンクはそこにあります。
楽しんでください。それでは。
透明性メモ
- 翻訳の主素材は、ユーザー提供の自動字幕ファイル「repo for zero knowledge recovery.txt」です。
- 字幕の
pre-CK recoveryは、公開リポジトリ名と文脈に基づきproof-zk-recoveryと補正しました。 - 字幕の
second fly/Second FlightはSecondFiと補正しました。 24 keywordsは、文脈上24 key words、すなわち24語の復元フレーズを指すと判断しました。- 字幕の
consensusは、gnarkとWASMの文脈からConsensysを指す可能性が高いと判断して補正しました。原音が不明瞭な場合は原動画を優先してください。 - Stefan Contu氏に関する字幕の
trusted execution environmentは、リポジトリのMPC信頼設定セレモニーとの関係を含め原音確認の余地があります。翻訳では字幕に沿って「信頼実行環境」としましたが、技術用語としては追加確認が必要です。 - 動画内の「約360万」は本人の概数です。リポジトリの初期E1/E2回路は3,450,403制約、
D ≠ C追加後は3,450,487制約と記録されています。 - 動画で述べられたmainnetは将来見通しです。本稿の実証記録はCardano Previewテストネットのものです。
- 翻訳は内容忠実訳です。言い直し、間投詞、重複、明らかな自動字幕の乱れは、意味を変えない範囲で整理しました。
