はじめてのゼロ知識証明 【ZKEmail 編】:メールをゼロ知識証明で扱ってみよう
ゼロ知識証明(Zero-Knowledge Proof, ZKP)って名前は聞いたことあるけど、
「実際に何ができるの?」「どうやって触ればいいの?」と思っていませんか?
この記事では ZK Email というライブラリを使って、メールを題材にゼロ知識証明を体験してみましょう!
難しい数学や暗号の仕組みは SDK が全部やってくれます。
ZK Email とは?
ZK Email は 既存のメールインフラ(SMTP, DKIM, etc.)をそのまま使いながら、メールに基づく主張をゼロ知識証明で行える仕組み です。
例えばこんなことができます:
- 「このメールを確かに受け取った」ことを証明する
- 「このメールが
example.com
ドメインから送られてきた」ことだけ証明する(本文は隠したまま) - 「件名に『Welcome』という文字がある」ことを証明する
つまり、メールの中の必要な部分だけを開示して証明できる のがポイントです。
応用例としては、
- Web2 アカウントを使った Web3 ウォレットのリカバリー
- 匿名 KYC(特定の企業からのメール受信だけを証明する)
- 招待メールを使った「秘密のコミュニティ認証」
などが考えられます。
具体的な ZK Email の活用例として、ZKP2P があります。 ZKP2P は ZK Email を活用し、ユーザーが「メールを受け取った事実」や「送信元ドメインの正当性」をゼロ知識で証明できる P2P 認証アプリケーションです。
仕組み(ざっくり)
ZK Email は DKIM をベースにしています。
- メールは送信元ドメインの秘密鍵で署名される
- 公開鍵は DNS に登録されている
- 受信者は署名を検証することで「このメールは本物」と確認できる
- さらに ZK Email を使えば「正しく検証したこと」を 内容を明かさずに証明 できる
👉 詳しい技術解説は 公式ドキュメント を参照してください。
ZK Email SDK (Blueprint SDK)を触ってみる
ここからは実際に SDK を使って「メールのゼロ知識証明」を作ってみましょう。
1. インストール
npm install @zk-email/sdk@0.0.133
2. サンプルメールを用意
公式サンプル (residency.eml
) をダウンロードして ./sample/residency.eml
に保存します。
generateProof.ts
)
3. 証明生成スクリプトを作成(※プレビューで表示されるコードが一部古いままになっています。最新のサンプルコードは github を参照してください!
4. 証明生成を実行
npx tsx ./generateProof.ts
うまくいくと、以下のように証明データと公開データが表示されます。
proof: { pi_a: [...], pi_b: [...], pi_c: [...], protocol: 'groth16' }
public: { subject: [ 'Welcome ', 'to the Succinct ZK Residency!' ] }
これで「メールの件名が 'Welcome to the Succinct ZK Residency!' であること」のゼロ知識証明を生成できました。
verifyProof.ts
)
5. 検証スクリプトを作成(
6. 証明検証を実行
$ npx tsx verifyProof.ts
isValid: true
と出力されれば検証成功です!
証明者は証明生成時に出力される proofData.json
と publicOutputs.json
を検証者に提示することで、検証者は証明の正しさを検証できることが分かりました。
もっと詳しく知りたい方向け:Registry と Blueprint
ZK Email には Registry というプラットフォームがあります。
ここでは「どんなメールのどんな部分を証明するか」を設計した Blueprint(設計図) を作成・共有できます。
本記事では、すでに公開されている Blueprint を利用しましたが、自分で Blueprint を作成することも可能です。
- Blueprint = メール証明のルール(正規表現・送信者・抽出するフィールドなど)
- Registry = そのルールをコンパイルして ZK 回路やスマートコントラクトを生成してくれるサービス
👉 Registry をのぞいてみる: https://registry.zk.email/
まとめ
- ZK Email を使うと メールを材料にしたゼロ知識証明 を簡単に体験できる
- 難しい暗号処理はすべて SDK が肩代わりしてくれる
- 「メールのどの部分を証明したいか」を Blueprint で指定するだけ
ZK Email には、認証やアクセス制御、チケットや招待状の検証など、非常に幅広い応用が考えられます。
興味がわいたらぜひ公式ドキュメントを読んで、ZK Email を触ってみてください!
参考リンク
本記事について
この記事は ZK Core Program 2025 の活動の一環として執筆しました。
Discussion