2つの数を追加するにはどうすればいいの?—見てはいけないのに
週末にこれを聞かれて、まず不適切な答えをしたので、ちゃんと読み直しに行きました。
HedgerはECC上のElGamalに基づく準同型暗号を使っています。素朴に言うと、これは「復号せずに暗号化された値どうしの計算ができる」という性質を買うことです。
つまり、2つの暗号化された残高を保持している契約は、どちらの数も合計も一切学ぶことなく、暗号化されたまま正しい合計を生成できます。
それは魔法みたいに聞こえますが、魔法ではありません。暗号がどう構造化されているかの性質で、ElGamalには暗号文同士の乗算が指数部の加算に対応する、という性質があります。これは80年代から知られています。
では、なぜゼロ知識証明と組み合わせるのか?どちらか一方だけではダメなのか。
準同型暗号は「数学的な計算が隠された値に対して可能である」ことは教えてくれます。しかし「計算をした人が正直にやったか」や「そもそもの入力が妥当だったか」を保証はしてくれません。それを担うのが証明です。
つまり、1つのプリミティブは機密性のある計算を扱い、もう1つは検証可能な正しさを扱い、それぞれが相互に置き換えるものではありません。多くのプライバシー・システムは証明だけに頼って回路の複雑さでコストを払います。なぜなら、隠す必要がある算術についての命題を証明することになるからです。
正直な注意点として、準同型方式はタダではありません。これは部分準同型で、記事の見出しを息をのむようにする“完全準同型暗号”ではありません。違いは、任意の計算ではなく特定の演算だけをサポートする点です。しかも、その制限こそが、「2秒以内にブラウザで動かせるほど十分に高速」な理由にもなっています。
私も同じトレードオフを選んだでしょう。汎用的でも使い物にならないのは誰にも役に立ちません。
#dusk @Dusk $DUSK