【仮想通貨】ハッシュ関数(SHA-256)について調べてみた【ブロックチェーン】

ビットコインなどの仮想通貨で使用されているハッシュ関数(hash function)という技術について調べてみました。

仮想通貨では、取引(トランザクション)のまとまり(ブロック)を繋いでいくこと(ブロックチェーン)によって、1つの台帳を作っていきます。

ブロックチェーンを構築していく際に、取引(トランザクション)や各ブロック間の参照を簡単に比較できるようにするため(改ざん検出・防止)、ハッシュ関数(hash function)という技術が用いられています。

仮想通貨では、いくつかあるハッシュ関数の中でも、SHA-256 という種類のものが使用されています。

ハッシュ関数とは?

ハッシュ関数(hash function)とは、任意長のメッセージを入力すると、そのメッセージを代表する固定長の値(ハッシュ値)を出力するような関数のことです。

固定長のハッシュ値は、コンピュータが処理しやすいような値(例えば、256 bit や 512 bit)に設定されていることが多いようです。

出力値が固定長なので、どのような長さのメッセージを入力したとしても出力サイズは一定になります。

ハッシュ関数には以下の3つの性質があります。

  1. 固定長の値を出力する
  2. 同一メッセージの入力に対しては同一のハッシュ値が出力される
  3. 入力値が大きい場合でも高速で変換できる

ハッシュ関数は、これらの特徴をもっているため、仮想通貨のブロックチェーン技術で使われています。

ハッシュ関数の安全性

ハッシュ関数の安全性として以下の3つがあります。

  1. 一方向性
  2. 第2原像計算困難性
  3. 衝突困難性

なにやらちょっと難しい言葉が並んでいますが、1つずつ簡単に説明していきます。

一方向性

一方向性(One-wayness)とは、「ハッシュ値から元のメッセージを求めることが難しい」という性質のことです。

ハッシュ関数は暗号化の技術なので、ハッシュ値から元のメッセージが簡単に求められてしまうと意味がないですよね。

第2原像計算困難性

第2原像計算困難性(Second Preimage Resistance)とは、「あるメッセージとそのハッシュ値が与えられたとき、同一のハッシュ値になる異なるメッセージを計算することが難しい」という性質のことです。

これは意味的には次の「衝突困難性」と一緒かなと思います。

衝突困難性

衝突困難性(Collision Resistance)とは、「同じハッシュ値になるような異なる2つのメッセージを求めることが難しい」という性質です。

ハッシュ値は固定長の値なので、メッセージ空間の方がハッシュ値空間より広くなります(メッセージ空間 > ハッシュ値空間)。

そのため、衝突(異なる2つのメッセージから同じハッシュ値が出力されること)は起こり得るのですが、それが簡単に求められてはまずいですよね。

SHA-256 とは?

SHA(Secure Hash Algorithm)とは、NIST によって米国基準として制定された SHS(Secure Hash Standard)アルゴリズムの総称です。

脆弱性対応などの改良がアルゴリズムに加えられ、「SHA-0」→「SHA-1」→「SHA-2」→「SHA-3」と変化していきています。

仮想通貨で使われている「SHA-256」は「SHA-2」に含まれます。

「SHA-256」は数値部分がハッシュ値のビット長を表しており、256 bit のハッシュ値を出力します。

ハッシュ値の具体値(Linux)

具体的に、メッセージを入力し、ハッシュ関数「SHA-256」を使って暗号化した際の出力値(ハッシュ値)を Linux のコマンドを使ってみてみたいと思います。

Linux で「sha256sum」コマンドを用いるとハッシュ値を確認できます。

7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069

ハッシュ値は、16進数で表示されています。なので、1文字が 4 bit となり、64文字出力されていることから、256ビットのハッシュ値となっていることが確認できました。

参考書籍

暗号化技術のすべて」という書籍を参考にしました。暗号化技術について広くまとめられており、また、最後に少しだけ ビットコインについての分かりやすい記載もありオススメです!

以上、仮想通貨で使われているハッシュ関数技術についてまとめてみました。

そのうち仮想通貨のどのような処理の中でハッシュ関数の技術が使われているかのついてもまとめてみたと思います。

関連記事

【仮想通貨】トランザクションについて調べてみた【ブロックチェーン】

ビットコインなどの仮想通貨では、取引をトランザクションで記述されます。 そのトランザクションの

記事を読む

【仮想通貨】時価総額のランキングを円(JPY)で見る方法。

ビットコインやイーサリアムなどの仮想通貨の時価総額のランキングを 円(YEN)で見れる分かりやすいサ

記事を読む

【ビットコイン】承認されたブロックを見てみる【ブロックチェーン】

ビットコイン(BitCoin)の公開台帳であるブロックチェーンについて、新たに承認されたブロックの情

記事を読む

【イーサリアム】日本円のチャートで比較する方法【イーサリアム・クラシック】

イーサリアム(Ethereum)は、2020年時点で、時価総額がビットコインに次ぐ第2位の仮想通貨で

記事を読む

【仮想通貨】デジタル署名について調べてみた【ブロックチェーン】

ビットコインなどの仮想通貨のブロックチェーンで用いられているデジタル署名(Digital signa

記事を読む

【ビットコイン】1ブロックに含まれる情報について調べてみた【マークル木】

ビットコインなどの仮想通貨では、トランザクション(取引)の束を「ブロック」という単位で扱い、「ブロッ

記事を読む

【仮想通貨】デジタル署名と公開鍵暗号の違いは!?

ビットコインなどの仮想通貨のブロックチェーン技術で用いられている「デジタル署名」「公開鍵暗号」につい

記事を読む

【仮想通貨】新しいトランザクション(取引)の追加方法【ブロックチェーン】

仮想通貨で用いられているブロックチェーン技術において、新しいトランザクション(取引)をどのように既存

記事を読む

【機械学習】 scikit-learn で不正解データを抽出する方法【Python】

Python の scikit-learn ライブラリを使って機械学習

【Python】 複数の辞書型の同じ key を持つ value を計算に用いる方法。

Python で、複数の辞書型を読み込んで、同じキー(key)を持つ数

【Python】 Series 型を dict(辞書型)に変換する方法。

Python で Series 型を dict(辞書型)に簡単に変換す

【Python】 DataFrame の特定の列で出現回数をカウントして降順でソートする方法。

Python で DataFrame 型の特定の列を指定して、対象列の

【テキストマイニング】 Amebaブログからデータ取得するための準備。

テキストマイニングを行うために、Ameba ブログ(アメブロ)のデータ

→もっと見る

PAGE TOP ↑