【要約】AI推論のゼロ知識証明入門⑥ 【番外編】EZKLで「本人確認」を秘密のままZK証明してみた――文字列データのメンバーシップ証明 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者が、実用的な文字列データをZK証明に組み込もうとした際、以下の技術的障壁に直面した。
- ・EZKLの回路が有限体(Field Element)しか扱えず、文字列を直接扱えない。
- ・SHA-256はZK回路内での計算コストが極めて高い。
- ・ハッシュ値が巨大な整数となるため、PyTorchのint64型に渡すと精度が失われる。
- ・Poseidonハッシュの計算には、デフォルトの回路規模では不足する場合がある。
// Approach
開発者は、文字列を有限体へ安全かつ効率的に変換し、精度を維持するパイプラインを構築した。
- ・
str_to_felt()の実装: SHA-256でハッシュ化後、128bitずつ分割し、リトルエンディアン変換を経てPoseidonハッシュで1つのField Elementに圧縮する。 - ・桁溢れ対策: ハッシュ値を200ビット右シフト(
>> 200)し、int64の範囲内に収める。 - ・モデル設計: PyTorchで一致判定を行い、結果を0(合格)または1(不合格)で出力する回路を構築。
- ・設定最適化:
logrows=12を指定し、Poseidon計算用の回路スペースを確保する。
// Result
検証プロセスを通じて、以下の成果が得られた。
- ・Alice(メンバー)の証明は、検証に成功(verified: true)した。
- ・Bob(非メンバー)の証明は、検証段階で制約違反として正しく拒絶された。
- ・名前や役職などの機密情報を一切公開せず、メンバーシップのみを証明できることを実証した。
Senior Engineer Insight
> 実用化に向けた極めて重要な知見が含まれている。特にSHA-256とPoseidonの併用による計算コストの管理や、ビットシフトによる精度維持は、ZK回路設計における定石と言える。ただし、ビットシフトによる情報の欠落リスクや、回路規模(logrows)の調整コストは、大規模運用時のリソース見積もりに直結する。実戦投入には、精度と計算コストの厳密なトレードオフ評価が不可欠だ。