ゼロ知識証明(ZKP)

ゼロ知識証明とは、値そのものを明かさずに、ある条件が成り立っていることだけを相手に示す技術のことです。 Zero-Knowledge Proofの略で、ZKPと表記されます。

別表記:ゼロ知識証明/ZKP/Zero-Knowledge Proof/ゼロ知識/零知識証明

どういうことか

「20歳以上である」ことを示すのに、生年月日を見せる必要はありません。「年収が一定額を超えている」ことを示すのに、正確な金額を見せる必要もありません。「この会社の社員である」ことを示すのに、社員番号を見せる必要もありません。

本当に知りたいのは、条件を満たしているかどうかだけです。ゼロ知識証明は、条件を満たしているという事実だけを、数学的に証明します。確認する側は、その証明が正しいことは確かめられますが、元の値は分かりません。

「ゼロ知識」とは、確認する側が得る知識が「条件が成り立っている」という一点以外はゼロである、という意味です。

身近なたとえ

鍵のかかった扉の向こうに宝物があるとします。あなたが鍵を持っていることを、鍵を見せずに証明したい。

あなたが扉の向こうに入り、相手が外から「中の宝物の色を教えて」と言い、あなたが正しく答える。これを何度か繰り返せば、相手は「この人は確かに鍵を持っている」と納得できます。鍵そのものは一度も見せていません。

実際のゼロ知識証明は、この「確認のやりとり」を数学で行います。やりとりを何度も繰り返す代わりに、一つの証明データを渡すだけで済む方式もあります。

選択的開示との違い

必要な項目だけを見せる選択的開示は、見せると決めた項目については、その値がそのまま相手に渡ります。生年月日を見せると決めたら、生年月日が相手に伝わります。

ゼロ知識証明は、値そのものを渡しません。「生年月日から計算すると20歳以上になる」という事実だけを渡します。より踏み込んだ形の情報の絞り込みです。

選択的開示が「どの項目を見せるか」を選ぶ技術だとすれば、ゼロ知識証明は「項目を見せずに、項目についての事実だけを伝える」技術です。

何に使えるのか

個人情報を扱う場面で、最も効果があります。年齢確認、収入条件の確認、資格の有無の確認。相手が本当に必要としているのは条件の成否だけで、元の値を渡すのは余計です。渡さずに済めば、受け取る側も個人情報を預からずに済み、保管や管理の責任を負わずに済みます。

もうひとつの使い道が、「同じ人が何度も提示している」ことを相手に気づかせない、という用途です。通常の証明は、提示のたびに同じ署名を見せるので、相手は「前に来たのと同じ証明だ」と分かります。ゼロ知識証明を使うと、提示のたびに違う形の証明を作れるため、複数の提示を結びつけられません。利用者の行動を追跡されたくない場面で使われます。

計算の負担

ゼロ知識証明は、計算の負担が大きく、実装も複雑です。証明を作るのにも、検証するのにも、通常の署名の確認より多くの処理が要ります。方式によっては、証明を作る側に相応の計算能力が必要になります。

すべての場面で使う技術ではありません。扱う情報の機微性が高く、値を渡すこと自体を避けたい場面で検討するものです。

AIエージェントとの関係

企業がAIエージェントに権限を持たせる用途では、多くの場合、ゼロ知識証明までは必要ありません。「このAIは経理フォルダを読める」という権限は、隠すべき個人情報ではなく、むしろ受け取る側に明示したい情報です。

必要になる可能性があるのは、AIエージェントが社外のサービスとやりとりする際に、自社の組織構造や委任した人の情報を相手に渡したくない場面です。「正規の委任を受けている」ことだけを示し、誰からの委任かは伏せる、といった使い方が考えられます。

よくある誤解

優れた技術なら、常に使うべきか。 計算の負担と実装の複雑さがあるので、必要な場面に限って使います。多くの業務用途では、選択的開示で足ります。

ゼロ知識証明があれば、何も情報が漏れないのか。 「条件が成り立っている」という事実は伝わります。それ以外を渡さない、ということです。条件の設定次第では、その事実から元の値がある程度推測できることもあります。

ブロックチェーンの技術か。 ブロックチェーンで使われることが多い技術ですが、ブロックチェーンとは独立した数学的な仕組みです。台帳がなくても使えます。

一覧に戻る