Upgrade to Pro — share decks privately, control downloads, hide ads and more …

味噌荘= Justice of Punctual +まぜこぜ+馬飛び

umedoblock
December 17, 2018

味噌荘= Justice of Punctual +まぜこぜ+馬飛び

味噌荘= Justice of Punctual +まぜこぜ+馬飛び
blockchain.tokyo #15

umedoblock

December 17, 2018
Tweet

Other Decks in Programming

Transcript

  1. 1 味噌荘= Justice of Punctual +まぜこぜ+馬飛び Justice of Punctual +

    「まぜこぜ (DH-shuffle) 」 + DHT 馬跳び || Dapps 味噌荘 ( インターネット雀荘 ) blockchain.tokyo #15 2018/12/16 梅濁酒 (@umedoblock)
  2. 2 自己紹介 • 梅濁酒 • Twitter:@umedoblock • Github:umedoblock • 馬跳び

    simulator を開発中 • 馬跳びは Github にて公開中
  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 の拡張版です。 •

    具体的には, 多原始根の多重べき乗の計算を多人数によって行い, 計算した値を昇順に並び替える(まぜこぜする), ということです。
  14. 14 まぜこぜ( DH-shuffle ) • 参加者4名, Alice, Bob, Carol, Dave

    は, 以下に合意する。 • 巨大な素数 p • n 個の原始根 (g1..gn)(↓ を満たす ) 2 <= g1..gn <= p-1
  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) を秘密裏に得ます。
  21. 25 馬跳び DHT について • 馬跳びとは,自分からみて, 「 n 個隣の node

    にとって, n 個隣の node を尋ね」, 2n 個隣の node を知る, ということです。 言葉だけでは分かりづらいですね。 次のページから図に書いて説明します。
  22. 26 馬跳び DHT について • 馬跳びとは,自分からみて, 「 n 個隣の node

    にとって, n 個隣の node を尋ね」, 2n 個隣の node を知る, ということです。 • 言葉だけでは分かりづらいですね。 • 次のページでは,図に書いて説明します。
  23. 27 1 14 3 4 5 6 8 9 10

    11 12 13 15 2 初期状態です。各ノードの key を元に一次元ト ーラスを構成しています。 黒点の近くに振ってある番号がそれぞれのノー ドの key 値です。また、 key 値はノードの番号も 示します。 7 0
  24. 28 1 14 3 4 5 6 8 9 10

    11 12 13 15 初期状態では、時計周り方向の一つ隣のノード については知っているものとします。ノード 0 はノ ード 1 を知っています。 2 7 0
  25. 29 1 14 3 4 5 6 8 9 10

    11 12 13 15 2 初期状態では、時計周り方向の一つ隣のノード については知っているものとします。ノード 0 はノ ード 1 を知っています。 そして、ノード 1 はノード 2 を知っています。 7 0
  26. 30 1[2] 14[15] 3[4] 4[5] 5[6] 6[7] 8[9] 9[10] 10[11]

    11[12] 12[13] 13[14] 15[0] [] の中にそれぞれのノードが知っているノード番 号が書かれています。 2[3] 7[8] 0[1]
  27. 31 1[2] 14[15] 3[4] 4[5] 5[6] 6[7] 8[9] 9[10] 10[11]

    11[12] 12[13] 13[14] 15[0] 第一回目の問い合わせです。 自分が知っているノードのうち、一次元トーラス 上においてもっとも遠いノードについてノード情 報の問い合わせを行います。 2[3] 7[8] 0[1]
  28. 32 1[2] 14[15] 3[4] 4[5] 5[6] 6[7] 8[9] 9[10] 10[11]

    11[12] 12[13] 13[14] 15[0] 問い合わせを受けたノードは、自分が知っている 全てのノードの情報を問い合わせ元ノードに伝 えます。 2[3] 7[8] 0[1]
  29. 33 1[2] 14[15] 3[4] 4[5] 5[6] 6[7] 8[9] 9[10] 10[11]

    11[12] 12[13] 13[14] 15[0] 2[3] ノード 0 の第一回目の問い合わせは終了しまし た。知っているノードは [1, 2] です。 2 個のノード を知っています。 7[8] 0[1, 2]
  30. 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]
  31. 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]
  32. 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]
  33. 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]
  34. 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]
  35. 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]
  36. 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]
  37. 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]
  38. 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]