ブロックチェーンノート①

ブロックチェーンの勉強を始めたのでメモを残していきます．自分は初心者です．p2pやネットワークについても疎いです．
図とかあまり使う予定ないです．

参考文献は[こちら](https://www.amazon.co.jp/%E5%BE%B9%E5%BA%95%E7%90%86%E8%A7%A3%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3-%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E7%9D%80%E5%AE%9F%E3%81%AB%E3%82%8F%E3%81%8B%E3%82%8B%E6%AC%A1%E4%B8%96%E4%BB%A3%E6%8A%80%E8%A1%93%E3%81%AE%E5%8E%9F%E5%89%87-impress-top-gear/dp/4295003921/ref=pd_sbs_14_6?_encoding=UTF8&pd_rd_i=4295003921&pd_rd_r=449c3af3-ea2c-11e8-9e31-2ff97060b5a9&pd_rd_w=1NF1B&pd_rd_wg=kN9tc&pf_rd_i=desktop-dp-sims&pf_rd_m=AN1VRQENFRJN5&pf_rd_p=cda7018a-662b-401f-9c16-bd4ec317039e&pf_rd_r=Z4VC3GX4ZZ4AQY3BWWG9&pf_rd_s=desktop-dp-sims&pf_rd_t=40701&psc=1&refRID=Z4VC3GX4ZZ4AQY3BWWG9)です．

ブロックチェーンの概念について順序立てて書いてありました．全ての章がまさにブロックチェーンのように繋がっていますので，段々と章の内容が累積されていく感じです．　後半の方は1章読むのに苦労します．

## ブロックチェーンとは？
よく分散型台帳技術とか言われていますが，そもそも「分散型台帳技術って何よ？」って感じですね．分散型台帳技術は「銀行のように中央に管理していない，そのネットワークないの人なりpcなりが相互に繋がっている非中央集約型・分散型の~」のように書かれていますね．

そこで「非中央集約」って何よ？ってなります．そこがミソなわけですが，非中央集約=分散だけだとただのp2pじゃね？ってことになるわけです．実際p2pなのは確かなのですが，通常のp2pシステムとは明らかに異なるのは**「誰でも参加できて，誰でもメッセージを送れるが，そのメッセージや取引を承認するのは他人の中でもある特定の条件を頑張って満たした特別な人だよ」**というところです．

通常手紙を送る場合，手紙は当然誰でも送れるわけですが，受け取ることができるのは，その宛先の住所に住んでいる人だけです．　ブロックチェーンの場合，まずその手紙が本当に手紙を送った人なのかを確認するところから始まります．

用語を置き換えると「トランザクションの偽造がされていないかの確認」になります．　この手紙は確かに「送りたいと思っている人が送っている正しい手紙だな」と周りの人がわかったら，認証されます．

しかし，「受け取っている人」が本当に「手紙を送りたいと思っている人が送りたいと思っている相手」と一致しているのか？ということの確認も必要なわけです．順番的には

1. この手紙は本当に対象としている手紙なのか？という**認証**
2. 送り手は正しいし，受取手も正しいことがわかった上での**承認**

になります．今出てきた，認証と承認という概念がブロックチェーンを難しくしているのかもしれません．これら二つは我々は日常で無意識のうちにしていることだからです．わざわざ言語化しなくてもやっているので，このように言語化（明文化）していることがブロックチェーンを難しくさせている要因な気もします．

### 認証と承認

ここで登場するのが公開鍵と秘密鍵です．

参考文献にはこれらの概念がわかりやすく図で説明されていました．

公開鍵は誰でも共有できる鍵で秘密鍵は自分しか持っていない鍵です．　これらをどう使うのかというと手紙の例で話しましょう．

まず手紙を書きますが，中身を見られたくない・書き変えられたくないので自分だけの鍵で内容を暗号化します．この暗号化した文書は公開鍵を使うことで平文（元の文章）に戻せます．

しかし実際に手紙の中身を確認するときは，直接鍵を使って手紙の中身を覗くことはしません．ここにも暗号認証を使っている理由があります．

手紙の送り主は，手紙の中身を知られたくないので先ほど，持っている秘密鍵で暗号化すると言いましたが厳密には「一方向関数であるハッシュ関数」というのを使用して，ハッシュ値なるものへ変換します．

そして，手紙が不正なものでないか，送り主が不正な人でないか確認するために，同様にデジタル署名なるものを公開鍵でハッシュ値に変換し，ハッシュ値の整合性を確認することでその手紙（トランザクション）が不正なものかどうかを判定します．

手紙の送信途中に何か悪意のあるものに中身が書きられたりすれば，公開鍵によって計算されるハッシュ値は当然変わってしまうので，もともと送り手が見られたくないがゆえに秘密鍵で変換したハッシュ値とは異なる値になります．

ここで用いられている関数は一方向関数と呼ばれているっもので，入力が少しでも変われば出力も変わるというものです．そしてそこに規則性はありません．　なので，出力値（ハッシュ値）から逆に入力を求めることはできません．これが一方向関数と呼ばれる理由です．

先ほど，**デジタル署名**と言いましたが，公開鍵暗号を用いると同時に作成されるものです．　メッセージそのものではありません．

ここまでの話をまとめます．

1. 手紙を送りたいAという人と手紙の受け取り人のBという人がいる
2. AはBに手紙を送る．
3. しかし，Bが正しく**Aからの手紙をそのまま**受け取るためには，第三者による手紙の認証と承認が必要です．
4. 第三者に認証（その手紙がAが送ったものであるという認証）と承認（Bがその手紙を受け取るという承認）をするために，Aは自分以外の人が手紙の中身を書き変えれないように秘密鍵でハッシュ値に変換する．
5. その際にデジタル署名も作成される
6. そのデジタル署名を第三者が公開鍵でハッシュ値に変換する．
7. 4のハッシュ値と6のハッシュ値が一致していれば第三者による手紙と手紙の中身の正当性は証明されるので，Bの元に無事手紙が届く．

という流れになります．　手紙でイメージできない人は「ビットコイン」とか「トランザクション」という言葉に置き換えて読んでもらっても構いません．


## で，何がブロックなの？

さて，手紙を送れたのはいいのですが，送れただけでは当然ただのp2pシステムによるメッセージ送信アプリになってしまいます．これを永続的に続けるplatformがないといけません．そして永続的に第三者による認証，承認が実施される仕組みを可能にしたのがブロックチェーンという技術なわけです．

しかし冷静に考えてみてください．誰が好き好んで知らない人の手紙の送受信を管理するのでしょうか？普通ならしませんよね？その手紙が本当に送り手のものなのか？中身が書き換えられていないのか？そんなことするはずがありませんね．銀行じゃあるまいし…．

当然銀行は中央管理なのでブロックチェーンとは相反するものです．そして銀行なしでも（非中央・分散型でも）．この手紙の管理・譲渡システムが成り立つように，人間を巧みに利用するための合理的な仕組みがあるわけです．

## 

あなたなら，どのような状況なら見知らぬ人の手紙の所有権の管理・譲渡をやりますか？色々ありますが，ブロックチェーンでは人間の根源的な生存欲求に訴えかけます．　要するにお金ですね．　

知らない人の手紙の所有権・譲渡の管理をする代わりにその代償として金銭的報酬を発生させています．それにより，ブロックチェーンが使われている仮想通貨などのプラットフォームは無事に機能しているわけです．

そんなバカなと思うかもしれません．　大発明とまで言われている技術がまさかお金で人を動かすことによって成り立つものだなんて．　人は信用できないので，お金があれば裏切りものなどいないだろうということです．　金銭的なトラブルで人は簡単に人を裏切りますがそれを逆手に取っているわけです．なんとも皮肉なものです．

ではどのように報酬を発生させているのでしょうか？単純に考えれば，上のフローの7番あたりでしょうか？実際そうです．

トランザクションが第３者によって認証されると実際にA→Bと送金されるわけですが（厳密にはすぐにではないです），ではそのトランザクションの認証（手紙の認証）はどのように行われるのでしょうか？

## 第三者って誰よ

ここまで第三者と連呼してきましたが，第三者とは一体誰でしょう？　答えを言うとそのp2pネットワークに参加している全てのユーザーです．

そして全てのユーザーが認証合戦に参加し，無事一番早く**「この手紙合ってるね．改ざんされてないよ」**と宣言した人に報酬が支払われます．　

そしてその確認手法がすでに上で述べた**公開鍵によるハッシュ値の整合性の確認**です．　以下ではこのハッシュ値についてもうすこしみていきます．

## ハッシュ値

先ほど，少しだけ一方向関数の話をしましたが．これはある入力に対して無規則に（ランダム？と言うと何に基づいたランダム性なのかの議論になるのでここでは端折ります）ハッシュ値が出力される優れた暗号アルゴリズムです．SHA256と言うアルゴリズムを使って計算される値のようです．

念のため言っておきますが入力が1違うから取って出力も1だけ異なるというものではありません．　もっと内部は複雑です．詳しく知りたい人は楕円曲線関数とか圧縮関数とか調べて貰えばいいのでしょうか？手っ取り早く暗号学の専門書でも買ったほうがいいかもしれません…

ハッシュ値がなんなのか？（Aの秘密鍵により変換された値がなんなのか？）はひたすらいろんな入力をハッシュ関数に通して数打てば当たる作戦で試すしかないのです．要するにより短い時間でより多くの入力を試した人が正確なハッシュ値にたどり着けるわけです．　要するにより高性能なマシンを大量に持ったもん勝ちということです．（より多くのハッシュ関数計算を試すことができるので）

これが巷でよく言われている，「中国でのマイニング問題」です．　電気代が安い中国で大量の計算機を動かせばハッシュ値を誰よりも早く見つけることができる！と皆考えたわけです．　それでマイニングに規制がかかったわけです．

用語の説明なしに使用しましたが，**「マイニング」**とは，第三者がマシンで計算して正しいハッシュ値を探索する行為のことです．　これが成功すれば第三者は承認の報酬としてコインが手に入るので鉱山の採掘に例えてマイニングと呼ばれているわけです．


まだまだ更新します．