ゼロ知識証明とは?エンジニア向けに爆速で解説!
A quick look at zero-knowledge proofs
A quick look at zero-knowledge proofs
「ゼロ知識証明(Zero-Knowledge Proofs:ZKP)」について、その核となる考え方をサクッと解説します。一言で言えば、相手に特定の情報を教えることなく、「自分はその情報を知っている」という事実だけを証明する技術です。プライバシー保護やブロックチェーンのスケーラビリティ向上において、今もっとも熱い注目を集めている暗号技術の一つです。
素晴らしい記事だね。ZKPを他人に説明する時に役立てるよ。一点だけ小さな修正。random.randrange(100)だとコミットメントは300通り(100個のnonceに対して3色)になる。公開されたエッジをいくつか見れば、検証者はパレットを特定して300通りの組み合わせをブルートフォースできるから、実質的にすべてのコミットメントが暴かれちゃうよ。これは128ビットのランダム値、例えば secrets.token_bytes(16) を使えば緩和できるはず。あと、hash関数の代わりにsha256を使った方がいいね。Pythonのhashは衝突耐性が十分じゃないから、セキュリティ用途には向いていないよ。
ZKPなんて100%デタラメだよ。ハッシュとデータベースの存在を知らない連中が考え出した新しいバズワードに過ぎないね。
ZKPがサーバーからクライアントへの信頼に依存しているっていう点について、誰も触れていないのが気になるな。ZKPがほとんどのセキュリティ用途で実用的じゃない唯一の理由は、クライアントが送信してくるデータそのものが「真実である」と信頼しなきゃいけないからだよ。従来のセキュリティなら、ユーザーが入力値を送ってサーバーが検証する形だけどね。ZKPの議論でほとんど語られないけど、結局ZKPって権威あるサーバーが存在しないP2P環境か、あるいはそのサーバーが「ノード(クライアント)」を信頼しているようなケースでしか機能しないものだよ。