The Coffee Times

シゴト・英語・テクノロジー・人生の楽しみ方を発信してます

ブロックチェーンで使われるハッシュやデジタル署名とは何か?

暗号学について説明として、基礎となる概念2つ、ハッシュとデジタル署名について説明します。

ハッシュとは、任意のデータをインプットしたときに、いくつかのアルゴリズムを通し、outputととして出てきた固定の値をハッシュと呼びます。

 

f:id:CoffeeTimes:20171123124809p:plain

 

このinputは、どのような大きな値も可能です。理論的には無限のbit数のデータを入れ込めます。そしてハッシュアルゴリズムは、数ある中からニーズに合ったものを選ぶことができます。

ここで重要なことは、ハッシュアルゴリズムは無限の大きさの2進数のinputにとっても、計算をし、有限の(固定の)値のoutputを出します。(例えば256bitなどのアウトプットなど)

 

 

一般的にハッシュは何に使われるか

一般的な使い方は、ファイルの証明(フィンガープリント)に使われます。チェックゾーンとかとも言われますね。つまり、ファイルが操作や変更がされていなくオリジナルなものだ!と確認するために使われるのです。

もし私が、何か記事を書きファイルにして、MD5 というハッシュ関数を使って固定の値をつくったとしましょう。

そして、このファイルをダウンロードした人が、そのファイルをMD5ハッシュ関数

で固定の値を出してみたとします。もしこのハッシュ値同士がマッチしなければ、ダウンロードされたファイルは何かしらの変更が加えられた、ということが分かります。

f:id:CoffeeTimes:20171123125322p:plain

 

 

ブロックチェーンは何にハッシュを使うのか

ハッシュは、ブロックチェーンの現在の状態を示すために使われます。inputはブロックチェーンの状態すべてであり(どのアカウントがいくら持っていて、過去にどんな取引をしてなどの情報)、そしてそのハッシュ関数を通じて出されたハッシュ値は、現在の状態を表します。そしてすべてのノードが、「今のブロックチェーンはこれだよね」と同意できることになります。

具体的に、どのような計算が行われているでしょうか。

まず一番はじめのブロック(ジェネシスブロックとも言われます)のために、そのブロック内のトランザクションを使って一番はじめのハッシュ値が計算されます。

このあとにできていくブロックに関しては、前回のブロックのハッシュ値が、「次のブロックのハッシュ値を求めるためのinput」ととして使われます。

このように、それぞれの新しくできるブロックは、その前のブロックをinputにとったハッシュ値で、できていき、ブロックの連なり(ブロックチェーン)が形成されていきます。

このハッシュによる仕組みで、どのトランザクションも改ざんされていない、ということが保証されます。なぜなら上で述べたように、もしトランザクションが変わると、それらをinputにとって導いたときのハッシュ値も変化し、ブロックのハッシュ値も変わるためです。

すべてのブロックチェーンの情報ではなく、ハッシュ値を比べればいいため、不正を検出するのが容易です。Ethereumのブロックチェーンは、数十ギガバイト以上ありますが、たった256bitの16進数ハッシュ値で、現在の状態だというのが表現されているわけです。

 

デジタル署名について

手書きの署名のように、自分であることを証明する署名ですが、暗号技術(数学)を用いて署名がされるため、セキュアな署名といえます。インターネットでは広く使われていて、例えば、自分とサーバーで信頼性を確認するためにデジタル署名を使ったSSLなどを意識せずに使い、ウェブサイトを見ていることも多いと思います。

例えばFacebookをみるときなどは、Google cromeやfirefoxなどのブラウザが、本当にFacebookのサーバーから来ている情報か?ハックされていないか?と確認するために、webページと共に送られるデジタル署名をチェックしています。

 

 

 

公開鍵暗号では、ユーザが、あるアルゴリズムを用い、公開鍵と秘密鍵のペアの鍵を作ります。この2つは数学的に関連付けがされていると思ってもらえば大丈夫です。

公開鍵(パブリックキー)はその名の通り公開され、メッセージを受け付けるためのアドレスのように機能します。

秘密鍵(プライベートキー)は公開されずシークレットの状態のままであり、他のユーザから送られてきたメッセージにデジタル署名をするために使われます。

この署名はメッセージに含まれ、公開鍵を使って確認ができるようになっています。

つまりこのやり方であれば「送信者だけがこのメッセージを送れる」ということを受信者が確かめることができるのです。

このペアの鍵を生成するのは、ブロックチェーン上でアカウントを作るのと同じ挙動になります。さらに、ブロックチェーン上で実行されたすべてのトランザクションは、送信者が秘密鍵によってデジタル署名されるため、アカウントのオーナーだけがアカウントのお金を動かせるということを保証してくれているというわけです。

 

最後に

ブロックチェーンは、ハッシュやデジタル署名なしでは存在しえません。ハッシュは、ブロックチェーンの現在の状態をみんなが本物だと信じるための方法であり、デジタル署名は、すべてのトランザクションが然るべき人(アドレスの所有者)によって作られたものだということを保証するための方法です。これらの特徴を活用し、改ざんされないブロックチェーンが動いています。