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

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

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コントロールなどを設定する。 潜在的な攻撃者には、ロック時間、制限または必要な署名の数は完全に見えない。

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

解説の続きです。翻訳してると理解が深まります。

 

5.1.2 Correctness (malicious adversaries)

 

ここまで、我々はプライバシーの性質について議論した。

活性(仕様通りに動くこと)は正直な人がマジョリティを占めていることを条件に成り立つが、中間値や出力値の再構成がうまくいくためにはそれが最重要である。

しかし、現在のフレームワークでは、出力の正確さについては保証されていない。ネットワーク内の誰かが、演算処理中に無効な結果を送信して出力を無効なものにする可能性がある。 BGWは検証可能なMPC情報理論上の解決策を提示したが、実際的な複雑さは、単純な実装ではn^8のオーダーくらい悪くなる。

したがって、我々の目標は、悪意ある者に対して安全であるが、n^2のオーダーと同じ複雑さを持つ「半正直」MPCフレームワークを設計することになる。後に、これをさらに最適化する。

 

つい最近、Baumらが、 すべてのコンピューティングノードがひそかに悪意を持つ者であったり、または単一のノードを除いて他すべてが能動的に悪意を持っている場合でも、正当性を保証する、公に監査可能なセキュアなMPCシステムを開発した。 彼らの最先端の結果は、SPDZの一形態(speedzと発音)に基づいており、各計算のトレイルを保存している追記専用の掲示板に依拠している。

 

これにより、公開元帳の証明証のトレイルと比較することによって、監査当事者が出力をチェックすることができる。 我々のシステムでは掲示板としてブロックチェーンが使用されているため、全体的なセキュリティの問題は、そのホスティングブロックチェーンのセキュリティの問題に帰着される。

 

SPDZ

悪意のある敵対者(不正直なマジョリティ)に対して安全なプロトコルで、MPCの正当性を保証するもの。 本質的にそのプロトコルは、ランダム性を共有するために「ちょっとだけ準同形暗号」(SHEsomewhat homomorphic encryption)を使用する計算負荷の高いオフライン(前処理)ステップから構成される。

次に、オンライン段階では、計算はパッシブケースに似ており、計算負荷の高い公開鍵暗号は含まれていない。 オンライン段階では、すべての部品は、次のように加算な部品とそのMACで表される。

 

<s>pi = ([s]pi , [γ(s)]pi ), s.t. γ(s) = αs,

 

ここで、αは固定された秘密共有MACキーであり、<>iは加算準同型である修正秘密共有方式を表す。 <>-sharingは、グローバルMACキーαを公開せずに動作するため、再利用が可能である。

 

前述のように、乗算は加算より複雑である。 乗算は{<a><b><c>}の三つの組(c=abとして前処理ステップで生成される)を必要とする。 次に、<>-sharingを使用して共有される2つの秘密s1およびs2が与えられると、次のように三つの組を用いることによって、生成物s = s1s2の秘密共有が達成される。

 

<s> = <c> + ε<b> + δ<a> + εδ

ε= <s1> − <a>, δ = <s2>− <b>

 

前述したように、三つの組の生成は、SHEに基づく計算負荷の高い処理である。セキュリティプルーフを含む完全なプロトコル2014年のbaumの論文にある。

 

γ − αs = 0,

 

によって検証される。

 

ここで、一般性を失うことなく、秘密sは任意の安全な計算の再構築された結果である。 直観的にはこれは、計算された結果にMACキーをかけたものと、MACの上から計算したものとの比較にすぎない。

実際の比較を行っていないのは、αを秘密にして再利用できるようにするためである。

 

ここまでで、<>-sharingSSSと同様の性質を持っていることが分かる。つまり、準同型であり、乗算(n^2のオーダーの通信の複雑さ)のための再共有ラウンドが必要だが、 最大n-1人の敵に対して耐性がある。

 

オフラインラウンドは、別々のマシンでの計算に分割することができ、他の計算が実行されている間に並列で計算することができるため、全体的な効率に大きな影響はない。

 

Publicly verifiable SPDZ

公に検証可能なケースでは、MACとコミットメントがブロックチェーンに格納されているため、コンピューティング参加者がすべて悪意を持っていても安全なスキームになる。

2014年の論文の表記に従って《・》-sharingを表現すると、

 

s = (<s>,<r>,<g^s*h^r>),

 

sは秘密、rはランダムな値、c = g^s*h^rPedersen commitmentであり、ghはジェネレータとして機能する。 《・》-sharingは加算準同型性を保持しており、少し修正された多重化プロトコルでは、三つの組(《a》、《b》、《c})をオフラインで生成するという同じ考え方を再利用できる。

 

ここでの主要な知見は、ノードがコミットメント上ではなく、<>-sharing値のまま計算すればよい点である。 これらはブロックチェーンに格納され、出力を持つ任意のパブリックバリデーターによって後で処理される。 1つのノードがコミットメントを壊したとしても、それは監査人には明らかとなる。