アーパボー(ARPABLE)
アープらしいエンジニア、それを称賛する言葉・・・アーパボー(商標登録6601061)
ブロックチェーン

ハッシュ値とは

ハッシュ値とは

ブロックチェーンでは、ハッシュ値がデータの整合性とセキュリティを確保するために多用されています。ハッシュ値とは、任意のデータを固定長の文字列に変換する技術で、元のデータを特定できない一方、わずかな変更でも大きく異なるハッシュ値を生成する特徴があります。

ブロックチェーンでは、ブロックヘッダのハッシュ値や、全トランザクションのハッシュ値(マークルルート)、さらにトランザクションスクリプトで使用される公開鍵ハッシュなどに活用されています。
また、公開鍵からアドレスを生成する際にもハッシュ値が用いられ、データの改ざんを防ぐ仕組みを提供しています。

ここでは、ブロックチェーンの基盤となっているハッシュ値に関して簡単に説明します。

ハッシュ関数とは

ハッシュ関数は入力したデータを一定のルールに従い異なるデータに変換する関数でブロックチェーンではSHA256やRIPEMD160等のハッシュ関数が使用されます。

ブロックチェーンではハッシュ関数は以下のような特徴を利用してます。

  • いかなる入力値に対してもハッシュ値は同じ長さのデータになる(固定長)
  • 出力値から入力値を導けない(不可逆性)
  • 入力値の微細な変化にも敏感に反応する(機密性)

ここで以下の図を使ってもう一度ハッシュ関数についておさらいしておきましょう。

このように入力値が大文字の”A”でも小文字の”nanami”でも全角の”七海パンダ五条”でも60ビット(4ビットの2進数15個分)固定長の値を返します。この性質は大きなデータを要約してデータサイズを圧縮したいときに利用できます。

また、出力された60ビットから入力値を逆算できないというう可逆性を持っているので第3社に知られたくない情報を隠すために利用されます。

また入力値が少しでも変化すると敏感に反応する、即ちそのハッシュ値がが大きく変化する性質を使用して元のデータが改ざんされてないかを検出するために使用されます。

ハッシュ化とは?

ハッシュ化とは、ある入力データをハッシュ関数に入力しハッシュ値にすることです。

例えば、「ブロックヘッダをハッシュ化して次のブロックのヘッダに書き込む」というような使われ方をします。

簡単なプログラムで確認してみよう。

ハッシュ関数を実際に使って上記3つの性質を確かめてみましょう。

Pythonに用意されている標準ライブラリ”hashlib”により、簡単にハッシュ関数を利用することができます。

以下のプログラムでは、ベースとなる文字列”NanamiPandaGojyo”に対して1桁の通し番号をつけてsha256でハッシュ化するのを5回繰り返しています。

特に説明する必要はないと思いますが、結果を見ると17文字の中のたった1文字が異なるだけでハッシュ値が大きく変わることがわかりますね。

プログラム

import hashlib

# define base text
base_text = “NanamiPandaGojyo”

# hashing ( base_text + number ) by sha256
for counter in range( 5 ):
    input_text= base_text + str( counter )
    hash= hashlib.sha256( input_text.encode( “UTF-8” ) ).hexdigest()
    print( input_text + “⇒” + hash, “\n” )

結果

NanamiPandaGojyo0⇒f6e075fca1a4496c05c945bc0086b680c2727c92fc2ad3af261519d90ce31061 

NanamiPandaGojyo1⇒b9706dc6226730f4e039b79fa16b2bf546a69f25caf78073c688873849e07227 

NanamiPandaGojyo2⇒f5ec78ae16f4b6e223ddfca7caaf26685eccb95fd9b2fa5a1c1429eaec64106b 

NanamiPandaGojyo3⇒466bbb7e0ef98033e59d42fb77f67ecbc4b94b1adaa2016c643351b9353a52e1 

NanamiPandaGojyo4⇒46054a1c36403d600cc46faad9906bb0129888a58df1134e75c0a2951e6e16b0 

以上

筆者プロフィール
ケニー狩野(中小企業診断士、PMP、ITコーディネータ)
キヤノン(株)でアーキテクト、プロマネとして多数のプロジェクトをリード。
現在、株式会社ベーネテック代表、株式会社アープ取締役、一般社団法人Society 5.0振興協会評議員ブロックチェーン導入評価委員長。
これまでの知見を活かしブロックチェーンや人工知能技術の推進に従事。趣味はダイビングと囲碁。
2018年「リアル・イノベーション・マインド」を出版。