blockchain - hacker tackle

Post on 15-Apr-2017

5.393 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Blockchain~ビットコインを支える技術~

コンセンサスアルゴリズムの視点から

Nayuta 栗元憲一

Photo/ The Flat Evening - Adam Meek

最初に

主催者より

「ハッカーがまさかりを投げ合う会なので ぶっ飛んだ内容を発表しろ!」

            と言われてます

最初に

なので、自分もまだはっきり分かってないこととかも発表することにしましたw

特にコンセンサスアルゴリズムについて詳しい方からの意見をお待ちしています。

Agenda

1. Bitcoinとは2. Blockchain解説3. Blockchainの通貨以外への応用4. コンセンサスアルゴリズム5. まとめ

0. 自己紹介

十数年SoC(System on Chip)の開発に従事

Androidとハードウェアを組み合わせたソリューションの開発

BLEを用いたセンサーネットワークソリューションの開発

Androidアプリ開発に従事

Androidとハードウェアを組み合わせたソリューションの開発

BLEを用いたセンサーネットワークソリューションの開発

栗元憲一

しかじろう

Hardware 組み込み   Mobile Cloud

Nayuta http://nayuta.co

Nayuta http://nayuta.co http://nayuta.co

1. Bitcoinとは2. Blockchain解説3. Blockchainの通貨以外への応用4. コンセンサスアルゴリズム5. まとめ

0. 自己紹介

Agenda

•P2P型決済網

•その決済網で使用できる仮想通貨

•国家を超えて使用できる

•発行主体が無い

•現在、手数料は格安

•途上国で銀行システムに入ってない人にメリット

Bitcoin

世界中のBitcon WalletがP2Pで繋がって、Bitcoinネットワークを構成している。

そのネットワークに自分の PCを接続する。

どこかのWalletとBitcoinをやりとりできる。

このBitcoinネットワークが決済承認も行う。(SPVノードと呼ばれるマイニングしないノードは今回考察から外しています)

決済承認はマイニングと呼ばれる競争で、競争に勝つとBitcoinが貰える。Bitcoinが生み出されるのはこの方法のみ。

重要:どこにも中心サーバーは無い!自由にP2P網に参加できる!誰も認証を誤摩化せない!誰も認証網を止めれない!特定の発行組織が無い!

•Decentralized

•Trustless

この二つの特徴が非常に重要な物となっています。

この意味を理解してもらうことが今回の前半の目標です。

Bitcoin

1. Bitcoinとは2. Blockchain解説3. Blockchainの通貨以外への応用4. コンセンサスアルゴリズム5. まとめ

0. 自己紹介

Agenda

全体イメージを説明します。

Blockchain

•なりすまし(勝手に人のお金を使う)を防げる?•二重使用(自分のお金を複数回使う)を防げる?•P2Pの各ノードに情報が届くタイミングには 差があるが一意にできる?

Bitcoinの解決策 - Blockchain technology

P2P網で決済って、簡単にできるの???

・ハッシュ

・公開鍵暗号 電子署名

枯れた技術の組み合わせです!

Blockchainの要素技術

私は栗元です。ハカタクルでBlockchainについて話します。

8D888C6B7077434984958A659BDA3D67060A786E0EAB29AD52B747F09F6ED524

私は栗元です。ハカタクルでBlockchainについて話しますよ。

AE79CCEAF94525CBC4E1AD4875EF0612DAC12A6A305587CC06E6798F8330D396

データの指紋のような固定長データを生成する関数。

元データのサイズによらず一定の長さ

元データがほんの少し変わっただけで、ハッシュ値は全然異なる

元データは例えば jpegファイルとかでも良い

ハッシュ関数 (例:SHA256)

私は栗元です。ハカタクルでBlockchainについて話します。

8D888C6B7077434984958A659BDA3D67060A786E0EAB29AD52B747F09F6ED524

ハッシュ値を計算するのは簡単

8D888C6B7077434984958A659BDA3D67060A786E0EAB29AD52B747F09F6ED524

指定されたハッシュ値になる元データを作るのは非常に難しい。(総当たりでやるしかない)

この特徴があるためデータの指紋のように考えることができる

ハッシュ関数 (例:SHA256)

共通鍵暗号:暗号化する人と、複号化する人が同じキーを使う

5月16日に新製品発表します。

ndja%&nofnea823rnvan`:

5月16日に新製品発表します。

ndja%&nofnea823rnvan`:

暗号化 複号化

通信

二人はそれぞれ内部で同じキーを使っている。

公開鍵暗号:暗号化キーと複号化キーが異なる

Aさん Bさん

5月16日に新製品発表します。

novaneor($)U%mafdjmnf

5月16日に新製品発表します。

暗号化 複号化

通信

Aさん Bさん

novaneor($)U%mafdjmnf

Bさんの公開鍵を使って暗号化 Bさんは秘密鍵を

使って複号化

公開鍵暗号

公開鍵暗号を使いたい人 (Bさん)は、ペアとなる公開鍵と秘密鍵を生成して、公開鍵の方だけを公開すれば良い。

Bさんと通信したい人は、Bさんの公開鍵をつかってデータを暗号化してインターネットを使用してBさんに送れば、秘密鍵を持っている Bさんのみが複号できる。

途中で暗号化されたデータを誰かが取得したとしても秘密鍵を持っているBさん以外は復号できない。

秘密鍵は絶対に他人に漏らしたらダメ!

Bさん

公開鍵暗号

自分の秘密鍵でデータのハッシュ値を暗号化したものをデータと一緒に送る事で、「確かに自分が送ったものである」「通信の途中で改ざんされていない」ということが保証できる

A社と契約しました。

14bc98a40a94dfef

ハッシュ値

Aさん

Aさんの秘密鍵で暗号化

a4bc909032af3

A社と契約しました。

a4bc909032af3

データと暗号化したハッシュ値を一緒に送る

通信

Bさん

A社と契約しました。 14bc98a4

0a94dfef

受信したデータのハッシュ値を計算

a4bc909032af3

14bc98a40a94dfef

受信したハッシュ値をAさんの公開鍵で復号

等しい???

電子署名

全体イメージの説明に戻ります

Blockchain

•なりすまし(勝手に人のお金を使う)を防げる?•二重使用(自分のお金を複数回使う)を防げる?•P2Pの各ノードに情報が届くタイミングには 差があるが一意にできる?

Bitcoinの解決策 - Blockchain technology

解決すべきことを思い出しましょう

•これまでの世界中でのBitcoin使用歴(transaction)すべてを全ノードが持っている

•10分間で行われた transactionに対して認証し、後ろに加えて行く

•P2Pなので時々一意にならない時があるが、一意に収束するようになっている

全体構造

自分宛の未使用 transactionを集めて入力とし、金額と送る相手の公開鍵を合わせて transactionとする

デジタル署名を含めることで、他の人でなく、間違いなく本人が使用することを宣言したことをアルゴリズム的に保証する。

このtransactionをP2P Bitcoinネットワークに流してProof of workで認証してもらう。

Transaction 生成

10分間のtransactionを集めて、それぞれのノードが認証競争を始めます。

認証競争に勝った人はビットコインが与えられます。

そのため認証競争をminingと呼びます。金の採掘のイメージ

ビットコインが生み出されるのはこの認証競争からのみです。

認証競争は数学的なクイズを解く

解けた人は結果を皆に流します

Proof of work と mining

前回のQuizの答え

今回のtransactionの集まり

自分への報酬 transaction

  +     任意の数値

ハッシュ 0000000000000001245abdf678909dc87654fc345676be765268907336ef7800875ffc432b35678

先頭にN桁0が続く

この条件を満たす任意の数値を求めるのがクイズ

Proof of work と mining

Aさん->Cさん10BTCDさん->Fさん0.1BTCHさん->Aさん0.5BTC…....……Xさん->Mさん5BTC

Nさん->Cさん100BTCDさん->Oさん0.1BTCHさん->Kさん4.2BTC…....……Bさん->Aさん0.01BTC

Aさん->Cさん0.3BTCGさん->Fさん0.5BTCHさん->Aさん21BTC…....……Lさん->Mさん4BTC

Aさん->Oさん43BTCDさん->Cさん0.1BTCLさん->Aさん0.52BTC…....……Xさん->Qさん5.6BTC

ハッシュで繋がっているため改ざんが難しい

Blockchainのイメージ

異なるQuizの回答が来たときは分岐する。最終的に長い方が生き残る。

Blockchainの分岐と収束

Mastering Bitcoin - Andreas M.Antonopoulos より

Blockchainの分岐と収束

Mastering Bitcoin - Andreas M.Antonopoulos より

Blockchainの分岐と収束

どこにも権威が存在しない

中央サーバー無しにクリティカルなtransaction記録

Decentralized

誰一人Bitcoinネットワークを騙す事が出来ない

Bitcoinネットワークは人 •組織は悪い事をする前提で、それでも機能するように設計されます。

人間を信用しないシステムこそが、人間性を満たす社会を創るという考えです。

Trustless

発行主体が無い

参加者がそのまま認証サーバーの一部に

Decentralized

Trustless

Blockchainの特徴まとめ

1. Bitcoinとは2. Blockchain解説3. Blockchainの通貨以外への応用4. コンセンサスアルゴリズム5. まとめ

0. 自己紹介

Agenda

blockchainは、、、

•権威者無しのP2P網によるデジタル通貨

•権威者無しで、ネット上のIDとID間取引を一意に決めれるシステム

•ある時刻であるデータが存在していたことを証明できる公共データベース

•秘密鍵の持ち主と公開鍵を紐づけることができる公共のデータベース

•Paxosのような分散データベース合意アルゴリズムの上位概念

等、人によって様々な捉え方がされています。

実体のあるデバイスの所有権をBlockChain technologyを用いてコントロールするコンセプト

smart contract の一種

https://en.bitcoin.it/wiki/Smart_Propertyproposed by Nick Szabo in his 1997 paper

Smart Property

identification keyメーカが製造時に生成ダッシュボード等でアクセス可能に

ownership key0.00….1BTC仮にT Coinとする

https://en.bitcoin.it/wiki/Smart_Property

example: 車のオーナーシップ

owner売りたい

買いたい

①nonce生成して送る(車のデータをくれ! )

identification key署名noncecars public certCar’s data現owner PK最後にownerが変わったtransactionとmarkle branch

②車のデータや、本当に現 ownerかどうか署名付きのデータを貰う

④新しいownership keyを作るK2

⑤新しいtransaction作って ownerに送る。 input2があるまで無効

③支払いを受け取るKey K1を作る。価格はP

⑥input2が入って、transactionが認証されれば、ownershipがCoin払いと共に移動!

input1: P Coin output1: P CoinをK1に送るinput2: T Coin output2: T CoinをK2に送る

ownership keyT Coin

transaction

smart propertyをもっと複雑にした契約をコードで示す

blockchainに記述

自動執行

Smart contract

1. Bitcoinとは2. Blockchain解説3. Blockchainの通貨以外への応用4. コンセンサスアルゴリズム5. まとめ

0. 自己紹介

Agenda

コンセンサスアルゴリズム世界中にある分散されたデータベースを読み書きして、きちんと一貫性が取れる?(通信に時間がかかるため、同じタイミングで読み書きできない。どれかが故障しているかもしれない。 )

多数決的に*%以上の合意を答えにするのがコンセンサスアルゴリズム

栗元は一般的なコンセンサスアルゴリズム(blockchain以外)に関して素人です。

ここでは、簡単に調べた内容を書いています。詳しい方、色々教えてください。

コンセンサスアルゴリズム

全体の数のうち、ある一定の割合以上が同じ答えを出した時にそれが採用される。

仮に多くのコンピュータが “1+1=3”という答えを出した場合には、それが採用されるのが正しいコンセンサスアルゴリズム

ノードは停止するだけとか、単体で間違った答えを返す可能性があるだけとか、ノードが共謀して間違った答えを出すとか、色々な前提条件がある。

2 Phase Commit(コンセンサスアルゴリズムの前に)

調整者

参加者

参加者

参加者

コミット要求相

1.調整者がコミットできるか参加者全員に問い合わせ

2.参加者はトランサクションをコミットを行える状態まで進める。

3.参加者はトランザクションが成功した時「合意」を返し、失敗した時は「停止」を返す

4.調整者は全参加者から応答メッセージがあるまで待つ

2 Phase Commit(コンセンサスアルゴリズムの前に)

調整者

参加者

参加者

参加者

コミット相

⚫�全参加者から「合意」が来た場合1. 調整者は全参加者に「コミットせよ」送る2. 参加者はコミットしてロックを解放3. 参加者は調整者に「完了応答」送る4. 調整者は全参加者から完了応答もらったら終了

⚫�「停止」が一つでも参加者から来た場合1. 調整者は全参加者に「ロールバックせよ」送る2. 参加者はUNDO3. 参加者は調整者に「完了応答」送る4. 調整者は全参加者から完了応答もらったら終了

ブロックが発生する!

ブロックが発生しないように、一定時間で応答がないと遷移するようなステートを規定した3相コミットに発展

Paxos(consensus algorithm)

http://www.slideshare.net/pfi/paxos-13615514

難しい。。。 Orz…. Give up

3相コミットの発展任意のノードから提案があって、過半数の合意をとる間に他のノードからの提案が被さっても正しく動く様に細かく決めている。

全ての人の合意を待たず、過半数でOK

ノードが故障して、しばらくして復活して動き始めた時にも正しく動くように

ノードが共謀して嘘をつく場合はヤバい(Bizantine Failure)

番外編: Ripple (UNL)UNL = Unique Node List

全てのノードがUNLというコンセンサスをとるノード集合のリストを持っている。

全てのUNLのペアに対して以下の条件が満たされるようにUNLをとることによってRippleのコンセンサスアルゴリズムは機能する

The Ripple protocol consensus algorithmより

番外編: Ripple(consensus)UNLの中で認証された transactionを送りあって、ノード間での認証割合を上げていく。

各ノードがUNLを持っていて、最終的には全体が合意取れる

https://www.youtube.com/watch?v=pj1QVb1vlC0&t=1m9s

Blockchainに戻る

BItcoinのコンセプト = 国家や組織に依存しない通貨

・ノードは自由参加

・ノードは共謀して騙しにくる可能性あり   (耐Byzantine Failureが求められる)

Blockchainに戻る

           ノードは自由参加

・ノードやアカウントを大量に作って過半数を取りに来る可能性あり

・CPUに重たい演算(ハッシュ計算)をさせてCPU能力で一票にしてしまう(世界中のCPU演算能力の過半数を抑えるのは難しい)

・nonceの条件を満たす値を見つけるのは非常に難しいが、検算のハッシュ計算は簡単

Blockchainに戻る

    世界中に通信する時間差がある。

・チェインの分岐を許し、もっとも長いチェインを採用

Blockchainに戻る

     ノードが共謀して騙しに来る

・過去の演算を全てハッシュで繋いでいくことで、古いブロックを書き換えることを非常に難しくした(嘘をつくのは最新ブロックではやりやすいが、以前のブロックは難しい)

・”確率的に” 事実上、騙せない(FLP不可能性に反しない)

Blockchainの特徴

・ノードは自由参加!

・CPU演算能力で一票 (51%のCPU演算能力多数決)

・時間とともに一意なtransaction記録

      Decentralized!!!

Blockchainの特徴

今までにないコンセンサスができることで Decentralizedなデータベースができた

みんなのお金! 誰のものでもない共有データベースSmart Contract存在証明色々なコンセプトがでてきてる

Bitcoinのスクリプティングをチューリング完全にして Decentralized computing “みんなのコンピュータ”も動き始めている

クラウド構造を大きく変える 社会の構造を大きく変える

1. Bitcoinとは2. Blockchain解説3. Blockchainの通貨以外への応用4. コンセンサスアルゴリズム5. まとめ

0. 自己紹介

Agenda

まとめ

Blockchainは今までにない条件下での分散コンセンサスを可能にした

そのことによってDecentralizedなデータベースが出現

新しい可能性が開ける

fin

top related