年齢確認におけるゼロ知識証明の限界
このブログ記事では、Brave ResearchのSofía Celi、Kyle Den Hartog、Hamed Haddadiによる現在進行中の学術研究について紹介します。
年齢確認は、規制政策と年齢制限が必要なコンテンツの増加により、オンラインサービスへのアクセスの前提条件としての位置づけがますます大きくなっています。ゼロ知識証明(ZKP)は、年齢や資格についてプライバシーを保護する証明を可能にする技術的解決策として推進されています。しかし、実用化においては、概念的、実践的、両方の面で限界が露呈しています。中央集権的な機関に依拠する認証ベースのシステムは、排除のリスクを伴い、新たな権力の集中を生み出し、ユーザーのプライバシーを脅かします。同時に、多くのZKPプロポーザルは依然として脆弱であり、健全性、合成可能性、長期的な持続可能性について懸念を引き起こしています。暗号技術による保証だけでは不十分で、コンテンツの分類、認証の取り消し、システム間の連携といった課題が残り続けています。これらは、ZKPだけでは年齢確認やID確認における、より広範な技術的・社会的問題を解決できないことを示しています。
ここでは、既存システムの失敗例、中央集権的な認証フレームワークの意図しない結果、誤って適用された証明から見えてくる課題を明らかにすることで、これらの限界を検証します。私たちの目的は、ZKPを否定することではなく、ユーザープライバシー、自律性、そしてWebのオープンな性質を真に優先するものとして、より広範なアーキテクチャの文脈の中に位置づけることを目的としています。
背景
主要なテクノロジープラットフォームからの最近のプロポーザルは、デジタル検証可能な認証情報を強調しており、多くの場合ZKPで強化され、例えばオンラインでの年齢確認やアクセス制御の基盤としています。これらのフレームワークでは、ユーザーが指定された発行者から暗号署名された証明(例:年齢、居住地、市民権など)を取得し、それをサービスに提示して資格を証明することを想定しています。同様の暗号モデルは、学術および産業の分野でも研究されており、特にブロックチェーンベースのID(身元確認)システムにおいて盛んです。具体的には、以下のようなプロポーザルがあります。
-
zk-TLS:TLSNotary、DiStefano、Janus、Town crier、DECOやその他のシステムは、ユーザーがTLSセッションのトランスクリプト(通信記録)にコミットし「改ざんされていないWebサービスで、確かにこの情報(例:口座残高)を確認した」という事実を証明できます。これにより、Web上の情報をスマートコントラクトに安全に取り込むことが可能になります。
-
zk-Authorization:zkLoginやzkCredsなどのツールでは、OAuthやOpenIDプロバイダーが発行したJSON Web Token(JWT)について、トークンそのものを公開せずに、その内容に関する情報(例:年齢が18歳以上であるなど)を証明できます。
-
zk-Compilation:実行ファイルやバイトコード(ELF、WASMなど)が、特定のソースコードと特定のコンパイラで作られたものであることを証明します。これにより、プログラムの出所を追跡でき、監査が可能になります。
-
zk-Optimization:Ottiなどのシステムは、プライベートな最適化プロセス(例:大学入学審査)が、事前に定められたルールと入力データに基づいて正しく実行されたことを、実際の入力データ(受験生の個人情報など)を公開せずに証明できます。
-
zk-Middleboxes:ネットワーク通信(例:DNS通信)の記録にコミットすることで、送信者は通信内容を公開せずに、「この通信は定められたルールに従っている」と証明できます。
これらの技術的進歩があるにもかかわらず、認証ベースのシステムは、ZKPの活用において理論面でも実装面でも限界を抱えています。以下のセクションではこれらの限界について、排除と中央集権化のリスク、現在のZKP構成の脆弱性、そして分類、取り消し、相互運用性、これらの事項に焦点を当てて検証します。
限界
前述の通り、技術的進歩があっても、認証ベースのシステムは理論面でも実装面でも限界を抱えています。その問題は単なる実装の細かな問題ではなく、暗号技術・セキュリティ・プライバシーの保証と、身元確認やアクセス制御における社会技術的な現実との間にある、より根深い矛盾を反映しています。これらの課題を理解するために、いくつかのカテゴリーに分けて考えてみます。
セキュリティの脆さ:実際に使用されているシステムでのZKP使用は、依然として脆弱な状態です。学術文献で「ゼロ知識」と説明されている多くのプロトコルが、厳密な形式的定義を満たしていません。実際にはゼロ知識を提供できていない(プライバシー保護に失敗している)、または健全性が欠如している(偽造が可能である)場合があります。定義を満たしている場合でも、複数のシステムを組み合わせて使った際に安全でないことも多く、複雑なシステムでの展開時にリスクが高まります。本番環境で使用されるZKPが求められている特性を確実に達成するためには、厳密に検証されたセキュリティ証明と形式検証技術の両方によるさらなる研究が必要です。実装も容易ではありません。十分に監査されたシステムでさえ、微妙な脆弱性 が発見されています。また、最適化処理自体を慎重に分析しなければ、中核となる保証が気づかないうちに損なわれる可能性があります。
不十分なプライバシー保証:ZKPは、慎重かつ正しく適用されなければ、適切なプライバシー保証を提供できません。例えば「年齢が20〜21歳の範囲内」という証明は、意図せず「実際には21歳である」ことを明かしてしまう可能性があります。同様に、より広い年齢層(20〜25歳、25〜30歳、30〜40歳など)を使っても、コンテンツを特定の年齢範囲に紐づけることが可能で、本来のプライバシー保護が損なわれます。実際には、理論上「プライバシーを保護する」範囲証明でも、その設計方法や解釈の仕方次第で重要な情報が漏れてしまう可能性があります。」
そして新たなリスクが生まれます。証明が他の情報、例えば認証を使ったサイト、発行機関(特定の国の政府など)、ユーザーの位置情報などと組み合わされると、これらの情報の組み合わせ(発行元、年齢範囲、地理情報)によって個人が特定されてしまう可能性があります。実際には、現在のWebで公開されている情報よりも多くの識別情報を提供することになり、プライバシー保護という名目のもとで、広範囲なプロファイリングやサイトをまたいだトラッキングを可能にしてしまいます。
さらに、複数の証明が時間をかけて発行されると、プライバシーの損失が時間と共に積み重なる可能性があります。例えば、あるユーザーが最初に「20〜22歳」であることを証明し、2ヶ月後に「21歳以上」であることを証明した場合、これらを組み合わせると正確な生年月日がかなり絞り込まれてしまいます。このような時間経過による情報漏洩は、システムが個別の証明だけでなく、繰り返される利用全体を通じてプライバシーを管理する必要があることを示しています。属性情報を段階的に開示することで累積するプライバシー損失についてユーザーに明確に示すこと、そしてセッションをまたいで追跡できないことを基本的に保証することが、このようなシステムを安全に展開するために不可欠です。
さらに、適切な範囲制限なしに適用されると、ZKPシステムはクライアントサイド・スキャンの一種に成り下がる可能性があります。つまり、TLS通信記録、JWTトークン、デジタル認証情報などのデータ内容について、任意の証明が作られてしまうのです。このような証明は、元となるプロトコルやデータ構造が提供するセキュリティやプライバシーの保証を破壊する可能性があります。したがって、証明される内容が間接的な身元特定やポリシー回避を可能にしないことを、検証可能で、なおかつ外部からの監査を可能にする必要があります。
中央集権化と排除のリスク:多くのデジタル認証システムは、政府、通信事業者、身元確認会社など、少数の認定発行機関に依存しています。政府発行の認証情報(運転免許証、身分証明書、パスポートなど)は「高信頼性」とされ、認証情報が取り消しになる場合もあります。しかし、この取り消し機能により「発行元への問い合わせ」問題が生じます。認証が検証されるたびに発行機関に連絡が行くため、認証情報がどこでどのくらいの頻度で使われているかを追跡できてしまうのです。サービス提供者がどの発行機関でも信頼できるとしても、実際には限られた「高信頼性」認証のみを受け入れることがほとんどです。これにより、1〜2の発行機関が、すべての認証提示について可視性とメタデータを得ることになります。例えば、サイトが訪問ごとに新しい認証を要求する場合、それを保存しなくても、発行機関は検証を通じてユーザーの訪問頻度を知ることができます。
排除も大きな懸念です。サービス提供者が正式な身分証明書、在留許可証、組織の所属証明など限られた認証のみを受け入れる場合、それらを持たない人々はサービスから締め出されます。現在、世界で推定8億5千万人が正式な身分証明を持っていません。このようなシステムでは、少数の高信頼性認証への依存がデジタル格差を助長するリスクがあります。さらに、サービスへのアクセスやオンラインでの発信権が認証のリアルタイム有効性に依存する場合、少数の発行機関が事実上、門番としての権力を握ることになります。認証の取り消しは、正当な理由(未払い罰金による免許停止など)で起こることもあれば、より深刻な理由(発行機関が認証保有者の発信内容を検閲し都合の悪い内容を発見した、など)で起こることもあります。デジタル認証の使用を義務付ける現在の規制は、これらの中央集権化と排除のリスクに十分対処できていません。保護措置がなければ、認証発行機関はデジタルエコシステムの重要な部分に誰が参加できるかを決める強力な管理ポイントになりかねません。
解析と意味の不一致:現在のZKPベースのシステムには、重要でありながら、しばしば見過ごされる限界があります。それは、低レベルデータ(生のバイト列など)と、証明が対象とするはずの構造化データとの間の解釈のずれです。ほとんどのシステムは、入力データがすでに正しい形式になっていることを暗黙的に前提としています。例えば、JSONオブジェクトが文法規則に従っている、または認証情報が標準的な書式に準拠しているといった前提です。
しかし、正しい解析が保証されていなければ、この前提は悪用される可能性があります。不正な形式や悪意を持って細工された入力データは、証明する側と検証する側で異なる解釈をされる可能性があり、システムの健全性が損なわれます。例えば、システムがJSONのキーにエスケープ文字が含まれないと想定している場合、攻撃者がこの想定を破ることで証明システムのセキュリティを突破できる可能性があります。
一部ではデータの一部を公開して直接検査することで、この問題を軽減しようとしています。しかし、これではZKPが本来提供すべきプライバシー保護が弱まってしまいます。課題は、値(年齢など)がデータ内に存在するかを確認するだけでは不十分だということです。データが文法規則に従っている(有効なJSONであるなど)こと、そして値が文書構造の正しい位置にあることも保証しなければなりません。健全な証明では、例えば年齢の値が確実にトップレベルの「age」フィールドに結びついており、入れ子になったフィールドに隠されていたり、構造の曖昧さを利用して挿入されたりしていないことを証明する必要があります。
システム全体に関わるその他の限界:
- プロトコルの標準化の欠如:国や地域、ベンダーをまたいで広く採用されているZKPプロトコルの標準が存在しないため、システム間の相互運用性が妨げられています。
- 相互運用性の問題:互換性があるとされるシステム同士でも、データのエンコード方式、サポートされる条件式、証明の形式が異なるため、エコシステムが分断されています。
- 認証取り消しの課題:プライバシーを保護しながら認証を取り消す仕組みはまだ十分に開発されておらず、追跡不可能であることの保証と両立させることが難しい状況です。
- 信頼の曖昧性:ZKPを使っていても、検証する側は発行機関を信頼できるかどうかを判断する必要があり、結局は中央集権的な信頼関係への依存が再び生じてしまいます。
- 使いにくさの問題:ユーザーに「どの情報を開示するか」「どんな条件で証明するか」などを設定させることは、理解の負担や使い勝手の悪さにつながります。
これらの懸念は、ゼロ知識証明の価値を否定するものではありません。ZKPはプライバシー保護システムの設計において依然として強力で不可欠なツールです。厳密な形式検証、包括的なセキュリティ分析、ユーザー中心のインターフェース設計、そしてより広いシステム全体や社会への慎重な統合を行わずに、ZKPを「そのまま使う」ことの危険性を指摘しているのです。
アイデア
これらの技術的な限界を超えて、ゼロ知識証明(ZKP)がどのように構築されるか、ユーザーにより多くの制御権と透明性を与えることには大きな可能性があります。システムが裏側で勝手に証明を生成するのではなく、何が証明されようとしているのかユーザーが確認し、さらには調整できるようにすることができます。
例えば、デジタルIDから「年齢を表示」することを何も考えずに承認するのではなく、ユーザーが証明を作る前に何が公開されるのか正確に確認し、承認または編集できたらどうでしょうか。より高度なシステムでは、ユーザーがどのデータ項目を含めるかを選択でき、変更を加えた場合、修正後のデータが元の情報と矛盾せず、本来の意味を保っていることを示す追加の証明をシステムは生成できるのではないでしょうか。
実際には、認証情報に27歳と記載されている場合でも、ユーザーは「25歳以上」という情報だけを公開することを選べます。システムは、実際の年齢を明かさずに、この主張が元のデータと矛盾していないことを証明します。
このモデルは、プライバシーとユーザーの自律性の両方を実現します。ユーザーは何が証明されようとしているのかを明確に理解でき、情報を共有する前にフィルタリングや加工ができます。また、独立したツール、検証済みのソフトウェア、第三者によるチェックを活用して、データの変換が正しく行われていることを保証することで、プロセス全体への信頼も高めることができます。
まとめると…
ゼロ知識証明はプライバシーを保護するデジタル身元確認や年齢確認に向けた重要な前進ですが、決して万能な解決策ではありません。本稿の分析が示すように、現在の提案には根強い限界があります。暗号技術の定義と実装の脆弱性、実用上は不十分なプライバシー保証、認証の仕組みにおける排除と中央集権化のリスク、データ解析における意味の曖昧さ、そして相互運用性、認証の取り消し、使いやすさという未解決の課題です。
これらの限界は、ZKPを単に「導入すれば解決する」というものではないことを示しています。オンラインの信頼やアクセス制御における社会技術的な問題を解決するには、ZKPをより広いシステム設計の中に組み込む必要があります。そのシステムは、ユーザーの自律性を明確に保護し、中央集権的な管理ポイントを最小限に抑え、排除、検閲、プロファイリングという現実の問題に対応するものでなければなりません。これを実現するには、暗号技術の研究だけでなく、慎重なシステム設計、排除が発生しないフレームワーク、そして透明性の高いユーザーインターフェースが必要です。
要するに、ZKPは完全な解決策ではなく、プライバシー保護技術という大きなエコシステムの中の一つの要素として捉えるべきです。厳密な検証、説明責任を伴うガバナンス、そして実質的なユーザー制御と組み合わせて初めて、Webの開放性を損なうことなくオンラインの信頼を強化するという本来の目的を達成できるのです。

