ハッシュとは、さまざまなサイズの入力データから特定の出力を作成するプロセスを指します。これは、ハッシュ関数 (ハッシュ アルゴリズムとして実装) とも呼ばれる数式を使用して行われます。
すべてのハッシュ関数に暗号化の使用が含まれるわけではなく、この目的のために特別に設計されたハッシュ関数、つまり暗号通貨の基礎となるいわゆる暗号化ハッシュ関数のみが使用されます。その働きのおかげで、ブロックチェーンやその他の分散システムは、高レベルのデータ整合性とセキュリティを実現できます。
通常のハッシュ関数と暗号化ハッシュ関数はどちらも決定論的です。決定的であるということは、入力データが変更されない限り、ハッシュ アルゴリズムは常に同じ結果 (ダイジェストまたはハッシュとも呼ばれます) を生成することを意味します。
暗号通貨のハッシュ アルゴリズムは、関数が一方向に機能するように設計されています。つまり、計算を実行するために多大な時間とリソースを投資しない限り、データを逆の順序で返すことはできません。言い換えれば、入力から出力を作成するのは非常に簡単ですが、プロセスを逆にする (入力から出力を生成する) のは比較的困難です。入力値を見つけるのが難しいほど、ハッシュ アルゴリズムの安全性が高くなると考えられます。
ハッシュ関数はどのように機能するのでしょうか?
ハッシュ関数の種類が異なれば出力サイズも異なりますが、各ハッシュ アルゴリズムで可能な出力サイズは常に一定です。たとえば、SHA-256 アルゴリズムは 256 ビット形式でのみ出力を生成できますが、SHA-1 は常に 160 ビットのダイジェストを生成します。
これを説明するために、「Binance」と「binance」という単語を SHA-256 ハッシュ アルゴリズム (ビットコインで使用されているアルゴリズム) で実行してみましょう。
小さな変更 (最初の文字の場合) により、ハッシュ値が完全に異なることに注意してください。 SHA-256 を使用しているため、入力のサイズに関係なく、出力データは常に 256 ビット (または 64 文字) の固定サイズになります。これに加えて、これら 2 つの単語をアルゴリズムで何度実行しても、2 つの出力は一定であるため、変化しません。
同様に、同じ入力データを SHA-1 ハッシュ アルゴリズムで実行すると、次の結果が得られます。
SHA が Secure Hash Algorithms の頭字語であることは注目に値します。これは、SHA-0 や SHA-1 などのアルゴリズムと SHA-2 および SHA-3 グループを含む一連の暗号化ハッシュ関数を指します。 SHA-256 は、SHA-512 および他の類似物とともに SHA-2 グループの一部です。現在、SHA-2 グループと SHA-3 グループのみが安全であるとみなされます。
なぜこれが重要なのでしょうか?
従来のハッシュ関数には、データベース検索、大規模ファイルの分析、データ管理など、幅広い用途があります。さらに、暗号化ハッシュ関数は、メッセージ認証やデジタル フィンガープリンティングなどの情報セキュリティ アプリケーションで広く使用されています。ビットコインに関しては、暗号化ハッシュ関数はマイニング プロセスに不可欠な部分であり、新しいキーとアドレスの生成にも重要な役割を果たします。
ハッシュは、膨大な量の情報を扱うときにその可能性を最大限に発揮します。たとえば、ハッシュ関数を通じて大きなファイルまたはデータ セットを実行し、その出力を使用してデータの精度と整合性をすばやくチェックできます。これは、ハッシュ関数の決定論的な性質によって可能になります。つまり、入力は常に単純化された圧縮出力 (ハッシュ) になります。この方法により、大量のデータを保存して記憶する必要がなくなります。
ハッシュは、ブロックチェーン テクノロジーに関連して特に役立ちます。ビットコイン ブロックチェーン上ではハッシュを含むいくつかの操作が実行されますが、そのほとんどはマイニングです。実際、事実上すべての暗号通貨プロトコルは、トランザクションのグループをリンクしてブロックに圧縮し、暗号関係を作成してブロックのチェーンを効率的に構築するためにハッシュに依存しています。
暗号化ハッシュ関数
繰り返しますが、暗号化技術を使用するハッシュ関数は、暗号化ハッシュ関数として定義できることに注意してください。これを解読するには、力ずくで番号を選択する無数の試行が必要になります。暗号化ハッシュ関数を逆にするには、適切な出力が得られるまで試行錯誤して入力データを選択する必要があります。ただし、異なる入力が同じ出力を生成する可能性があり、その場合には衝突が発生します。
技術的に言えば、暗号化ハッシュ関数が安全であるとみなされるには、3 つのプロパティを満たす必要があります。それらは、衝突耐性、および第 1 および第 2 のプリイメージ検索耐性として説明できます。
各プロパティの説明を始める前に、そのロジックを 3 つの短い文にまとめてみましょう。
衝突耐性: 出力と同様のハッシュを生成する 2 つの異なる入力を見つけることは不可能です。
最初のプリイメージの検索に対する抵抗: ハッシュ関数を逆復元する (指定された出力から入力を見つける) ための方法またはアルゴリズムが存在しない。
2 番目のプリイメージの検索に対する抵抗: 最初のプリイメージと交差する 2 番目の入力を見つけることは不可能です。
耐衝突性
前述したように、異なる入力が同じハッシュを生成すると、衝突が発生します。したがって、誰かが衝突を検出するまで、ハッシュ関数は衝突耐性があるとみなされます。入力の数が無限で出力の数が限られているため、どのハッシュ関数でも衝突が常に存在することに注意してください。
したがって、ハッシュ関数を検出する確率が非常に低く、数百万年の計算が必要になる場合、ハッシュ関数は衝突耐性があります。このため、衝突のないハッシュ関数はありませんが、一部のハッシュ関数は非常に強力であるため、堅牢であると考えられます (たとえば、SHA-256)。
さまざまな SHA アルゴリズムのうち、グループ SHA-0 と SHA-1 は衝突が検出されたため、安全ではなくなりました。現在、最も安全で衝突耐性があると考えられているのは、SHA-2 グループと SHA-3 グループだけです。
最初の事前画像検索に対する耐性
このプロパティは、一方向性関数の概念と密接に関連しています。ハッシュ関数は、誰かが特定の出力を生成できる入力を見つけられる可能性が非常に低い限り、ファーストプリイメージ検索に耐性があると見なされます。
攻撃者は特定の出力に基づいて入力を推測する必要があるため、このプロパティは前のプロパティとは異なることに注意してください。このタイプの衝突は、同じ出力コードを生成する 2 つの異なる入力が、その生成に使用された入力データに意味を与えずに見つかった場合に発生します。
追加情報を開示することなく、メッセージの単純なハッシュでその信頼性を証明できるため、ファースト プリイメージの堅牢性はデータ セキュリティにとって貴重です。実際には、多くのサービス プロバイダーや Web アプリケーションは、パスワードをプレーン テキスト形式で使用するのではなく、パスワードから生成されたハッシュを保存して使用します。
二次プリイメージ検索に対する耐性
理解を簡単にするために、このタイプの安定性は他の 2 つの特性の間のどこかにあると言えます。 2 番目のプリイメージ攻撃は、既知の他の入力によって元々生成された出力を生成するために使用できる特定の入力を見つけることで構成されます。
つまり、2 番目のプリイメージ攻撃には衝突検出が含まれますが、この攻撃は、同じハッシュを生成する 2 つのランダムな入力を見つけるのではなく、もう一方の入力によって最初に生成されたハッシュを再作成するために使用できる入力を見つけることを目的としています。
したがって、衝突に耐性のあるハッシュ関数は、そのような攻撃にも耐性があります。後者は常に衝突を意味するからです。ただし、単一の出力を通じて単一の入力を検索する必要があるため、衝突耐性関数に対してファーストプリイメージ攻撃を実行する可能性は依然としてあります。
マイニング
マイニングにはハッシュ関数を使用して実行される多くのステップがあり、これには、残高のチェック、トランザクションの入力と出力のリンク、ブロック内のすべてのトランザクションのハッシュ化によるマークル ツリーの形成などが含まれます。しかし、ビットコイン ブロックチェーンが安全である主な理由の 1 つは、マイナーが最終的に次のブロックの正しいソリューションを見つけるためにできるだけ多くのハッシュ操作を実行する必要があるためです。
マイナーは、候補ブロックのハッシュを作成するときに、いくつかの異なる入力を考え出す必要があります。ハッシュ形式の出力が正しく生成され、特定の数のゼロで始まる場合にのみ、ブロックをチェックできます。ゼロの数によってマイニングの難易度が決まり、ネットワークのハッシュレートによって異なります。
この場合、ハッシュレートは、ビットコインのマイニングに投資したコンピューターの能力の量を表します。ハッシュレートが増加し始めると、ビットコイン プロトコルはブロックのマイニングに必要な平均時間が 10 分以内になるようにマイニングの難易度を自動的に調整します。少数のマイナーがマイニングの停止を決定し、ハッシュレートが大幅に低下した場合、マイニングの難易度は一時的に計算量を軽減するために調整されます (平均ブロック生成時間が 10 分に戻るまで)。
有効な出力として生成できるハッシュの数は限られているため (特定の数のゼロで始まる)、マイナーは衝突を探す必要がないことに注意してください。したがって、特定のブロックに対して考えられる解決策はいくつかあり、マイナーはマイニングの難易度によって決定されるしきい値に従って、そのうちの 1 つだけを見つけなければなりません。
ビットコインのマイニングは非常にコストのかかる作業であるため、マイナーがシステムを不正行為する理由はありません。これは重大な経済的損失につながるからです。したがって、ブロックチェーンに参加するマイナーが増えるほど、ブロックチェーンは大きくなり、より強力になります。
結論
ハッシュ関数が、特に膨大な量のデータを扱う場合に、コンピューター サイエンスの基本的なツールの 1 つであることは疑いの余地がありません。ハッシュ アルゴリズムを暗号化と組み合わせると、非常に多用途になり、セキュリティとさまざまな認証方法を提供できます。したがって、暗号ハッシュ関数はほぼすべての暗号通貨ネットワークにとって不可欠であるため、その特性と動作メカニズムを理解することは、ブロックチェーン技術に興味がある人にとって間違いなく役立ちます。
