ハッシュとは、可変サイズの入力から固定サイズの出力を生成するプロセスを指します。これは、ハッシュ関数と呼ばれる数式(ハッシュ アルゴリズムとして実装)を使用して行われます。

すべてのハッシュ関数が暗号化を使用するわけではありませんが、いわゆる暗号化ハッシュ関数は暗号通貨の中核をなしています。これにより、ブロックチェーンやその他の分散システムは、高いレベルのデータ整合性とセキュリティを実現できます。

従来のハッシュ関数と暗号ハッシュ関数はどちらも決定論的です。決定論的であるということは、入力が変更されない限り、ハッシュ アルゴリズムが常に同じ出力 (ダイジェストまたはハッシュとも呼ばれます) を生成することを意味します。

通常、暗号通貨のハッシュ アルゴリズムは一方向関数として設計されており、大量の計算時間とリソースを費やさなければ簡単に元に戻すことはできません。つまり、入力から出力を作成することは非常に簡単ですが、逆方向に進むこと (出力のみから入力を生成すること) は比較的困難です。一般的に、入力を見つけるのが困難であるほど、ハッシュ アルゴリズムはより安全であると見なされます。


ハッシュ関数はどのように機能しますか?

ハッシュ関数が異なれば出力のサイズも異なりますが、各ハッシュ アルゴリズムの出力サイズは常に一定です。たとえば、SHA-256 アルゴリズムは 256 ビットの出力しか生成できませんが、SHA-1 は常に 160 ビットのダイジェストを生成します。

例として、「Binance」と「binance」という単語を SHA-256 ハッシュ アルゴリズム (ビットコインで使用されているもの) にかけてみましょう。

SHA-256

入力

出力(256ビット)

バイナンス

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

バイナンス

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


小さな変更 (最初の文字の大文字と小文字の区別) によってハッシュ値がまったく異なる結果になったことに注意してください。ただし、SHA-256 を使用しているため、入力サイズに関係なく、出力は常に 256 ビット (または 64 文字) の固定サイズになります。また、2 つの単語をアルゴリズムに何回通しても、2 つの出力は一定のままです。

逆に、同じ入力を SHA-1 ハッシュ アルゴリズムに実行すると、次の結果が得られます。

SHA-1

入力

出力(160ビット)

バイナンス

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

バイナンス

e58605c14a76ff98679322cca0eae7b3c4e08936


注目すべきは、SHA という頭字語が Secure Hash Algorithms の略語であることです。これは、SHA-0 および SHA-1 アルゴリズムに加えて、SHA-2 および SHA-3 グループを含む暗号化ハッシュ関数のセットを指します。SHA-256 は、SHA-512 やその他のバリエーションとともに SHA-2 グループの一部です。現在、SHA-2 グループと SHA-3 グループのみが安全であると考えられています。


なぜそれらは重要なのでしょうか?

従来のハッシュ関数には、データベース検索、大容量ファイルの分析、データ管理など、幅広い用途があります。一方、暗号ハッシュ関数は、メッセージ認証やデジタルフィンガープリントなどの情報セキュリティアプリケーションで広く使用されています。ビットコインの場合、暗号ハッシュ関数はマイニングプロセスの重要な部分であり、新しいアドレスとキーの生成にも役割を果たします。

ハッシュの真の威力は、膨大な量の情報を扱うときに発揮されます。たとえば、大きなファイルやデータセットをハッシュ関数に通し、その出力を使用してデータの正確性と整合性をすばやく検証できます。これは、ハッシュ関数の決定論的な性質により可能になります。つまり、入力は常に単純化され、凝縮された出力 (ハッシュ) になります。このような技術により、大量のデータを保存して「記憶」する必要がなくなります。

ハッシュは、ブロックチェーン技術のコンテキストで特に役立ちます。ビットコイン ブロックチェーンには、ハッシュを伴う操作がいくつかあり、そのほとんどはマイニング プロセス内にあります。実際、ほぼすべての暗号通貨プロトコルは、ハッシュを使用してトランザクションのグループをリンクしてブロックに凝縮し、各ブロック間に暗号化リンクを生成して、実質的にブロックチェーンを作成します。


暗号ハッシュ関数

繰り返しになりますが、暗号化技術を採用したハッシュ関数は、暗号化ハッシュ関数として定義できます。一般に、暗号化ハッシュ関数を破るには、無数のブルートフォース攻撃が必要です。暗号化ハッシュ関数を「元に戻す」には、対応する出力が生成されるまで試行錯誤して入力を推測する必要があります。ただし、異なる入力からまったく同じ出力が生成される可能性もあり、その場合は「衝突」が発生します。

技術的には、暗号ハッシュ関数が効果的に安全であるとみなされるためには、3 つの特性に従う必要があります。これらは衝突耐性、原像耐性、第 2 原像耐性として説明できます。

それぞれのプロパティについて説明する前に、そのロジックを 3 つの短い文章で要約してみましょう。

  • 衝突耐性: 出力として同じハッシュを生成する 2 つの異なる入力を見つけることは不可能です。

  • 原像計算困難性: ハッシュ関数を「元に戻す」(与えられた出力から入力を見つける) ことが不可能。

  • 第二原像抵抗性: 指定された入力と衝突する 2 番目の入力を見つけることは不可能です。


衝突耐性

前述のように、衝突は異なる入力がまったく同じハッシュを生成するときに発生します。したがって、ハッシュ関数は、誰かが衝突を発見するまでは衝突耐性があると見なされます。可能な入力は無限ですが、可能な出力は有限であるため、どのハッシュ関数でも衝突は常に存在することに注意してください。

言い換えると、衝突が見つかる可能性が非常に低く、数百万年単位の計算が必要になる場合、ハッシュ関数は衝突耐性があると言えます。したがって、衝突のないハッシュ関数は存在しないにもかかわらず、耐性があると見なされるほど強力なハッシュ関数もあります (例: SHA-256)。

さまざまな SHA アルゴリズムのうち、SHA-0 および SHA-1 グループは衝突が見つかったため安全ではなくなりました。現在、SHA-2 および SHA-3 グループは衝突に耐性があると考えられています。


原像抵抗

原像暗号耐性の特性は、一方向関数の概念に関連しています。ハッシュ関数は、特定の出力を生成する入力を誰かが見つける可能性が非常に低い場合に、原像暗号耐性があると見なされます。

この特性は、攻撃者が与えられた出力を見て入力が何であったかを推測しようとするため、前の特性とは異なることに注意してください。一方、衝突は、同じ出力を生成する 2 つの異なる入力が見つかった場合に発生しますが、どの入力が使用されたかは関係ありません。

原像暗号耐性の特性は、情報を開示することなく、メッセージの単純なハッシュでその信憑性を証明できるため、データを保護する上で役立ちます。実際には、多くのサービス プロバイダーや Web アプリケーションは、プレーンテキストのパスワードではなく、パスワードから生成されたハッシュを保存して使用しています。


第二原像抵抗

簡単に言えば、第二原像暗号耐性は他の 2 つの特性の中間にあると言えます。第二原像暗号攻撃は、すでにわかっている別の入力と同じ出力を生成する特定の入力を見つけることができる場合に発生します。

言い換えると、第 2 原像攻撃では衝突を見つけますが、同じハッシュを生成する 2 つのランダムな入力を検索するのではなく、別の特定の入力によって生成された同じハッシュを生成する入力を検索します。

したがって、衝突に耐性のあるハッシュ関数は、第二原像攻撃にも耐性があります。第二原像攻撃は常に衝突を意味するからです。ただし、衝突耐性のある関数でも、単一の出力から単一の入力を見つけることを意味するため、原像攻撃を実行することは可能です。


鉱業

ビットコインのマイニングには、残高の確認、トランザクションの入力と出力のリンク、ブロック内のトランザクションのハッシュ化によるマークルツリーの形成など、ハッシュ関数を伴う多くのステップがあります。しかし、ビットコインのブロックチェーンが安全である主な理由の1つは、マイナーが最終的に次のブロックの有効なソリューションを見つけるために無数のハッシュ操作を実行する必要があるという事実です。

具体的には、マイナーは候補ブロックのハッシュ値を作成する際に、複数の異なる入力を試す必要があります。本質的には、特定の数のゼロで始まる出力ハッシュを生成した場合にのみ、ブロックを検証できます。ゼロの数がマイニングの難易度を決定し、ネットワークに割り当てられるハッシュ レートに応じて変化します。

この場合、ハッシュ レートは、ビットコインのマイニングにどれだけのコンピュータ パワーが投入されているかを表します。ネットワークのハッシュ レートが上昇すると、ビットコイン プロトコルは、ブロックのマイニングに必要な平均時間が 10 分近くになるように、マイニングの難易度を自動的に調整します。対照的に、複数のマイナーがマイニングを停止してハッシュ レートが大幅に低下すると、マイニングの難易度が調整され、マイニングが容易になります (平均ブロック時間が 10 分に戻るまで)。

マイナーは衝突を見つける必要がないことに注意してください。有効な出力として生成できるハッシュが複数あるためです (一定数のゼロで始まります)。したがって、特定のブロックには複数の可能な解決策があり、マイナーはマイニングの難易度によって決定されるしきい値に従って、そのうちの 1 つを見つけるだけで済みます。

ビットコインのマイニングはコストのかかる作業であるため、マイナーがシステムを不正に操作する理由はありません。不正操作は大きな経済的損失につながるからです。ブロックチェーンに参加するマイナーが増えるほど、ブロックチェーンはより大きく、より強力になります。


最後に

ハッシュ関数は、特に膨大な量のデータを扱う場合には、コンピューター サイエンスにおいて不可欠なツールであることに疑いの余地はありません。暗号化と組み合わせると、ハッシュ アルゴリズムは非常に多用途になり、さまざまな方法でセキュリティと認証を提供できます。このように、暗号化ハッシュ関数はほぼすべての暗号通貨ネットワークにとって不可欠なものであり、その特性と動作メカニズムを理解することは、ブロックチェーン テクノロジーに関心のある人にとって間違いなく役立ちます。