おーみん@仮想通貨日記

仮想通貨を中心に様々なジャンルをお届けします。

【Lisk Academy 和訳】Hash関数、暗号化って何?

おはようございます。おーみんです。

今日もLisk Academyから色々学んだので、その内容を共有したいと思います。

今回の和訳箇所は " What is Hashing? " です。

それではいつも通り原文+和訳の順でいってみましょう!

以下のサイトから引用し、翻訳しています。

lisk.io

※なるべく分かりやすくするため、忠実な和訳は避けております。

 

f:id:bookreadkun:20180421124943p:plain

<和訳>

ハッシュ化って何ですか?

紙幣ではあまり起きないのですが、電子データだと色々な悪者によって二重支払いをさせられたり、詐欺的な取引が記録させられたりします。ブロックチェーン技術ではこれらを防止することを目的としていますが、その役目を主に果たすのが「ハッシュ化」です。

 

ハッシュ化とは、とある長さのデータを受け取った後に、そのデータを暗号化するプロセスのことを言います。(例えば上図のようにたくさんの文字列をハッシュ化すると何だかよく分からない文字や数字の羅列になります。)

そのハッシュ化にも種類があって、例えばビットコインならSHA-256というのが使用されています。ハッシュ化によって、ブロック内の色々な情報を暗号化します。

 

f:id:bookreadkun:20180421131140p:plain

<和訳>

ハッシュ化することでデータを保護します。

データをハッシュ化することで、誰もその暗号を解読することはできません。ここでハッシュ化を行う関数をハッシュ関数と言いますが、ちゃんと「使える」ハッシュ関数と見なされるにはいくつか重要な性質が必要です。以下に示します。

 

  • 異なるデータに対してハッシュ化した際に、同じ暗号に変更されないこと
  • 同じデータに対してはハッシュ化した際に、同じ暗号に変更されること
  • 素早くハッシュ化できること
  • ハッシュ化した暗号を復号化されないこと
  • 入力されたデータがわずかに異なったとしても、暗号は全く異なるものに変更されること

f:id:bookreadkun:20180421133400p:plain

<和訳>

例えばネット上からあるファイルをダウンロードするとしましょう。その際、ハッシュ値(ハッシュ化をした暗号)はあらかじめ分かっています。ダウンロードした後、試しにハッシュ化してみましょう!ハッシュ値は、あらかじめ提示されていたハッシュ値と一致していますか?先ほども述べましたが、同じデータならハッシュ値(暗号)は同じになるはずです。異なっている場合はダウンロードに失敗しているか、どこかで変更されている可能性があります。

ハッシュ値が同じ場合は、「あー良かった良かった。ちゃんとダウンロードできてるね!」となるわけですね~。

f:id:bookreadkun:20180421134204p:plain

<和訳>

ブロックチェーンでのハッシュ化

ブロックチェーンでは、ブロックが繋がっていますが、ブロックごとにその一つ前のブロックをハッシュ化したハッシュ値(暗号)が含まれています。

 

先ほども書きましたが、ハッシュ値というのは元のデータの値が少しでも異なると全然違う値になります。(←これ大事)

ということは、ブロックチェーンのとあるブロックを改ざんした場合は元々のブロックのハッシュ値とは異なります。その次のブロックには「一つ前のブロックのハッシュ値」があるため、改ざんしたことがバレてしまいます。

(つまり、一つのブロックを改ざんすると、そのブロックのハッシュ値を含む次のブロックも改ざんし、その次も・・・となるので、正しいチェーンにマイニングで追いつくのが大変なんですなぁ・・・)

f:id:bookreadkun:20180421142433p:plain

 

f:id:bookreadkun:20180421142553p:plain

<和訳>

データ構造の説明

データ構造とは、そのままではありますが、データを格納する方法の一つです。ここで重要なのは「ポインタ」と「連結リスト」です。

ポインタとは他のデータ(アドレス)の場所を指すものです(例えば上図のData Structureにおいて、とあるRecordを見た後に次のRecordのアドレスを指し示します。この役割をポインタが担います。まあ要するに次の観測場所の住所を教えてくれるものとでも思ってもらえればいいかなと思います。)

連結リストとは、ポインタによって互いに繋がったブロックのことです。

ポインタ内に次の観測場所の住所があり、次の観測場所にもポインタがあり・・・最後の観測場所に辿り着く(最後の観測場所にはポインタはなし。nullと表記されます)という流れです。

 

こういう仕組みがブロックチェーンにもあるわけですね~。

f:id:bookreadkun:20180421153126p:plain

<和訳>

以上に述べたようにハッシュ化はブロックチェーン技術において、大切な技術となります。このハッシュ化を理解することが、ブロックチェーンを理解する上での第一歩になります。

 

TXIDってなんなんだろう?

TXIDとは、取引データ(送金額、受信アドレスなど)をハッシュ化した文字列で表されたトランザクションIDのことです。

例えばZaifからコインチェックへ送金するとします。そのときに送金額などを入力して送金ボタンを押すと思いますが、その際に出てくるトランザクションのIDのことです。

 

f:id:bookreadkun:20180421154356p:plain

<和訳>

マークルツリーとはなんだろう?

マークルツリーはデータをブロックチェーンに安全かつ効率的に記録するために使用されるデータ構造です。(ツリー構造の説明は書いていないので省きます)

 

トランザクションは一度にすべて一気にハッシュ化されるわけではありません。上記のツリー構造の一番下の部分にトランザクションがあります。トランザクション1~8をハッシュ化し、ハッシュ化したもの同士を今度はハッシュ化します。それを永遠に続けていって最終的には一つのハッシュ値になるのです。(ちなみに一番上のハッシュ値を「ルート」、中間のハッシュ値を「枝」、一番下のハッシュ値を「葉」といいます。)

f:id:bookreadkun:20180421163449p:plain

<和訳>

マークルツリーの何がいいんだ?面倒じゃん。と思うかもしれませんが、それにはそれなりに理由があります。

マークルツリー構造を利用することで、ブロックチェーンのデータを全部ダウンロードする必要がなくなるわけです。一番上のルートハッシュがあれば、その下に繋がっているハッシュを伝ってトランザクションを確認することができます(上図)。

f:id:bookreadkun:20180421165547p:plain

<和訳>

通常はマークルツリーのルートハッシュは以下のものと共にブロックヘッダに含まれています。

 

  • 一つ前のブロックのハッシュ値
  • タイムスタンプ
  • Nonce(ノンス)
  • ブロックのバージョンナンバー
  • 現在の採掘難易度のtarget(このtargetより小さい値を下回ればマイニング成功)

マークルツリーとハッシュは、コンセンサスアルゴリズムと並んでブロックチェーン技術の最も重要な分野でもあります。

 

終わりです。

長かった(笑)

まあここまで書いておいてなんですが、要はブロックチェーンの中身を数字や文字の羅列に暗号化して、それをなんか便利な形(マークルツリー)で管理してみた~!なんかその便利な形で保管されていると、ブロックチェーンに参加するときに今までのブロックチェーン全てをダウンロードする必要ないみたいよ~便利だね~!という感覚でも良いかと思います。

ブロックチェーンは改ざん不可能で解読もできないと当たり前のように言われてはいますが、その中身はこんなにも複雑になっているんだな~。

 

また色々勉強してシェアしていきたいと思います。

では!

 

「読者になる」ボタンも押していただけると嬉しいです。