カナゴールドの仮想通貨ブログ

カナゴールドが推す銘柄を紹介します

シニョレッジ・シェア型Stablecoin入門

 ごくごく普通の小学校のお話です。生徒たちはみんな給食のデザートが大好きです。なかでも一番人気はメロン。メロンをあげるかわりに、こんどの給食で出るプリンを2つちょうだい、といったやりとりが盛んです。


 しかし、ひんぱんにこんなやり取りをしていると、むかしの約束ごとを忘れてしまったりすることも。
「この前のメロンの代わりに今日のプリンくれるはずだろ!」
「ごめん、忘れててさっき他の人にあげちゃった。。。」

 

 これを見かねた西野くんは、こんな提案をしました。
「学校でお金のやり取りをすると先生に怒られてしまうから、牛乳瓶のふたをお金の代わりにしよう。うちは紙パックの牛乳だから、ぼくのお兄ちゃんの中学校の牛乳瓶のふたをもってきて、それを使おう。」

 放課後、西野くんとそのお友達が空き地に集まって、詳しく相談することになりました。

「学校では、この牛乳瓶のふたを1枚10円だと思って流通させよう。ここに100枚用意してきたから、とりあえずぼくら10人で10枚ずつ分けよう。そして、ぼくらの絆の証として、みんなでこのベーゴマをもっていよう。」

 西野くんは、牛乳瓶のふた100枚と、隣町の駄菓子屋でたくさん買ったベーゴマをみんなに1つずつ配りました。

 

 翌日から、彼ら10人はデザートを売買するときのお金として、牛乳瓶のふたを使い始めました。スーパーの値段を参考に、メロンは4枚、プリンは2枚、といった具合に。10人で楽しくやりとりしていると、クラスの別のお友達も興味を持ちはじめます。

「その牛乳瓶のふたをぼくにもちょうだい。」
「1枚10円で売ってあげるよ。」
「ぼくにも売ってほしい!」


 そうこうしていると、最初は10人で始めていたけれど、使っている人は20人にまで増えました。クラスの女子も興味を持ちはじめます。

「わたしにも売ってほしい!」
「ほしい人が最近増えすぎていて、1枚10円じゃあ売りたくない。20円ならいいよ。」
「20円で売ってほしい!」

 さいしょは1枚10円として始めたのに、20円になってしまいました。


 しかし、西野くんはこれを良く思いませんでした。

「あくまでお金の代わりに使う目的で始めたのに、値段が変わってしまうのはおかしい。もっと牛乳瓶の枚数を増やそう。」

 西野くんはお兄ちゃんに頼んで、翌週学校に追加で牛乳瓶を100枚持ってきました。

「ほしい人が増えすぎたから、枚数を増やすことにしたよ。この牛乳瓶のふたはベーゴマを持っている人に配るよ。」

 ベーゴマを持っている10人は、ひとりあたり10枚ずつ牛乳瓶のふたをもらいました。枚数が増えたので、ふたたびみんな1枚10円で取引をするようになりました。多くの人が使うようになりはじめると、隣のクラスの人たちも興味を持ちはじめ、再びベーゴマを持っている人に牛乳瓶のふたが配られました。

 

 西野くんのお友達はあることに気づきました。

「ベーゴマを持っていて、牛乳瓶のふたを欲しがる人が増えると、牛乳瓶のふたがもらえる。このベーゴマを売ることもできるんじゃないかな。」

 ベーゴマ自体の取引もさかんに行われるようになりはじめました。

「ベーゴマは牛乳瓶のふた50枚と交換してあげるよ。今月はたくさんメロンを食べたいんだ。」

「ぼくは直近のデザートで好きなのが特にないから、将来にデザートをもっといっぱい食べるために、ベーゴマをいま牛乳瓶のふた50枚で買っておこう。」

 西野くんが作った仕組みがどんどん拡大していきます。

 

 しばらくたってからのことでした。学校の給食のしくみが変わり、デザートが毎日プリンしかなくなってしまったのです。

「ぼくはメロンをたくさん食べるために牛乳瓶のふたを集めていたが、これならもういらない。誰か買い取ってくれないかい。」
「わたしはプリンでもまあいいから、1枚5円なら買い取ってもいいよ。」

 みんなが取引する価格が5円まで落ちてしまいました。

 

 これはまずいと思った西野くんは新しいアイデアを考えました。

「牛乳瓶のふたを燃やして捨ててくれた人には、ベーゴマを新しくあげるよ。いつかメロンが復活した際には、また牛乳瓶のふたを欲しがる人が増えるだろうから、その時にはベーゴマを持っている人に牛乳瓶のふたをあげるよ。」

 牛乳瓶のふたを20枚捨てた人たちにベーゴマが1つ配られました。牛乳瓶のふたの流通量が減ったので、ふたたび1枚10円で流通するようになりました。このあとも、ふたたび牛乳瓶のふたが増えたり減ったり、ベーゴマを持っている人も牛乳瓶のふたがもらえたりしながら、西野くんの仕組みがうまく回っていきました。

 

 ある日のことです。PTAの方針により、デザートは今後毎日ピーマンしかなくなってしまいました。

「ピーマンしかないなら、牛乳瓶のふたはいらない。安くてもいいから買ってくれる人いないかな。」

「ピーマンしかないならだれも欲しがらないよ。ぼくもいらない。」

「さすがにいつかピーマンだけの日は終わるだろうから、1枚2円だったら買ってもいいよ。」

 西野くんはこれまでと同じように、牛乳瓶のふたを燃やす代わりにベーゴマをあらたに配ることで、流通枚数を調整しようとしました。牛乳瓶のふた5枚を燃やすことでベーゴマが1つ配られ、なんとか1枚10円で取引をしてくれるようにもどりました。このとき、牛乳瓶のふたの流通枚数は、最初の100枚まで戻っていました。ベーゴマは気が付けば100個流通しています。

 

 次のPTAでは、さすがにピーマンだけの状態が改善されるかと思いましたが、改善どころか、校則でピーマン以外のデザートがなくなることが決定してしまいました。

「牛乳瓶のふたは10円なんだろ?誰か買い取ってくれよ。」
「いやだよ。1円でも買うもんか。10枚1円なら考えてやってもいい。」

 西野くんはこれまでどおり、牛乳瓶のふたを燃やしてもらうことにしましたが、今回は1枚燃やすかわりにベーゴマ10個を配ることになりました。牛乳瓶のふたの流通枚数は5枚まで減り、ベーゴマは数え切れません。これでも牛乳瓶のふたを10円で売買する人が現れないので、西野くんが申し訳なさそうに残りの5枚をほかの人たちから1枚10円で買い取りました。

 

 それから結局、デザートがピーマンだけじゃなくなる日は来ることはなく、牛乳瓶のふたを取引する人はあらわれませんでした。

「わたしは牛乳瓶のふたが必要な量だけ買って使っていたから、終わってしまったのは残念だけど、特に損したわけでもなく、まあ、便利だったね。」

「ぼくはお年玉をつぎこんでベーゴマを買い集めていたけれど、二束三文になってしまった。自業自得というやつだね。」

「ところで、西野くんが持っている最後の牛乳瓶のふたは5枚あるけど、50円持っているということなのかなあ。」

Enigma AMA(Ask Me Anything)日本語まとめ20180403

速報性重視して要点だけ殴り書きでまとめました。

 

TEE環境は市販のPCパーツで組めるよ。

 

データマーケットプレイスは今は我々でかんりしてるけど、いずれ分散化されてプロトコルレイヤーのモデルケースになるよ。

 

シークレットコントラクトはsolidityで書けるよ。publicパートはethereum上で動いてprivateパートEnigmaプロトコル上で動く感じ。既存のdappsからも移植しやすいよ。

 

TEEじゃなくてMPCを使ったほうがいいケースは、秘密鍵みたいに極めて秘匿性が求められるケースかな。

 

TEEだけでもちゃんと非中央集権的に回るよ。

 

Shardingに関してはいまのところこんな想定。

https://eprint.iacr.org/2017/406.pdf

 

TEEMPCを同時に使うdappsも可能にするつもりだよ。

 

とりあえずTEEから始めることにしたのは、シークレットコントラクトの良さを開発者が手っ取り早く体験できることを重視したからだよ。

 

MPCであれば、悪意ある相当の数の人が共謀しない限り、どんなに計算能力があっても生データが漏れることはないよ。TEEであっても、各ノードが保持するデータを選ぶことはできないから、攻撃はかなりむずいよ。

 

マスターノードになるのに必要な最低保有量は現段階で決められるものじゃないって話は100万回以上言ってるよね。

 

AIONとの提携は、Enigmaプロトコルをいろんなチェーン上で使うためのブリッジ機能のためだよ。

 

オリジナルチェーンのプランがあるのは、Ethereum上だけで考えて実装すると、Ethereum環境には最適化されるけど他のチェーンだとそうでもない、という状態になりうるのと、Ethereumの開発タイムラインに縛られることになるからだよ。

 

オリジナルチェーンに移る時にはトークスワップすることになるけど、ちゃんとみんなができるように十分な時間的バッファーは当然用意するつもりだよ。

 

Discoveryのフェーズから、EVMとは互換性あって、ほんの一部シークレットコントラクトの関数を使うとこだけ直すだけで大丈夫だよ。

 

カタリストのほうも、クラウド版のインターフェイス使いやすいやつも作るつもりだよ。

 

実態がない段階で〇〇と提携🚀🚀🚀みたいなことはやらないよ。

 

GDPRについては去年5月ころからEU conglomerateと議論してるよ。

Enigma詳細解説 part3 -Secret Sharingを実際にやってみた

こんにちは。カナゴールドです。

 

最近Enigmaの活動が盛んみたいだけどmoonしねえな?とイライラしている諸君、こういう時はやることないのでのんびりでお勉強しましょう。

 

今日は、enigmaで用いられるSecret Sharingについて解説したいと思います。実際にEnigmaで用いられる際はもっと洗練された手法になりますが、エッセンスを感じてもらうのを目的として書きました。

 

//////

 

ここに3人のビットコイナーがいます。彼らが会って話すことと言ったら、暗号通貨の話か、どうしてモテないかの話しかありません。しかしながら、彼らは異常にプライドが高く、自分の彼女いない歴については頑なに口を割りません。あまりにも生産性が低いので、それを見ていたカナゴールドが次のような提案をしました。

 

「お互いに自分の彼女いない歴を明かさずに、全員の彼女いない歴の平均値を算出するのはどうか。シークレットシェアリングを用いれば、それが可能である。」

 

プライドが高いビットコイナーたちは、シークレットシェアリングについて知りませんでしたが、もちろん、知ったかぶりをして合意しました。

 

「各自、関数f(x)=s+px+qx^2を用意してほしい。ここで、sは自分自身の彼女いない歴pqはランダムに選んだ数字とする。」

 

数字が好きなビットコイナーたちは、各々自分の好きな数字と自分の彼女いない歴を使って、関数を作りました。

 

ビットコイナー1f1(x)=24+3x+6x^2

ビットコイナー2f2(x)=30+4x+7x^2

ビットコイナー3f3(x)=18+5x+8x^2

 

カナゴールド含め、彼らは他の人の彼女いない歴を知りませんが、上の式を見ている読者としては、ビットコイナー1~3彼女いない歴がそれぞれ、243018年となっていることがわかりますね。

 

「みんな準備できただろうか。それでは、他のビットコイナーにこっそり、xにそのビットコイナーの番号を代入した結果を教えてあげてほしい。例えば、ビットコイナー2はビットコイナー3に、f2(3)の値を教えてあげてほしい。その数字は他の人には教えてはならないよ。」

 

ビットコイナー1は、f1(1)=33f2(1)=41f3(1)=31の値を(f1(x)は自分で作ったから全て知っているが)、ビットコイナー2は、f1(2)=54f2(2)=66f3(2)=60の値を(f2(x)は自分で作ったから全て知っているが)、ビットコイナー3は、f1(3)=87f2(3)=105f3(3)=105の値を(f3(x)は自分で作ったから全て知っているが)を知ることとなりました。

 

「それでは、いま計算した値の合計値だけを全員に公表してほしい。」

 

ビットコイナー1105、ビットコイナー2180、ビットコイナー3297と公表しました。

 

カナゴールドは言いました。

 

「君たちの彼女いない歴の平均値は24歳である。しかし、それぞれの彼女いない歴はわからない。」

 

 

//////

 

 

賢明な読書であれば、105180297という数字だけで、全員の平均彼女いない歴を計算することができて、それぞれの彼女いない歴は判明しないことを理解できるであろう。

 

3人の関数の形をそれぞれ、

 

f1(x)=s1+p1x+p2x^2

f2(x)=s2+q1x+q2x^2

f3(x)=s3+r1+r2x^2

 

とすると、

 

f1(1)+f2(1)+f3(1)=(s1+s2+s3)+(p1+q1+r1)+(p2+q2+r2)=105

f1(2)+f2(2)+f3(2)=(s1+s2+s3)+2(p1+q1+r1)+4(p2+q2+r2)=180

f1(3)+f2(3)+f3(3)=(s1+s2+s3)+3(p1+q1+r1)+9(p2+q2+r2)=297

 

と書くことができる。

 

いずれの式にも、(s1+s2+s3)、(p1+q1+r1)、(p2+q2+r2)が出てきていることから、S=(s1+s2+s3)、P=(p1+q1+r1)、Q=(p2+q2+r2)と置けば、

 

S+P+Q=105

S+2P+4Q=180

S+3P+9Q=297

 

となるので、この三元一次連立方程式を解けば、

(S,P,Q)=(72,12,21)が得られる。

 

よって、平均彼女いない歴を求めるには、S/3=24で良いことがわかる。

 

この時、仮にこのゲームの参加者であれば、例えばビットコイナー1は追加でs1p1q1の値と、f2(1)とf3(1)も知っていることになるが、未知数が9個から6個に減るものの、式は5本しかないので、他の人の値は求めることができないことがわかる。

 

//////

 

ビットコイナーのうち一人は、ふと、面白い事実に気づきました。全員の年齢の平均値が24歳であることを元々知っていることと、恒等的に彼女いない歴は年齢以下であることから、全員の彼女いない歴は判明してしまうのではないか、と。

 

しかしこれはプロトコル外のお話であり、カナゴールドは関知するところではないので、ビットコイナーたちの歓談をよそに、そそくさと立ち去りましたとさ。

 

おしまい。

Enigma詳細解説 part2 - Somewhat Homomorphic Encryptionを手計算でやってみた

みなさんこんにちは。カナゴールドです。今日は、Enigmaの雰囲気は分かったけど、具体的にどんな理論を使ってるのかちゃんと理解したいんや!という勉強熱心な人向けの記事で、最低限中学校までの数学の知識が必要になります。

 

そんなわけで、Somewhat Homomorphic Encryptionの雰囲気を理解するために、手計算でやってみちゃおうぜ?という企画です。

 

まず、前提知識の共有として、あらゆる計算はANDXORがあれば表現できます。知らない人は適宜ググってください。

 

二つの1ビットの数字(01をとる)m1m2があった時、

AND

(m1, m2)=(0, 0)→0

(m1, m2)=(0, 1)→0

(m1, m2)=(1, 0)→0

(m1, m2)=(1, 1)→1

 

XOR

(m1, m2)=(0, 0)→0

(m1, m2)=(0, 1)→1

(m1, m2)=(1, 0)→1

(m1, m2)=(1, 1)→0

 

と書け、ANDは掛け算で、ORは足し算に相当します。

 

やりたいことは、m1m2を暗号化したものをc1c2とした時に、それらを掛け算、足し算した結果を復号した時に得られる数字が、上の対応表と一致することになります。

 

というわけで、SHEを使って暗号化してみましょう。

 

c1= q1*p + 2*r1 + m1

c2= q2*p + 2*r2 + m2

 

ここで、q1q2はランダムな大きい数字で、r1r2はランダムな小さな数字で、これらは一回限りのものです。pがいわゆる秘密鍵で、ランダムな大きな数字になります。

 

これを復号するステップは、まず最初にpで割った余りを求めて、次に2で割った余りを求めることになります。

 

とりあえずc1pで割った余りを求めると、式を見ての通り、2*r1+m1になりますね。しかし聡明な読者は、2*r1+m1pで割れる可能性があるのでは?と思うかもしれませんが、最初の設定では、r1は小さな数字としており、m1に至っては01なので、pを十分大きな値としている限りは絶対割り切れませんね。そして次に2で割った余りを求めると、見ての通りm1になります。

 

やったー!復号できたー!ということになります。q1r1の値について知らなくてもpだけで復号できましたね。

 

ここまでで自明ですが、一応c1+c2を計算すると、

 

c1+c2=p*(q1+q2)+2*(r1+r2)+(m1+m2)

 

なので、pよりも2*(r1+r2)+(m1+m2)が小さい限りは、復号した結果は、m1+m2になりますね。正確には、m1m2がどちらも1の時は、和が2になって最後の2で割るプロセスで割り切れるので、結果としては0が帰ってきます。よって、XOR対応表と同じ結果になりますね。

 

さて、今度は掛け算をやってみましょう。

 

c1*c2=(q1*p + 2*r1 + m1)*(q2*p + 2*r2+ m2)

          =p*q1*(q2*p + 2*r2+ m2) +2*r1*(q2*p + 2*r2+ m2)+m1*(q2*p + 2*r2+ m2)

          =p*[q1*(q2*p + 2*r2+ m2)+2*r1*q2+q2*m1]+2*[2*r1*r2+r1*m2+r2*m1]+m1*m2

 

となるので、2*r1*r2+r1*m2+r2*m1pよりも小さければ、復号した結果はm1*m2になり、上のAND対応表と一致することがわかりますね。

 

ここで、復号できるためには、p>2*(2*r1*r2+r1*m2+r2*m1)でなければならないことがわかりましたが、右辺を見ると、r1*r2が出てきてることがわかります。r1r2は小さい数字としましたが、さすがに掛け算を何度もやっていくと、結構なスピードで大きくなっていくことがわかります。これが、「SHEでは掛け算の回数が限られる」ことの理由になります。

 

ここまででお分かりになりましたでしょうか?記号ばかりでよくイメージがわかないという人も多いかと思うので、実際に数字を代入しながら見てみましょう。

 

秘密の情報をm1=1m2=1としますか。秘密鍵は大きいランダムな数字にする必要があるので、p=99でいいや。99って結構大きいよね?q1q2も大きな数字ということで、q1=20q2=21にしましょう。r1r2は小さい数字だから、r1=2r2=3でいいや。

 

それではまず足し算から。

c1=20*99+2*2+1=1985

c2=21*99+2*3+1=2086

になりました。もともと1だったのに、結構大きな数字になりましたね。しかもどっちも違う数字に。では足してみましょう。

c1+c2=1985+2086=4071

です。復号するために秘密鍵99で割ります。

4071÷99=41 あまり 12

です。このあまりを2で割ると、

12÷2=6 あまり 0

なので、復号した結果は0になりました。

やった!求めていた数字になってる!

 

というわけで、確かに、秘密鍵で復号できましたね!

 

では次に、同じ設定で掛け算行ってみましょう。

c1*c2=1985*2086=4140710

です。結構大きいですね。復号するので99で割って、

4140710÷99=41825 あまり 35

です。あまり352で割ると、1余るので、確かにAND対応表と同じになった!すげー!!!

 

というわけで、調子に乗ってもう一回c1を掛けてみちゃいましょう。

c1*c2*c1=4140710*1985=8219309350

になります。かなり大きくなりました。復号すると、

8219309350÷99=83023326 あまり76

なので、あまり762で割ると、あまりは0です、、、??!!

 

おかしい。1に対してAND演算をいくらやっても1のはずなのに、0になりました。何が起こった??!!

 

というわけで数式展開してみましょう。

 

c1*c2*c1=p*[q1*(q2*p + 2*r2+ m2)+2*r1*q2+q2*m1]+2*[2*r1*r2+r1*m2+r2*m1]+m1*m2*( q1*p + 2*r1 + m1)

=p*[(長いので略)]+2*[4*r1*r2+2*r1*m2+2*r2*m1+m1*m2*r1+2*r1*r2*m1+r1*m2*m1+r2*m1*m1]+m1*m2*m1

 

となるので、2で括ったところを計算してみると、

4*r1*r2+2*r1*m2+2*r2*m1+m1*m2*r1+2*r1*r2*m1+r1*m2*m1+r2*m1*m1=4*2*3+2*2+2*3+2+2*2*3+2+3=24+4+6+2+12+2+3=53

なので、

c1*c2*c1=p*[(長いので略)]+2*53+m1*m2*m1

となります。おや?これをp=99で割ってみると、、、

 

c1*c2*c1=99*[(長いので略)]+106+m1*m2*m1

=99*[(長いので略)+1]+7+m1*m2*m1

なので、あまりは7+m1*m2*m1となります。

これを2で割ると、m1*m2*m1=1なので、あまりは0!!!

 

というわけで、r1r2pより小さくても、掛け算を繰り返していくとダメになってしまうことがわかりましたね!そして、掛け算可能な回数を増やそうとしたら、pを大きな数にしてあげることが必要になるのは一目瞭然ですね。

 

はい。これはSHEでは掛け算の回数が制限され、掛け算可能な回数と計算負荷がトレードオフな関係にあることがわかりました。

 

今日から君もSHEマスターだ!!!

Enigmaに投資するということ

https://www.slideshare.net/herumi/ss-59758244

 

暗号理論の世界において長年未解決問題とされていたのは、暗号化されたデータのまま足し算と掛け算をすることであった。足し算と掛け算ができれば理屈上どんな計算もできるようになるので(5-3=5+(-3)だし、10÷2=10×(1/2)だし)、何かしらの分析のために、安全のため暗号化して保存していたはずのデータを復号する過程で、情報が外部に漏れるリスクがなくなることになる。

 

この問題は数十年前から研究されてきたテーマであり、足し算だけならできる手法や、掛け算だけならできる手法であれば、2000年以前に見つかっていたが、どちらもできる手法は見つかっていなかった。

 

https://crypto.stanford.edu/craig/craig-thesis.pdf

 

2009年9月、ビットコインの誕生とほぼ時を同じくして、完全準同型暗号(FHE: Fully Homomorphic Encryption)という、足し算と掛け算のどちらも可能な手法がCraig Gentryにより発表された。これは暗号理論として革新的な発表であり、この論文を契機として暗号理論がさらなる飛躍を遂げることになるわけだが、この論文における手法自体は極めて理論上のもので、1ビットのデータを暗号化すると1ギガバイトになるなど、実運用上そのままでは使用に耐えないものと考えられた。

 

https://link.springer.com/content/pdf/10.1007/978-3-642-32009-5_38.pdf

 

2012年、制限付き準同型暗号(SHE: Somewhat Homomorphic Encryption)という手法が考案された。これは、足し算については特に問題なく何度でも可能だが、掛け算については実行可能な回数が制限される一方で、データ量も計算時間も劇的に早くなり、実運用で耐えることができる、というものであった。

 

以降、これらの飛躍的な暗号理論の進化を踏まえて、様々な実用化に向けた研究やプロジェクトが始動することになる。

 

・世界初!暗号化したまま統計計算や生体認証などを可能にする準同型暗号の高速化技術を開発

http://pr.fujitsu.com/jp/news/2013/08/28.html

 

 

NEC、暗号化データ保護に有効な「秘密計算」の高速化手法を開発

https://japan.zdnet.com/article/35093838/

 

・数値・順序・離散データを暗号化したまま統計解析する実用的秘密計算手法を開発

 

https://www.jst.go.jp/pr/announce/20170301/index.html

 

そして、これらの最先端の暗号化計算技術を、誰もが参加できる開かれたネットワーク(すなわちブロックチェーン)上で実現しようとしたものが、Enigmaプロジェクトなのである。

 

https://www.enigma.co/

 

暗号理論の発展の流れから見れば、その最先端の暗号化計算技術を誰もが使える世界にするものと捉えることもできるし、ブロックチェーンの側から見れば、ブロックチェーンに決定的に欠けているプライバシーの問題を解決するものと捉えることもできる。

 

ここで念のため注記しておくこととしては、MoneroやZcashやDashがやっていることとはまるっきり違う、ということである。それらはそれはそれでイカした技術で匿名送金を実現しているが、イメージとしては、イーサリアムのスマートコントラクトを暗号化した状態で行うものと言える。スマートコントラクトを使って何かしらのデータに対して計算をさせようとすると、ブロックチェーンの性質上、元データもあらゆる計算結果も誰でも見れる状態になる。enigmaがプライベートコントラクトのプラットフォームと言われる所以はそこで、暗号化されたデータを保存・売買できるDataMarketplaceと、その暗号化されたデータをそのまま計算にかけられるプロトコルが、enigmaの正体である。

 

2015年にEnigmaのwhite paperが公表され、昨年9月にICOが行なわれたわけだが、現時点ではEnigma プロトコル上で動くCatalyst(仮想通貨ヘッジファンドを簡単に作れるアプリ)と、DataMarketplace(データ売買プラットフォーム。現在はイーサリアムのtestnet上で使える。)がローンチされており、今年の第三四半期にプライベートコントラクト機能も含めてメインネットでローンチされる予定である。

 

ポイントとなるのは、初回のローンチの段階で実装されるプライベートコントラクト機能が全てというわけではない点である。暗号理論の発展に伴って、より計算効率のよいものに徐々にアップデートされていくことになる。プライベートコントラクトを効率的に実行するにはコーディングの仕方が重要になるため、個人的な見解としては、頻繁に使われる計算ロジック(例えば線型回帰分析など。これについてはFHEでも高速で計算できるロジックが見つかっているようである。)については効率的なコードがパッケージ化されて、誰もが簡単に実行できるようになると考える。

 

これらの暗号化技術をだれもが享受できる未来というのは、私からすればとてもわくわくする未来だが、実際に世間に浸透していくかはわからない。かつて公衆電話がある中で携帯電話が普及する未来をみんなが予想できたわけではなかったのと同じようなものかもしれないし、セカンドライフのような結末を迎えるかもしれない。

 

Enigmaに投資するということはそういうことだと私は考える。

Enigma詳細解説 part1 - Data Marketplace

数日前にEnigmaが何かリリースしたみたいだけど、何が何だかわからない、という人向けに、Data MarketplaceのOverviewを全翻訳しました。(※)は私の解説コメントであり、主観が入っている箇所になります。

 

ソースはこちら:

https://enigmampc.github.io/marketplace/index.html

 

Overview

 

Enigma Data Marketplaceは、Enigmaネットワークのプロトコル層とアプリケーション層の間に配置されるプラットフォーム層である。これは、分散型で安全なデータインフラストラクチャを提供し、その上にCatalystなどのアプリケーションを構築できる(※よくある誤解ポイント。Enigma Catalystという名前で仮想通貨アルゴトレーディングのアプリがすでに存在している(これはこれで神アプリ)が、これはEnigmaプロトコルを利用した応用例にすぎない。イーサリアムってイーサごっち専用通貨なんでしょ?という誤解と同レベル)。

 

データマーケットプレイスは現在、開発のフェーズ1に入っている。現在の実装には、データセット名前空間サブスクリプションに関するコンテキスト情報を扱うオンチェーン部分が含まれている。オンチェーンロジックは、Ethereumネットワーク上に展開されたスマートコントラクトでコード化され、エニグマトークン(ENG)で直接操作される。この最初の実装では、すべてのデータセットがいくつかのプロバイダによってオフチェーンで提供され、ストレージはスマートコントラクトに組み込まれたロジックとは独立して管理される。

 

データマーケットプレイスの最初の実装としては、アプリケーションレイヤ上のCatalystと統合した形で設計されている。データセットは、運用パフォーマンス向上につながる新たな取引シグナルを持つトレーディングアルゴリズムのためのプレミアムデータとして使用される。(※仮想通貨アルゴトレーディング目的に特化したデータ売買市場としてひとまずフェーズ1はローンチ。みんなが気づいていない売買シグナルを見つけるために使えそうな元データを売買するイメージ。)

 

フェーズ2には、既知のノードのフェデレーションネットワーク(サイドチェーンっぽい感じ)上で動作するオフチェーンネットワークの最初の実装が含まれている。これは、外部からの攻撃による脅威が制限されたモデルの下で動作するEnigmaプロトコルMVP(Model View Presenter)と考えることもできる。(※この段階ではまだ分散化されたノードでEnigmaプロトコルを走らせるのはまだ無理で、いくつかのたぶんEnigmaの中の人が立てたノード上で、一通りの仕組みを走らせられるようになる、という理解。)

 

フェーズ3は、ここからが本当に面白くなるところである。誰もがノードになり、ENGトークンを対価としてストレージと計算リソースを提供できる公開オフ・チェーン・ネットワークを開始する。(※本格始動開始。みんなEnigmaデータマーケットプレイスを、ちゃんと自律分散した世界で実行できるようになる。)

 

最後にフェーズ4では、ネットワーク内のデータを保護するために重要なプライバシー機能を導入する。これにより、私たちのデータプロトコルユーザビリティを、個人識別情報(PII)を筆頭として、あらゆる種類のデータストリームに拡張することができる。(※Enigmaが最終兵器を手にして神となる。暗号化されたデータのままプログラムを走らせることができるようになり、世界が変わる。ロードマップでは、このフェーズ4が78月くらいに完成して、それをベースとした新しいアプリが年内に完成する予定。)

Enigma ホワイトペーパーの日本語訳及び解説 part4

part1からpart4で全訳になります。日本語解説ブログをお書きになる方はご自由に利用しちゃってください。

 

5.2 Hierarchical secure MPC

 

情報理論によると、セキュアなMPCプロトコルには、各計算ノードが(O(n^2)の複雑さで)他のすべてのノードとつながっており、a constant number of rounds(一定数のラウンド)ともつながっていることが要求される。

LSSSの場合、この計算の複雑さはすべての乗算演算に当てはまるが、加算演算は相互通信なしで並列に計算できる。前述したように、安全な加算と乗算のプロトコルは、コードを安全に評価する汎用インタプリタを構築するのに十分である。

 

Cohenらは、図3に示すように、一定サイズのMPCゲートの対数式を使用してnパーティのセキュアなプロトコルをシミュレートする方法を最近提案した。

我々は彼らの結果をLSSSに拡張することで、乗算の対話の複雑さを二次のオーダーから一次のオーダーに削減することができ、その際に増大した計算の複雑さは並列処理によって対応することができた。

4は、シンプルなMPCが当事者の数によってどのように制限されるかを示しているが、我々の実装では任意の大規模なネットワークにまで拡大することができるのである。

 

5.3 Network reduction

 

ネットワークの計算能力を最大にするために、ネットワーク削減技術として、ネットワーク全体からランダムに選ばれたサブセットが計算を実行することになる。

ランダムにノードを選ぶ際には、ロードバランシング要件と、公開検証アクションによって積み重なった評判が高いものが優先的に選択される。 これにより、いかなる時点においても、ネットワークがフル活用される。

 

5.4 Adaptable circuits

 

私たちのシステムで評価されたコードは、不正直な多数が結集しない限り(t≥n/2)、情報を漏らさないことが保証されている。これは、入力値の場合だけでなく、コードが評価されている間に計算された中間変数にも当てはまる。

注意深い読者は、関数が入力から出力まで評価されるとき、中間結果は概して記述が少なくなり、より集約的になることに気付くだろう。

シンプルな関数や入力が殆どない関数の場合はその限りではないが、そもそもこれらの関数は計算が高速であるため、追加の手順は必要ない。

しかし、多くの行のコードと多数の入力を伴う計算コストの高い関数では、関数評価プロセス全体で固定nを使用する代わりに、計算ノード数を動的に減らすことができる。

具体的には、入力から出力までの結果を伝播するフィードフォワードネットワーク(図5)を設計する。元のコードが再編成され、まず入力に加算ゲートを処理し、次に乗算ゲートを処理する。中間結果はN/c個のノードと秘密共有され、プロセスは再帰的に繰り返される。

 

5.5 Scripting

 

前述のように、エンドツーエンドの分散アプリケーションは、プライベートコントラクトを使用して開発されており、さらにオンチェーンとオフチェーンの実行に分割されている。 オフチェーンコードは結果を秘密にしたまま返し、ブロックチェーンに正確性の証明を送信する。 簡単にするために、スクリプト言語は、よく知られているプログラミング言語と構文が似ている。 スクリプト言語には、主に2つ追加された点があるが、それらは詳しく説明する必要がある。

 

5.6 Private data types

 

開発者はprivateキーワードを使用してプライベートオブジェクトを指定する必要がある。 これにより、これらのオブジェクトを含む計算がセキュアかつプライベートになることが自動的に保証される。 プライベートオブジェクトを扱う場合、データ自体はローカルで手に入るのではなく、それらの参照が与えられるのである。

 

5.7 Data access

 

このシステムには3つの異なる分散データベースがあり、それぞれがグローバルシングルトンディクショナリからアクセスできる。 具体的には -

 

公開元帳

  ブロックチェーンの公開元帳は、Lによってアクセスおよび操作することができる。

たとえば、L [k]←1は、すべてのノードの鍵kを更新する。 元帳は完全に公開されていて追記のみ可能であるため、履歴全体が保存されており、読み込み専用でL.getkt)を使用してアクセス可能である。

 

DHT

オフチェーンデータはDHTに保存され、公開元帳と同じ方法でアクセスできる。 デフォルトでは、データは送信前にローカルで暗号化され、署名した人のみがデータを復元できる。 そうでなければ、DHT.setkvp)(ここでkは鍵、vは値、pは条件、すなわち - pX→{0,1} pが満たされている場合のみ、kを通してvにアクセス可能である。

公開鍵のリストへのアクセスを制限するなど、いくつかの組み込み述語言語を提供している。 暗号化をしない場合、既定の述語は∀x px= 1であるため、データは公開されているが、オフチェーンで分散されることになる。

 

MPC

構文的には、MPCを使用することはDHTと同等だが、背景にあるプロセスは異なる。

具体的には、MPC.setkvp)シークレットシェアvを実行する。シェアはローカルビューにシェアを格納する潜在的コンピューティングパーティに配布される。 現在、pを使用すると、vを表示せずにvref←MPC [k]を使用して誰が計算用データを参照できるかを指定することができる。

デフォルトでは、元のディーラーのみがv←MPC.declassifyk )によって、共有プロセスと同様に、さまざまな関係者からシェアを収集し、秘密値をローカルに再構築する。 さらに、同じ共有アイデンティティに属する他のエンティティは、計算のためにデータを参照することができる。 共有アイデンティティの詳細については、6.1節を参照。

 

わかりやすくするために、LDHTMPCディクショナリのすべてのキーを単一の名前空間を使用するものとして扱ったが、実際にはより細かい粒度を使用できるため、データベース、テーブル、及び細かい階層に分けることができる。

 

6 Blockchain interoperability

 

このセクションでは、Enigmaブロックチェーンとどのように相互運用されるかを説明する。 具体的には、ブロックチェーンと自動的に互換性のあるデジタル署名を使用して複雑なアイデンティティがどのように形成されるかについて詳しく説明する。 次に、エニグマのオフチェーンストレージと計算をブロックチェーンにリンクするコアプロトコルについて詳しく説明する。

 

6.2.1 Access control

プロトコル1は、共有アイデンティティを作成するプロセスを示し、プロトコル2は、述語を満たすための公的に検証可能なコントラクトを実装する。

 

6.2.2 Store and Load

 

DHTを介した直接アクセスのためのデータの格納とロードは、プロトコル3に示されている。データを格納するために、書き込み権限が与えられたqstore述語で検査される。 格納者は、誰がデータを読むことができるかを検証するためのカスタム述語を提供することができる。 これは、スクリプト言語DHTシングルトンオブジェクトを使用して抽象化される基本プロセスである。

(数式略)

 

6.2.3 Share and Compute

 

プロトコル4で示されているように、シェアと計算は、処理を可能にするので、ストアとロードプロトコルMPCに相当する。 内部的には、DHTからのシェアを保存およびロードし、データを安全に保ちながらデータへの参照を処理できるようにする。

(数式略)

 

7 Incentives

 

エニグマは暗号通貨でもブロックチェーンでもないため、インセンティブスキームはマイニング報酬ではなく、計算資源の提供への対価としてのフィーに基づいている。 フルノードになるためにはトークンの預託をする必要があり、それによって悪意のある行為は罰せられるスキームになっている。

 

7.1 Security Deposits

 

MPCプロトコルに対する潜在的な攻撃は、プロトコルにおいて公平性が保証されていないことを利用するものである。特定の条件下では、悪意のある当事者は、他の当事者もアウトプットを知る前に、アウトプットを知った上でプロトコルを中止することができる。この攻撃は、過半数によって行われた場合には防止することはできないが、ペナルティを課すことはできるのである。

MPCで悪意のあるノードを処罰するために、Bitcoinセキュリティーデポジットを使用する方法について、最近何人かの学者によってリサーチされている。

同様のモデルを使用し、SPDZプロトコル5.1.2節参照)によって検証された正確性を破るなど、他の悪意ある動作にもペナルティを課すなどへと拡張した。

ネットワークに参加し、データを格納し、計算を実行し、フィーを受け取るには、いかなるノードも最初にシークレットコントラクトに保証金を提出しなければならない。

各計算が完了した後、シークレットコントラクトは正当性を検証し、公平性が維持される。

あるノードがその結果について嘘をついたり、または途中で計算を中止すると、デポジットが失われ、他の正直なノード間で分配される。

計算は、悪意のあるノードなしで(例えば、そのノードのデータシェアを0に設定することによって)続行される。

 

7.2 Computation Fees

 

ストレージ、データ検索、または計算のためのネットワーク内のすべてのリクエストは、EthereumGasのコンセプトと同様に固定価格である。 すべての計算がすべてのノードによって実行されるEthereumとは異なり、エニグマでは異なるノードが各計算の異なる部分を実行し、ラウンドごとに測定された貢献度に従って報酬を与える必要がある。

各関数は、加算および乗算ゲートの回路に還元され、それぞれが1つ以上のラウンドとなることに留意する。

計算に参加しているノードには、提供したラウンド数と実行した演算(加算、乗算)の加重和に従って支払われる。 プラットフォームがチューリング完全であるため、要求の正確なコストを事前に計算することはできない。 したがって、計算が完了した時点で、各ノードが保有する口座残高から各リクエストのコストが差し引かれる。 口座残高が最小限の基準を超えない限り、リクエストは処理されないことになる。

 

7.3 Storage Fees

 

データストレージの料金は市場ベースであり、時間制限がある。 ホスティング契約は、所有者のアカウント残高を使用して自動的に更新される。 残高が低すぎる場合、データへのアクセスが制限され、追加の資金が入金されない限り、一定期間内にデータが削除される。

 

 

8 Applications

8.1 Data Marketplace

 

直接消費者からデータのビジネス市場。 保証されたプライバシー、自律的な管理、強化されたセキュリティのもと、消費者はデータへのアクセス権を販売できる。 例えば、臨床試験のための患者を探している製薬会社は、候補者のゲノムデータベースをスキャンすることができる。 市場は、莫大な量のコンフリクトを排除し、顧客獲得のためのコストを削減し、消費者に新しい収入源を提供することとなる。

 

8.2 Secure Backend

 

今日、多くの企業が大量の顧客データを保管している。 これらのデータを使用して、パーソナライズされたサービスを提供したり、個人の好みに合わせたり、ターゲットを絞った広告を打つことができる。

エニグマでは、企業は今日と同じ目的でデータを使用することができるが、企業はサーバーでデータを保存または処理することがなくなるため、セキュリティリスクなく顧客のプライバシーを保護することができるようになる。

 

8.3 Internal Compartmentalization

 

大規模な組織では、エニグマを使用することで、産業スパイや不正な従業員からデータや営業秘密を保護することができる。 従業員は組織の利益のためにデータを使用し分析することはできますが、データを盗むことはできない。 より多くの人々がより多くのデータにアクセスできるようになり、セキュリティ上のコストが低くなるため、組織内の生産性が向上する。

 

8.4 N-Factor Authentication

 

Enigmaで保存された音声、顔、指紋の認識などは、そのユーザーのみがこれらのデータにアクセスできる。 追加の鍵が必要な場合のポリシーは、シークレットコントラクトの中で設定することができ、潜在的な攻撃者には公開されない。

 

8.5 Identity

 

完全に匿名かつ正しいことが検証可能な方法で、アイデンティティを認証して安全に保存することは、エニグマにとっては簡単で、数行のコードで書けるのである。 このプロセスはシンプルで、ユーザーは認証に必要な個人情報を秘匿したままシェアをする。 ユーザがログインすると、認証用のプライベートコントラクトが実行され、ユーザを検証し、その人を公的な擬似アイデンティティと結びつける。このプロセスは完全にトラストレスで、プライバシーが保護されている。

 

8.6 IoT

 

分散化されたトラストレスなクラウドで、IoTバイスによって収集された(とてもセンシティブな)データを格納、管理、使用することができる。

 

8.7 Distributed Personal Data Stores

 

管理権限と所有権を維持しながら第三者との間でデータを保存し、共有する。 プライベートコントラクトで各サービスの特定のポリシーを設定する。 データ共有の決定は常に取り消すことができるため、アイデンティティは真に保護されている。サービスは生データへのアクセス権がなく、セキュアな計算を実行するだけなのである。

 

8.8 Crypto Bank

 

プライベートな内部の詳細を公開せずにフルサービスの暗号化銀行を実行できる。 ユーザーは、財務状況を公然と明らかにすることなく、ブロックチェーンの自律的な管理によってローンを受け取り、暗号化された資金を預け入れたり、投資商品を購入することができる。

 

 

8.9 Blind E-Voting

 

政治的選挙から企業理事会会議に至るまで、最終成果の他に何も公開することなく、どんな投票も行うことができる。 それぞれの有権者のプライバシーは維持されているだけでなく、投票数までも非公開にできる。 例えば、選挙で何らかの過半数の投票が必要だがその分布についての詳細がない場合、全会一致の決定なのか、たった一人の投票で決定されたものなのか、区別がつかなくさせることができる。

 

8.10 Bitcoin Wallet

 

1.分散型秘密鍵の生成 - 複数のエニグマノードがキーのセグメントをローカルに作成するが、完全なキーはそのユーザーによってのみ組み立てられる。 エビデンスの証跡はどこにも残らない。

 

 2.分散トランザクション署名 - 秘密鍵を公開したり、証跡を残すことなく署名されたトランザクション

 

3.分散型コントロール - プライベートスクリプトを使用して、支出制限、マルチシグネチャCHECKLOCKTIMEVERIFYコントロールなどを設定する。 潜在的な攻撃者には、ロック時間、制限または必要な署名の数は完全に見えない。