技術オタクとしてスマートコントラクトのことを勉強するのは楽しいだろうと思うんだけど僕は実用にはならないんじゃないかと思ってるよ。
スマートコントラクトはコードの保管場所も状態の保管場所もブロックチェーンになっているのでコードもコードのステップごとの状態変化も全て公開されている。この状態で、例えば秘密投票を実現するためには、1ステップでアトミックに暗号化された多数の投票内容を復号して票の数を集計する命令を実装する必要がある。コードを実行してブロックをチェーンにつなぐためには、あるノードがノンスを発見するだけではなくて、多くのノードが同じコードを実行してノンスの検証をする必要があるので、多くのノードでこのアトミックな命令を実行する必要があることになる。
それだけのコストをかけても、参加する全員を信用できない組織を運用する必要があるとは思えないんだよね。組織の誰かを信用するなら、そこを信用の起点にして、ブロックチェーンを利用しないで従来と同じように組織を運用すればいいだけなんよね。
待って、やっぱりスマートコントラクトで秘密投票は実装できない。
開票メソッドがそれぞれの投票用紙を複号できるってことはブロックチェーンのどこかから復号鍵が得られる(どこから得られるかは開票メソッドのコードに書いてる)ってことだから、暗号化された投票用紙を誰でも複号できちゃうことになる。
それでも誰が何に投票したかわからないようにするためには投票元のウォレットが匿名のままにする必要がある。ということは組織の意思を決める投票権を誰だかわからない人に渡すことになる。それでいい組織もあるだろうけど、僕には多くはなさそうに思えてくる。
いやぁポンコツだねえ…
@zundan 脊髄反射で「準同型暗号」というキーワードだけ浮かびました。
(復号不要で計算可・ただし制限多し、ということしか分からない素人です。たぶんずんださんの方が詳しそうなので、間違ってるかも)
@tadd ありがとうございます!勉強してみるー。僕は非対称鍵暗号の表層しか知りません…。
@tadd 暗号文の掛け算をすると平文の足し算をしたことになる(加法準同型というのですね)Paillier暗号というのがあるそうです。これは使える!と思ったのですが、掛け算の結果を平文の足し算に複号する段階で私有鍵が必要で、同じ鍵でそれぞれの投票内容も複号できちゃいそうです。私有鍵を隠せないスマートコントラクトの場合には使えなさそう…。
https://tex2e.github.io/blog/crypto/homomorphic-tallying-with-paillier
@zundan 教えてくださってありがとうございます!具体的な応用例やら問題点を知らなかったので知れて嬉しいです。さすがに研究者の人たちは素人の思い付きの何倍も先を行っていて安心
しかしなるほど、そうだとすると厳しいですねぇ。それぞれの投票内容はいつ誰にも=集計する人(システム?)でさえも、見られたくないし。そしてスマコンとかなら当然、全員が集計の計算ができて、その結果を見られて、それらは検証できないといけないだろうし……。(続)
@tadd 他の方にトランザクションの内容を公開せずにトランザクションの正当性を検証する方法もあると教えていただいた
https://ostatus.ikeji.ma/objects/c2d4d11f-eb40-4825-b445-a7489094bcc1
のですが、理解できてませんw
金融庁の公開している「ブロックチェーンを用いた金融取引のプライバシー保護と追跡可能性に関する調査研究報告書(参考資料)」(PDF)
https://www.fsa.go.jp/policy/bgin/ResearchPaper_Reference_MRI_ja.pdf
にもしかしたらヒントがあるかもですがながーいw
@zundan なるほどーー?
「できないとは言い切れないかも?」と感じていろいろ考えてはみたのですが、そもそも自分はそういう投票をやる意義があるか分かってなかったり、あるいは最初のコストの話も読んで「それはそうだよなー」と思ったりはしてますw
@zundan ほんとどうでもいいのですが、自分が「準同型暗号」という言葉を知ったのはたぶん、ある研究者の青鳥か何かでした。
でその人、自分とikejiより一期下の後輩だったりしますね
@tadd IT関係の優秀な人たち年齢関係ないってのは実感してますw
@zundan その後、完全な素人考えと思いつきを10分くらい繰り返し、例えばこんなのを考えました。
1. 投票前に有権者を確定する
2. 有権者全員の鍵を合成して、全員の意思がないと開けられない鍵(選挙委員会鍵?)を作る
3. それで暗号化して投票・集計
4. 結果だけ全員で復号
しかし
* 1はそもそもできるのorしていいの?(スマコン界隈知識の不足)
* 2/4もそもそもできるの?(暗号の基礎知識の不足)
* 結局、4で誰か一人の意思(悪意)だけでまるっと結果を破棄できて、あまりにも弱くね?
ということで、個人にもボツですね
@tadd 僕もぜんぜん知らないのですが、1は前提条件な気がします。中島聡さんの本 https://www.amazon.co.jp/dp/B0B7G3SP45 に「NFTを買った人がDAOに参加できる」みたいな記述があった気がします。2 、3、4をPaillier暗号風にすすめるとすると、かけ算の結果だけ投票者それぞれの私有鍵どれででも復号できるような演算がみつかれば良さそうですけど、はてさて…
@zundan なるほどほど。中学生じゃないので分からないかもしれない(弱気)
@tadd ぐあー。よく考えてみPaillier暗号の場合には有権者はみんな同じ鍵対を使うので、暗号化してあったとしても、有権者間で投票内容が見えちゃいますね…。
こういう議論しながらおちんぎんもらえるのが楽しい人もいそうだなというのはちょっと理解し始めてますw