🐌

はじめてのゼロ知識証明 【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 をベースにしています。

  1. メールは送信元ドメインの秘密鍵で署名される
  2. 公開鍵は DNS に登録されている
  3. 受信者は署名を検証することで「このメールは本物」と確認できる
  4. さらに ZK Email を使えば「正しく検証したこと」を 内容を明かさずに証明 できる

👉 詳しい技術解説は 公式ドキュメント を参照してください。


ZK Email SDK (Blueprint SDK)を触ってみる

ここからは実際に SDK を使って「メールのゼロ知識証明」を作ってみましょう。

1. インストール

npm install @zk-email/sdk@0.0.133

2. サンプルメールを用意

公式サンプル (residency.eml) をダウンロードして ./sample/residency.eml に保存します。

3. 証明生成スクリプトを作成(generateProof.ts

※プレビューで表示されるコードが一部古いままになっています。最新のサンプルコードは github を参照してください!

https://github.com/akmrbaby/zk-tutorials/blob/main/zkemail/generateProof.ts

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!' であること」のゼロ知識証明を生成できました。

5. 検証スクリプトを作成(verifyProof.ts

https://github.com/akmrbaby/zk-tutorials/blob/main/zkemail/verifyProof.ts

6. 証明検証を実行

$ npx tsx verifyProof.ts

isValid: true と出力されれば検証成功です!

証明者は証明生成時に出力される proofData.jsonpublicOutputs.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