This article has been translated from English to Japanese.

ビットコインのマイニングについて掘り下げる前に、暗号通貨の基礎となるある概念について簡単に説明しておく必要がある。

ビットコインやその他の暗号通貨の仕組みを本当に理解するためには、まず「ハッシュ化」という概念を理解することが重要である。

「ハッシュ」という言葉を見ると、アメリカで人気の朝食メニューであるハッシュ・ブラウンを思い浮かべる人もいれば、スヌープ・ドッグのような大麻濃縮製品を思い浮かべる人もいるかもしれない。

Wrong kind of hash

今回のレッスンでは、異なる種類のハッシュについてお話しようと思う。

専門的な概念だが、ぜひ理解しておいてほしいので、わかりやすく説明しよう。

ハッシュの概念に精通していることは、ビットコインのマイニングの仕組みを理解するためにも必要である(次のガイドで説明する)。そのため、これらのレッスンを飛ばさないでほしい。

ハッシュ化とは?

ハッシュ化とは、あらゆる形式のデータを固定長のユニークな文字列に変換する暗号化の手法である。

暗号化とは、外部の監視者から安全な通信を行うための技術の実践と研究である。インターネット時代においては、暗号化はコンピュータの情報や「データ」を保護するために使用される。

暗号通貨の「暗号」は暗号化を意味することは明らかである。

ハッシュ化は暗号化の基礎的な部分である。そして暗号通貨における「暗号」の背後で重要な役割を果たしている。

簡単に言えば、ハッシュ化とは、ハッシュ関数に任意の長さのテキストを入力し固定長の出力を生成することである。

Hash Function

データのサイズ、種類、長さに関わらず、あらゆるデータは「ハッシュ化」することができる。

生成されるハッシュは常に同じ長さである。

以下の例では、SHA-1ハッシュ関数を使用しているため、「入力」の長さに関わらず、「出力」は常に40文字の長さになる

Hashing Example - Hello

Hashing Example - BabyPips.com

Hashing Example - i

以下に、3つの例を簡単に比較してみよう。

入力 ハッシュ
Hello f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0
BabyPips.com 8c8780d0b70c5ef42a534846cc042629cf07a440
ca73ab65568cd125c2d27a22bbd9e863c10b675d

「入力」が異なっても、3つのハッシュはすべて40文字の長さであることに注目してほしい。

この特定の例では、固定長は40文字であり、これは使用される特定のハッシュ関数(「SHA-1」)によって決定される。これは後ほど説明する。

現時点では、他のハッシュ関数では異なる固定長が出力される可能性があることを知っておいてほしい。ほとんどのハッシュ関数は、40文字よりも長い固定長である。

ハッシュはデジタル指紋のような役割を果たす。

ユニークなデータは常に同じハッシュを生成する。

例えば、「Hello」という文字列をハッシュ関数に100万回通した場合、100万回とも上記のハッシュ値が生成される。

「Hello」という単語の場合、そのSHA-1ハッシュは常に次のようになる。

f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0

そして、「Hello」という文字列のみがこのハッシュ値を生成する。

たとえ「Hello」を「hello」に変更するだけでも、ハッシュ関数はまったく異なるハッシュ値を生成する。

これが、ハッシュがデジタルの「指紋」と呼ばれる理由である。

指紋が個人に固有であるように、ハッシュ値も特定の入力データに固有である。

A hash is like a fingerprint

ハッシュ値を元に戻すことはできない。

ハッシュ関数への入力は「事前像」と呼ばれる。しかし、話を簡単にするために、ここでは「入力」という言葉を使うことにする。

ハッシュ関数の出力は「ハッシュ値」または「ダイジェスト」、あるいは単に「ハッシュ」と呼ばれる。

ハッシュ関数は、一方向の動作をするように設計されている。

Hash Function is One-Way

ハッシュ関数は一方向関数であるため、出力である「ハッシュ」から入力である「プレイメージ」を明らかにすることはできない。

つまり、ハッシュ値だけが与えられた場合、そのハッシュ値が表す元のデータ(「プレイメージ」)を解読することはできない。

ハッシュ関数は不可逆ハッシュを生成する。

不可逆とは、ハッシュ値だけが与えられても、元のデータが何であったかを特定できないことを意味する。これにより、元のデータは安全かつ不明のまま保持される。

ハッシュ関数とは?

ハッシュ関数とは、任意の長さの入力データを、特定のアルゴリズムを使用して実行される固定長の出力に変換する数学的演算である。

アルゴリズムとは、ソフトウェアプログラムによって実行される計算を行うための段階的な一連の指示である。

入力が1文字、単語、完全な文章、書籍の1ページ、または書籍全体であるかは問題ではない。これが任意の部分である。

各入力は、固定長の英数字文字列として表現されるユニークな出力を生成する。

英数字とは、文字と数字の両方で構成されているものを意味する。

有用なハッシュ関数は、入力がどのようなものだったかに関する手がかりを隠蔽する

例えば、入力が長かったか短かったか、数字または文字が含まれていたかなどを判断することは不可能でなければならない。また、入力の文字を1文字だけ変更しても、出力は大幅に異なるものになるはずである。

一般的なハッシュ関数

すべてのハッシュ関数は、同様の方法で動作する。データを入力すると、ハッシュ関数がそのデータを「無作為化」し、ハッシュを出力する。

一般的なハッシュ関数には以下のようなものがある。

  • MD-5: Message Digest 5 (MD5) は一般的なハッシュ関数である。 以前は安全であると考えられていたが、現在ではハッカーがアルゴリズムの解読方法を発見しており、数秒で解読が可能である。
  • SHA:Secure Hash Algorithm (SHA)は、ハッシュ関数の別のタイプである。SHAにはいくつかのバリエーションがあり、SHA-0、SHA-1、SHA-2、SHA-3の4つのファミリーに分類される。一般的に、数字が大きいほどリリースが新しく、アルゴリズムの安全性も高い。

当社の目的に関して言えば、今現在知っておくべきハッシュ関数はセキュアハッシュアルゴリズム(SHA)のみである。より具体的には、SHA-2ファミリーであり、その中にはSHA-256という特別なメンバーが含まれている。

SHA-256は、文字列を常に同じ長さ(64文字の英数字)の別の文字列に変換するハッシュ関数である。これは256ビットに相当し、これが名称の「256」の由来である。

ビットコインシステムのいくつかの部分で使用されるハッシュ関数であるため、特別な関数である。この関数については、今後のレッスンで詳しく説明する。現時点では、SHA-256がハッシュ関数の1つであり、ビットコインで使用されていることを知っておくだけでよい。

入力がハリー・ポッターの1ページであろうと、シリーズ全巻であろうと、SHA-256ハッシュ関数の出力は常に同じ長さで、64文字の英数字で表示される。

それでは、暗号化におけるハッシュの仕組みについて見てみよう。