SlideShare a Scribd company logo
1 of 47
mazekoze & umatobi 1
「まぜこぜ」と「ブロックチェーン」の結合
「ブロックチェーン」技術の開発をする際,
「まぜこぜ」を使い,
ポーカープロトコルを実現することで,
Dapps の普及に務めたいと考えています。
「トランプ・麻雀・サイコロ・ルーレット」等を
インターネット上で
不正なく実現できるのが,
「まぜこぜ」です。
DHT として,「馬跳び」を採用したいです。
2018/11/15
梅濁酒 (=umedoblock)
umedoblock@gmai.com
2018/11/15 2
「まぜこぜ」ってなぁに?
●
暗号数学上での,ポーカープロトコルのお話。
●
ポーカープロトコルとは,簡単に言うと,
●
暗号技術を用いて,インターネット上でポーカーをしよう。
●
ということ。
2018/11/15 3
離散対数問題
●
今回の話は,有限体上の離散対数問題のお話。
●
今回の話は,
●
楕円曲線上の離散対数問題
●
ではないです。
2018/11/15 4
事前の合意
●
ポーカープロトコル参加者は,事前に以下に合意する。
●
巨大な素数 p
● n 個の原始根 (g1..gn)(↓ を満たす )
● 2 <= g <= p-1
2018/11/15 5
ポーカープロトコル参加者
●
今回のポーカープロトコル参加者は4名。
● Alice, Bob, Carol, Dave
●
の4名が,
●
今回のポーカープロトコルに参加します。
2018/11/15 6
秘密の情報
● Alice は a, Bob は b, Carol は c, Dave は d を,
●
↓ を満たすように,秘密にしてそれぞれ決める。
● gcd(a, p-1) = 1
● gcd(b, p-1) = 1
● gcd(c, p-1) = 1
● gcd(d, p-1) = 1
●
※ ポーカープロトコルをする度に,
●
毎回異なる値 a, b, c, d を選ぶ。
2018/11/15 7
この時,同時に
● a * a^-1 ≡ 1 (mod p-1)
● b * b^-1 ≡ 1 (mod p-1)
● c * c^-1 ≡ 1 (mod p-1)
● d * d^-1 ≡ 1 (mod p-1)
●
↑ を満たす,
● a^-1, b^-1, c^-1, d^-1
●
を各々計算し,秘密にする。
2018/11/15 8
そして,自分の手元で
●
↓ を秘密にして各々計算。
● A = g1..gn ^ a mod p
● B = g1..gn ^ b mod p
● C = g1..gn ^ c mod p
● D = g1..gn ^ d mod p
●
※ 次からは, mod p を省略します。
2018/11/15 9
計算した値を,公に各々送付
● Alice は A => Bob
● Bob は B => Carol
● Carol は C => Dave
● Dave は D => Alice
2018/11/15 10
受け取った値に対して,自分の手元で
●
↓ を秘密にして各々計算。
● DA = D ^ a ≡ (g1..gn ^ d) ^ a ≡ g1..gn ^ da
● AB = A ^ b ≡ (g1..gn ^ a) ^ b ≡ g1..gn ^ ab
● BC = B ^ c ≡ (g1..gn ^ b) ^ c ≡ g1..gn ^ bc
● CD = C ^ d ≡ (g1..gn ^ c) ^ d ≡ g1..gn ^ cd
●
※ 省略していますが,各項の末尾には「 mod p 」があります。
2018/11/15 11
計算した値を,公に各々送付
● Alice は DA => Bob
● Bob は AB => Carol
● Carol は BC => Dave
● Dave は CD => Alice
●
このやり取りを参加人数分繰り返して,
●
(今回は4回)
2018/11/15 12
最終的に,自分の手元で
●
↓ を秘密にして各々計算。
● BCDA = (g1..gn ^ bcd) ^ a ≡ g1..gn ^ bcda
● CDAB = (g1..gn ^ cda) ^ b ≡ g1..gn ^ cdab
● DABC = (g1..gn ^ dab) ^ c ≡ g1..gn ^ dabc
● ABCD = (g1..gn ^ abc) ^ d ≡ g1..gn ^ abcd
●
※ 省略していますが,各項の末尾には「 mod p 」があります。
2018/11/15 13
あれれ?
● BCDA = g1..gn ^ bcda
● CDAB = g1..gn ^ cdab
● DABC = g1..gn ^ dabc
● ABCD = g1..gn ^ abcd
●
指数の順番こそ違えど,
●
???指数が一致してるっ!!!
●
※ 省略していますが,各項の末尾には「 mod p 」があります。
2018/11/15 14
DH Key Exchange によれば,
●
g ^ xy ≡ g ^ yx
●
だった!!!
●
ということは,
●
g1..gn ^ bcda ≡ g1..gn ^ cdab ≡
●
g1..gn ^ dabc ≡ g1..gn ^ abcd
●
・・・つまり・・・
● BCDA=CDAB=DABC=ABCD
●
ってこと???
●
※ 省略していますが,各項の末尾には「 mod p 」があります。
2018/11/15 15
うっ,すげえ。
● g1..gn ^ abcd
●
↑ を昇順に並び替えて,↓を並び替えた順で計算すれば,
● (((((g1..gn ^ abcd)^(a^-1))^(b^-1))^(c^-1))^(d^-1))
● g1..gn ^ abcd
●
を昇順で並び替え,予測不能な順になった
● g1..gn
●
を得ることが出来るっ!
●
※ 省略していますが,各項の末尾には「 mod p 」があります。
2018/11/15 16
しかも,
●
予測不能な順になった
● g1..gn
●
の順番は,↓を公に各々送付した時点で決まっている!!!
● Alice は A => Bob
● Bob は B => Carol
● Carol は C => Dave
● Dave は D => Alice
2018/11/15 17
今までの進行を理解して。
● AliceがBobに,
● Bobが Carolに,
● CarolがDaveに,
● Daveが Aliceに,
●
計算した値を送付するときには,
● g1..gn ^ X (mod p)
●
を毎回,昇順に並び替える。
●
この並び替えは,「まぜこぜ」するってこと。
●
そして,この「まぜこぜ」によって,
●
最終的な並びが全参加者で一致し,
●
かつ,
●
元の値の並びが分からなくなる。
2018/11/15 18
不可欠なものは?
●
今までの進行に不可欠だったものって何???
●
・・・
●
一枚一枚,元に戻す時,必ず,自分がいないといけない。
●
自分以外の三人が結託したとしても,
●
最終的なカードの並びを操作できないし,
●
最終的なカードから元のカードの予測が出来ない。
●
結託は許さない。
●
自分さえいれば,ゲームの進行は信用できる。
●
仮に不正していたとしても,
●
ゲーム後の検証作業によって露呈する。
●
自分さえ信用できれば,ゲームは成立する。
●
・・・
2018/11/15 19
つまりは?
●
これは,,,
●
自分さえ,信用できればよい。
●
全ての信用は,自分のみに宿る。
●
ってことだっ!
2018/11/15 20
暗号学の思想
●
全てのセキュリティは,鍵のみに宿る。
●
ポーカープロトコルを自分で考えて,
●
全ての信用は,自分のみに宿る。
●
って思えたってことは,
●
暗号学の思想に少しでも近づけただろうか。
2018/11/15 21
我思う,ゆえに我あり。
●
哲学者のデカルトが言ってたよな。
●
多分,錯乱して混乱していたんだと思う。
●
分かるわぁ。分かる。
●
何が本当で何が嘘か分からなくなるもん。
●
暗号のこと考えてると。
●
不正・結託を疑い出すと切りがない。
2018/11/15 22
GPL とは与しない。
●
梅暗号で gmp (多倍長整数 library) を使ったから,
● GPL は知っているし,凄いと思う。
●
私は技術の全てを公開するから,
●
私の技術を使いたいなら,
●
あなたも技術の全てを公開しろ。
●
は,暗号学の思想にも通ずるところがある。
●
でも,やり過ぎと思う。
●
感染条項とか言われちゃってるじゃん。
2018/11/15 23
だから, gmp は使わない。
●
そして,多倍長整数 library として,
● utbi_sanjutsu
●
の開発へと進む。
2018/11/15 24
DHT algorithm 馬跳び
●
自分にとって n 個隣の node に,
●
あなたにとって n 個隣の node を教えて。
●
と,問い合わせ,
●
自分にとって 2n 個隣の node の情報を得る。
2018/11/15 25
唯一解決できなかったこと
●
「まぜこぜ」「馬跳び」と来て,最後の課題は,
● rating 管理だった。
●
私が管理者として,全てのゲームを管理する server を
●
用意すれば良いと分かっていても,
●
それは Pure P2P ではない。
●
当時は,暗号数学を駆使する方法を,
●
あれやこれやいろいろ考えたが,
●
長年(15年位)放置し続けた未解決問題だった。
2018/11/15 26
ブロックチェーン技術との結合
●
私の未解決だった, Pure P2P での
●
「 rating 管理」問題を解決し,
●
「味噌荘」を実現するための技術が,
●
「ブロックチェーン技術」である。
●
と考えています。
●
「 Bitcoin mastering 」を熟読(未完)の上で,
●
ブロックチェーン技術について勉強中の身
●
ではありますが。
2018/11/15 27
ガチャ問題の解決
●
近年,「ガチャ」を運営する
●
モバイル端末ゲーム会社が確率を操作して,
●
レアなカード・アイテムを出さない。
●
という話題がありました。
●
運営の不正を疑われている・・・
●
「ガチャ」の運営を信用できないという問題も,
●
「まぜこぜ」によって,解決可能です。
●
ゲーム終了後に,
●
利用者がゲームの進行を検証すれば良いからです。
DHT 馬跳び (=umatobi) について
https://github.com/umedoblock/umatobi
Github に source 置いてます。
未完ですが。
Multi processes / threads の実験に使える
かと思います。
01
14
3
4
5
6
7
8
9
10
11
12
13
15
初期状態です。各ノードの key を
元に一次元トーラスを構成して
います。
黒点の近くに振ってある番号が
それぞれのノードの key 値です。
また、 key 値はノードの番号も示
します。
2
01
14
3
4
5
6
7
8
9
10
11
12
13
15
初期状態では、時計周り方向の
一つ隣のノードについては知っ
ているものとします。ノード 0
はノード 1 を知っています。
2
01
14
3
4
5
6
7
8
9
10
11
12
13
15
2
初期状態では、時計周り方向の
一つ隣のノードについては知っ
ているものとします。ノード 0
はノード 1 を知っています。
そして、ノード 1 はノード 2 を
知っています。
0[1]1[2]
14[15]
3[4]
4[5]
5[6]
6[7]
7[8]
8[9]
9[10]
10[11]
11[12]
12[13]
13[14]
15[0]
[] の中にそれぞれのノードが知っている
ノード番号が書かれています。
2[3]
0[1]1[2]
14[15]
3[4]
4[5]
5[6]
6[7]
7[8]
8[9]
9[10]
10[11]
11[12]
12[13]
13[14]
15[0]
第一回目の問い合わせです。
自分が知っているノードのうち、一次元
トーラス上においてもっとも遠いノードに
ついてノード情報の問い合わせを行いま
す。
2[3]
0[1]1[2]
14[15]
3[4]
4[5]
5[6]
6[7]
7[8]
8[9]
9[10]
10[11]
11[12]
12[13]
13[14]
15[0]
問い合わせを受けたノードは、自分が知っ
ている全てのノードの情報を問い合わせ元
ノードに伝えます。
2[3]
0[1, 2]1[2]
14[15]
3[4]
4[5]
5[6]
6[7]
7[8]
8[9]
9[10]
10[11]
11[12]
12[13]
13[14]
15[0]
2[3]
ノード 0 の第一回目の問い合わせは終了し
ました。知っているノードは [1, 2] です。 2
個のノードを知っています。
2[3, 4]
0[1, 2]1[2, 3]
14[15, 0]
3[4, 5]
4[5, 6]
5[6, 7]
6[7, 8]
7[8, 9]
8[9, 10]
9[10, 11]
10[11, 12]
11[12, 13]
12[13, 14]
13[14, 15]
15[0, 1]
全てのノードが同じように、第一回目の問
い合わせを行った結果が示されています。
2[3, 4]
0[1, 2]1[2, 3]
14[15, 0]
3[4, 5]
4[5, 6]
5[6, 7]
6[7, 8]
7[8, 9]
8[9, 10]
9[10, 11]
10[11, 12]
11[12, 13]
12[13, 14]
13[14, 15]
15[0, 1]
第二回目の問い合わせです。
自分が知っているノードのうち、一次元
トーラス上においてもっとも遠いノードに
ついてノード情報の問い合わせを行いま
す。
2[3, 4]
0[1, 2]1[2, 3]
14[15, 0]
3[4, 5]
4[5, 6]
5[6, 7]
6[7, 8]
7[8, 9]
8[9, 10]
9[10, 11]
10[11, 12]
11[12, 13]
12[13, 14]
13[14, 15]
15[0, 1]
問い合わせを受けたノードは、自分が知っ
ている全てのノードの情報を問い合わせ元
ノードに伝えます。
2[3, 4]
0[1, 2, 3, 4]1[2, 3]
14[15, 0]
3[4, 5]
4[5, 6]
5[6, 7]
6[7, 8]
7[8, 9]
8[9, 10]
9[10, 11]
10[11, 12]
11[12, 13]
12[13, 14]
13[14, 15]
15[0, 1]
ノード 0 の第二回目の問い合わせは終了し
ました。知っているノードは [1, 2, 3, 4] で
す。 4 個のノードを知っています。
2[3, 4, 5,
6]
0[1, 2, 3, 4]1[2, 3, 4,
5]
14[15, 0, 1,
2]
3[4, 5, 6,
7]
4[5, 6, 7, 8]
5[6, 7,
8, 9]
6[7, 8, 9,
10]
7[8, 9,
10, 11]
8[9, 10,
11, 12] 9[10, 11,
12, 13]
10[11, 12, 13,
14]
11[12, 13,
14, 15]
12[13, 14, 15,
0]
13[14, 15,
0, 1]
15[0, 1, 2, 3]
全てのノードが同じように、第二回目の問
い合わせを行った結果が示されています。
2[3, 4, 5,
6]
0[1, 2, 3, 4]1[2, 3, 4,
5]
14[15, 0, 1,
2]
3[4, 5, 6,
7]
4[5, 6, 7, 8]
5[6, 7,
8, 9]
6[7, 8, 9,
10]
7[8, 9,
10, 11]
8[9, 10,
11, 12] 9[10, 11,
12, 13]
10[11, 12, 13,
14]
11[12, 13,
14, 15]
12[13, 14, 15,
0]
13[14, 15,
0, 1]
15[0, 1, 2, 3]
第三回目の問い合わせです。
自分が知っているノードのうち、一次元
トーラス上においてもっとも遠いノードに
ついてノード情報の問い合わせを行いま
す。
2[3, 4, 5,
6]
0[1, 2, 3, 4]1[2, 3, 4,
5]
14[15, 0, 1,
2]
3[4, 5, 6,
7]
4[5, 6, 7, 8]
5[6, 7,
8, 9]
6[7, 8, 9,
10]
7[8, 9,
10, 11]
8[9, 10,
11, 12] 9[10, 11,
12, 13]
10[11, 12, 13,
14]
11[12, 13,
14, 15]
12[13, 14, 15,
0]
13[14, 15,
0, 1]
15[0, 1, 2, 3]
問い合わせを受けたノードは、自分が知っ
ている全てのノードの情報を問い合わせ元
ノードに伝えます。
2[3, 4, 5,
6]
0[1, 2, 3, 4, 5,
6, 7, 8]
1[2, 3, 4,
5]
14[15, 0, 1,
2]
3[4, 5, 6,
7]
4[5, 6, 7, 8]
5[6, 7,
8, 9]
6[7, 8, 9,
10]
7[8, 9,
10, 11]
8[9, 10,
11, 12] 9[10, 11,
12, 13]
10[11, 12, 13,
14]
11[12, 13,
14, 15]
12[13, 14, 15,
0]
13[14, 15,
0, 1]
15[0, 1, 2, 3]
ノード 0 の第三回目の問い合わせは終了し
ました。知っているノードは [1, 2, 3, 4,
5, 6, 7, 8] です。 8 個のノードを知っていま
す。
2[3, 4, 5,
6]
0[1, 2, 3, 4, 5,
6, 7, 8]
1[2, 3, 4,
5]
14[15, 0, 1,
2]
3[4, 5, 6,
7]
4[5, 6, 7, 8]
5[6, 7,
8, 9]
6[7, 8, 9,
10]
7[8, 9,
10, 11]
8[9, 10,
11, 12] 9[10, 11,
12, 13]
10[11, 12, 13,
14]
11[12, 13,
14, 15]
12[13, 14, 15,
0]
13[14, 15,
0, 1]
15[0, 1, 2, 3]
こうして、ノード 0 は三回の問い合わせだ
けで、 8 個のノードの情報を知ることがで
きました。今後も一回問い合わせを行うた
びに知るノードの数が二倍に増えていきま
す。
これ以降の結果は示しませんが、「馬跳
び」 DHT アルゴリズムの概略がお分かりに
なったでしょうか?
2018/11/15 46
おしまい
●
ご清聴ありがとうございました。
2018/11/15 47
This work is licensed under a Creative Commons
Attribution-ShareAlike 3.0 Unported License.
It makes use of the works of Mateus Machado Luna.

More Related Content

Similar to Mazekoze2

『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算MITSUNARI Shigeo
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとはTakuya Akiba
 
プロジェクトポートフォリオ オブジェクト倶楽部2009夏イベント
プロジェクトポートフォリオ オブジェクト倶楽部2009夏イベントプロジェクトポートフォリオ オブジェクト倶楽部2009夏イベント
プロジェクトポートフォリオ オブジェクト倶楽部2009夏イベントYasui Tsutomu
 
初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウKentarou Mukunasi
 
姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい
姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい
姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしいKazkuki Oakamoto
 
Arduinoでプログラミングに触れてみよう
Arduinoでプログラミングに触れてみようArduinoでプログラミングに触れてみよう
Arduinoでプログラミングに触れてみようHiromu Yakura
 
トーナメントは運か実力か
トーナメントは運か実力かトーナメントは運か実力か
トーナメントは運か実力かKazuro Fukuhara
 
第4回すくすく・スクラム TheKanbanGame
第4回すくすく・スクラム TheKanbanGame第4回すくすく・スクラム TheKanbanGame
第4回すくすく・スクラム TheKanbanGameKazumasa EBATA
 
Tezos 008 Edo protocol
Tezos 008 Edo protocolTezos 008 Edo protocol
Tezos 008 Edo protocolJun Furuse
 

Similar to Mazekoze2 (10)

『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
 
プロジェクトポートフォリオ オブジェクト倶楽部2009夏イベント
プロジェクトポートフォリオ オブジェクト倶楽部2009夏イベントプロジェクトポートフォリオ オブジェクト倶楽部2009夏イベント
プロジェクトポートフォリオ オブジェクト倶楽部2009夏イベント
 
初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ
 
姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい
姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい
姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい
 
ggplot2 110129
ggplot2 110129ggplot2 110129
ggplot2 110129
 
Arduinoでプログラミングに触れてみよう
Arduinoでプログラミングに触れてみようArduinoでプログラミングに触れてみよう
Arduinoでプログラミングに触れてみよう
 
トーナメントは運か実力か
トーナメントは運か実力かトーナメントは運か実力か
トーナメントは運か実力か
 
第4回すくすく・スクラム TheKanbanGame
第4回すくすく・スクラム TheKanbanGame第4回すくすく・スクラム TheKanbanGame
第4回すくすく・スクラム TheKanbanGame
 
Tezos 008 Edo protocol
Tezos 008 Edo protocolTezos 008 Edo protocol
Tezos 008 Edo protocol
 

Mazekoze2