Más contenido relacionado Similar a Misosou=Justice of Punctual+mazekoze+umatobi (11) Misosou=Justice of Punctual+mazekoze+umatobi1. 1
味噌荘= Justice of Punctual +まぜこぜ+馬飛び
Justice of Punctual
+
「まぜこぜ (DH-shuffle) 」
+
DHT 馬跳び
||
Dapps 味噌荘
( インターネット雀荘 )
blockchain.tokyo #15
2018/12/16
梅濁酒 (@umedoblock)
3. 3
block chain の定義
● # block 化技術
電子情報を一単位に区切り,
その一単位に対改竄性を含ませる技術,
● # chain 技術
一単位に区切った電子情報を,
参加者の合意に基づいて,
一方向に連ねる技術,
● # block chain 技術
上記技術の組み合わせを,
block chain 技術と呼ぶ。
4. 4
chain 技術について
● # chain 技術
一単位に区切った電子情報を,
参加者の合意に基づいて,
一方向に連ねる技術
● Justice of Punctual
● block を時系列によって一方向に連ねる。
● 10 分ごとに作成する block に対局結果を含ませる。
● 対局終了時から 10 分 +α 以内に対局結果を投稿。
5. 5
まぜこぜ( DH-shuffle )+馬跳び
● まぜこぜとは,
一言でいうと, DH-Keyexchange の拡張版です。
具体的には,
多原始根の多重べき乗の計算を多人数によって行い,
計算した値を昇順に並び替える(まぜこぜする),
ということです。
● 馬跳びとは,自分からみて,
「 n 個隣の node にとって, n 個隣の node を尋ね」,
2n 個隣の node を知る
ということです。
6. 6
まぜこぜ( DH-shuffle )+馬跳び
● まぜこぜとは,
一言でいうと, DH-Keyexchange の拡張版です。
具体的には,
多原始根の多重べき乗の計算を多人数によって行い,
計算した値を昇順に並び替える(まぜこぜする),
ということです。
● 馬跳びとは,自分からみて,
「 n 個隣の node にとって, n 個隣の node を尋ね」,
2n 個隣の node を知る
ということです。
7. 7
DH-Keyexchange
● Alice と Bob は,原始根g,法nについて合意する。
● Alice は秘密の数 x を生成し, X=g^x mod n を計算する。
● Bob は秘密の数 y を生成し, Y=g^y mod n を計算する。
● Alice と Bob は公に X,Y を交換する。
●
盗聴者 Eve も X,Y を入手する。
8. 8
DH-Keyexchange
● Alice は Key-X =Y^x mod n
● Bob は Key-Y =X^y mod n
を計算する。 Key-X = Key-Y !!! 一致してる !!!
Alice と Bob は公に
秘密の情報 Key-X=Key-Y の共有に成功した。
9. 9
DH-Keyexchange
● Alice は Key-X =Y^x mod n ≡(g^y)^x mod n
● Bob は Key-Y =X^y mod n ≡(g^x)^y mod n
を計算する。
Key-X = Key-Y !!! 一致してる !!!
Alice と Bob は公に
秘密の情報 Key-X=Key-Y の共有に成功した。
10. 10
DH-Keyexchange
● Alice は Key-X =Y^x mod n ≡ g^yx mod n
● Bob は Key-Y =X^y mod n ≡ g^xy mod n
???
● Key-X = Key-Y !!! 一致してる !!!
Key-X = Key-Y !!! 一致してる !!!
Alice と Bob は公に
秘密の情報 Key-X=Key-Y の共有に成功した。
11. 11
DH-Keyexchange
● Alice は Key-X =Y^x mod n ≡ g^yx mod n
● Bob は Key-Y =X^y mod n ≡ g^xy mod n
???
● Key-X = Key-Y !!! 一致してる !!!
● Alice と Bob は公に
秘密の情報 Key-X=Key-Y の共有に成功した。
Eve の持つ X(=g^x mod n), Y(=g^y mod n) からは,
g^xy mod n を計算できない。
12. 12
DH-Keyexchange
● Alice は Key-X =Y^x mod n ≡ g^yx mod n
● Bob は Key-Y =X^y mod n ≡ g^xy mod n
???
● Key-X = Key-Y !!! 一致してる !!!
● Alice と Bob は公に
秘密の情報 Key-X=Key-Y の共有に成功した。
● Eve が盗聴した情報 X(=g^x mod n), Y(=g^y mod n) からは,
g^xy mod n を計算できない。
13. 13
まぜこぜ( DH-shuffle )
● まぜこぜとは,
一言でいうと, DH-Keyexchange の拡張版です。
● 具体的には,
多原始根の多重べき乗の計算を多人数によって行い,
計算した値を昇順に並び替える(まぜこぜする),
ということです。
15. 15
まぜこぜ( DH-shuffle )
● 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 を選ぶ。
16. 16
まぜこぜ( DH-shuffle )
● 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
を各々計算し,秘密にする。
17. 17
まぜこぜ( DH-shuffle )
● DH-Keyexchange を参加者人数分,
今回は4名で4回繰り返し,
最終的に,
(g1..gn)^abcd mod p
を計算する。
(g1..gn)^abcd mod p を昇順に並び替え,
ゲーム開始時の並びとする。
18. 18
まぜこぜ( DH-shuffle )
● DH-Keyexchange を参加者人数分,
今回は4名で4回繰り返し,
最終的に,
(g1..gn)^abcd mod p
を計算する。
● (g1..gn)^abcd mod p
を,昇順に並び替え(まぜこぜし)て,
ゲーム開始時の並びとする。
● ※ 参加者のみの計算によって,この並びを得ました。
19. 19
まぜこぜ( DH-shuffle )
● ゲーム開始後は,
任意の GX( 原始根の多重べき乗 )
(GX=gx^abcd mod p)
に対して,
● a^-1, b^-1, c^-1, d^-1 のべき乗を
Alice, Bob, Carol, Dave が
それぞれ秘密裏に計算し,
20. 20
まぜこぜ( DH-shuffle )
● GX^((a^-1)(b^-1)(c^-1)(d^-1)) mod p =
=gx^(abcd*(a^-1)(b^-1)(c^-1)(d^-1)) mod p
=gx^((a*a^-1)(b*b^-1)(c*c^-1)(d*d^-1)) mod p
≡gx^1 mod p
=gx mod p
●
として,原始根を多重べき乗した値 (=GX) から,
原始根の値 (=gx) を秘密裏に得ます。
25. 25
馬跳び DHT について
● 馬跳びとは,自分からみて,
「 n 個隣の node にとって, n 個隣の node を尋ね」,
2n 個隣の node を知る,
ということです。
言葉だけでは分かりづらいですね。
次のページから図に書いて説明します。
26. 26
馬跳び DHT について
● 馬跳びとは,自分からみて,
「 n 個隣の node にとって, n 個隣の node を尋ね」,
2n 個隣の node を知る,
ということです。
● 言葉だけでは分かりづらいですね。
● 次のページでは,図に書いて説明します。
34. 34
2[3, 4]
1[2, 3]
14[15, 0]
3[4, 5]
4[5, 6]
5[6, 7]
6[7, 8]
8[9, 10]
9[10, 11]
10[11, 12]
11[12, 13]
12[13, 14]
13[14, 15]
15[0, 1]
全てのノードが同じように、第一回目の問い合
わせを行った結果が示されています。
7[8, 9]
0[1, 2]
35. 35
2[3, 4]
1[2, 3]
14[15, 0]
3[4, 5]
4[5, 6]
5[6, 7]
6[7, 8]
8[9, 10]
9[10, 11]
10[11, 12]
11[12, 13]
12[13, 14]
13[14, 15]
15[0, 1]
第二回目の問い合わせです。
自分が知っているノードのうち、一次元トーラス
上においてもっとも遠いノードについてノード情
報の問い合わせを行います。
7[8, 9]
0[1, 2]
36. 36
2[3, 4]
1[2, 3]
14[15, 0]
3[4, 5]
4[5, 6]
5[6, 7]
6[7, 8]
8[9, 10]
9[10, 11]
10[11, 12]
11[12, 13]
12[13, 14]
13[14, 15]
15[0, 1]
問い合わせを受けたノードは、自分が知っている
全てのノードの情報を問い合わせ元ノードに伝
えます。
7[8, 9]
0[1, 2]
37. 37
2[3, 4]
1[2, 3]
14[15, 0]
3[4, 5]
4[5, 6]
5[6, 7]
6[7, 8]
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 個のノ
ードを知っています。
7[8, 9]
0[1, 2, 3, 4]
38. 38
2[3, 4, 5,
6] 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]
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]
全てのノードが同じように、第二回目の問い合
わせを行った結果が示されています。
7[8, 9,
10, 11]
0[1, 2, 3, 4]
39. 39
2[3, 4, 5,
6] 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]
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]
第三回目の問い合わせです。
自分が知っているノードのうち、一次元トーラス
上においてもっとも遠いノードについてノード情
報の問い合わせを行います。
7[8, 9,
10, 11]
0[1, 2, 3, 4]
40. 40
2[3, 4, 5,
6] 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]
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]
問い合わせを受けたノードは、自分が知っている
全てのノードの情報を問い合わせ元ノードに伝
えます。
7[8, 9,
10, 11]
0[1, 2, 3, 4]
41. 41
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]
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 個のノードを知っています。
7[8, 9,
10, 11]
42. 42
2[3, 4, 5,
6] 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 個のノードの情報を知ることができました。
今後も一回問い合わせを行うたびに,知るノー
ドの数が二倍に増えていきます。
0[1, 2, 3, 4,
5, 6, 7, 8]