今日はゼロ知識証明をさらに深掘りしたいです。というのも、先の投稿ではアイデアを大まかに描いたにすぎなかったからです。

簡単なたとえ話です。生年月日を見せずに、18歳以上であることを証明するようなものです。これは、主張が真かどうかを隠しているのではなく、証明に必要以上の情報を開示しないだけです。ゼロ知識証明では、IDカードの代わりに数学で同等のことをコンピュータに実行させられます。

技術的には、@Dusk はPLONK(それを早期のテストネットのころから開発に携わってきた証明システム)に依拠しており、BLS12-381曲線の上で動作します。PLONKによって、ネットワークは、その主張の背後にある秘密の入力を一度も見ずに、トランザクションやコントラクトがルールに従っていることを確認できるのです。

ただし注意点があります。しかも最近のものです。4月にOtterSecのセキュリティ研究者が、#dusk のPLONK実装における健全性(soundness)の欠陥を開示しました。検証者が、証明者の多項式コミットメントのうち4つをチェックしていなかったのです。理論上は、シールドされたトランザクションのために証明を偽造できてしまう余地があったかもしれません。Duskのチームは、検証手順に不足しているチェックを追加することで対応しました。

私は誰かを警戒させたいわけではありませんが、ここで挙げるのは役に立つ注意喚起だからです。暗号方式自体は健全であっても、それを実装するコードにバグがあることはあり得ます。検証者(verifier)の検証、つまり検証処理が適切かどうかも重要なのです。
$DUSK $HEMI $TUT