暗号におけるハッシュとは: SHA-256 と暗号ハッシュ関数の説明 (2026)
— By Tony Rabbit in Tutorials

暗号通貨におけるハッシュとは何ですか? SHA-256、暗号化ハッシュ関数、雪崩効果、ハッシュ チェーン、およびビットコイン マイニングの仕組みに関する完全ガイド (2026)。
ハッシュは、暗号業界全体をまとめるサイレント エンジンです。ビットコインブロックがマイニングされるたび、ウォレットでトランザクションに署名するたび、チェーンが改ざんされていないことをノードが検証するたびに、暗号化ハッシュ関数が重労働を行っています。ハッシュがなければ何もありません ブロックチェーン、ビットコインもイーサリアムも分散型金融もありません。それがなければスタック全体が崩壊します。
ハッシュはどこにでも存在するにもかかわらず、依然として暗号通貨で最も誤解されている概念の 1 つです。人々はしばしばそれを暗号化と混同し、ハッシュは元に戻せると思い込んだり、ハッシュを元に戻すことができると考えたりします。 SHA-256 は数学ではなく魔法として。実際には、暗号化ハッシュ関数は非常に特殊な種類の数学演算にすぎません。任意の入力を受け取り、元に戻すことも、予測することも、複製することも事実上不可能な固定長の出力を生成します。この単純な性質こそがブロックチェーンを不変にし、 作業証明 可能です。
このガイドでは、ハッシュ関数とは何か、ハッシュ関数を暗号的に安全にする 6 つのプロパティ、ビットコインが SHA-256 を選択した理由、イーサリアムが Keccak-256 を使用する方法、マイニングが内部で実際にどのように機能するか、ハッシュ衝突が天文学的に起こりにくい理由、およびポスト量子時代のハッシュの将来がどうなるかを正確に学びます。最後には、すべてのコイン、すべてのウォレット、すべてのスマート コントラクトを信頼できるものにする数学層を理解できるようになります。

ハッシュ関数とは簡単に言うと何ですか?
ハッシュ関数は、任意のサイズの入力を受け取り、それを決定論的アルゴリズムで実行し、固定サイズの出力を生成する数学的手順です。その出力は、コンテキストに応じて、ハッシュ、ダイジェスト、チェックサム、またはフィンガープリントと呼ばれます。暗号では通常、単にハッシュと言います。入力には、単一の文字、本全体、映画ファイル、またはシロナガスクジラのゲノムを使用できます。出力は常に同じ長さであり、SHA-256 の場合、その長さは 256 ビットで、通常は 64 個の 16 進文字として書き込まれます。
ハッシュ関数をイメージする最も簡単な方法は、ブラック ボックスを想像することです。一方の端に何かを落とすと、もう一方の端から文字と数字の文字列が落ちてきます。同じものを再度ドロップすると、常に同じ文字列が得られます。入力を 1 ビットでも変更すると、まったく異なる文字列が得られます。そして重要なことに、誰かが出力文字列を渡した場合、最初に何がドロップされたかを把握する効率的な方法はありません。この関数は一方向です。入力から出力に戻ることは簡単にできますが、出力から入力に戻ることは計算上不可能です。
数学的には、ハッシュ関数は、無限の入力空間 (任意の長さの任意のデータ) から有限の出力空間 (256 ビットの数値、およそ 10^77 SHA-256 の可能な値)。入力空間は無限で出力空間は有限であるため、理論的には複数の入力が同じ出力を共有する必要があります。これらの共有出力はコリジョンと呼ばれます。優れた暗号ハッシュ関数を使用すると、理論上は衝突が存在するとしても、そのような衝突を発見することは事実上不可能になります。
ハッシュ化は暗号化ではありません。この違いは、ほぼすべての初心者がつまずきます。暗号化は双方向です。キーを使用して暗号化し、キーを使用して復号化して元のメッセージを復元します。ハッシュは一方向です。キーはなく、復号化も行われず、ハッシュから元の入力を復元することはできません。ハッシュは検証、フィンガープリンティング、コミットメントのために行われます。暗号化は機密性と秘密の通信を目的としています。ブロックチェーンは暗号化よりもはるかに多くのハッシュを使用します。これは、暗号化とは秘密コードのことだと思っている多くの初心者を驚かせます。
暗号化ハッシュ関数の 6 つのプロパティ
すべてのハッシュ関数が暗号化に適しているわけではありません。 Python 辞書のインデックス付けに使用されるハッシュ関数は、10 億ドル規模のブロックチェーンを保護するにはあまりにも弱すぎます。暗号的に安全であるとみなされるには、ハッシュ関数が 6 つの特定のプロパティを満たす必要があります。これらのプロパティの 1 つでも壊れると、それに依存するセキュリティ モデル全体が悪用される可能性があります。
同じ入力は常に同じ出力を生成します。 1 年後の今日、火星で「hello」をハッシュすると、毎回まったく同じ 256 ビット値が得られます。
適切な入力のハッシュの計算は安価でなければなりません。最新の CPU は 1 秒あたり数百万の SHA-256 ハッシュを計算できます。これはマイニングと検証に不可欠です。
ハッシュ出力が与えられた場合、そのハッシュを生成する入力を見つけることは計算上不可能です。これは、データを隠すためにハッシュを有効にする一方向のプロパティです。
入力とそのハッシュが与えられた場合、同じハッシュを生成する別の入力を見つけることは不可能です。これにより、同じフィンガープリントを使用して偽の文書が置き換えられることを防ぎます。
同じハッシュを生成する 2 つの異なる入力を見つけることは不可能です。ここでは攻撃者が両方の入力を自由に選択できるため、2 番目のプリイメージ耐性よりも強力です。
入力の 1 ビットを変更すると、平均して出力ビットの半分が反転します。結果のハッシュは元のハッシュとはまったく無関係に見えるため、パターンベースの攻撃は無効になります。
これら 6 つのプロパティは連携して機能します。プリイメージ耐性と 2 番目のプリイメージ耐性は、照合するターゲット ハッシュをすでに持っている攻撃者から保護します。衝突耐性により、偶然同じ値にハッシュされる 2 つの入力のみを必要とする攻撃者から保護されます。雪崩効果により、ハッシュがその入力に関する構造情報を漏洩しないことが保証され、決定論的な特性により、ブロックが有効であるかどうかについてネットワーク全体が同意できるようになります。
SHA-256 は、20 年以上にわたって既知のすべての攻撃に対抗してきました。継続的な研究にもかかわらず、SHA-256 のこれら 6 つの特性のいずれかを破る実用的な方法は見つかっていません。その実績が、ビットコインが依然としてビットコインを使用している主な理由です。 ビットコインマイニング は構造的に安全なままです。
ハッシュ パイプライン: 入力、関数、出力
特定のアルゴリズムに入る前に、すべてのハッシュ関数が従うパイプラインをイメージするのに役立ちます。 3 つの段階があり、トランザクション、ブロック ヘッダー、パスワード、またはビデオ ファイル全体をハッシュする場合でも、それらは同じです。
入力は文字通り何でも構いません。シェイクスピアの作品全体、犬の JPEG、Linux カーネルのバイナリ、または単に「こんにちは」という単語。ハッシュ関数は入力の意味を気にしません。入力をバイトのシーケンスとして扱い、コンテキストに関係なくすべてのバイトに対して同じアルゴリズムを実行します。
ハッシュ関数自体は、固定された公開された決定論的なアルゴリズムです。 SHA-256 は、2001 年以降、NIST によって詳細が公開されています。誰でも、任意の言語で実装できます。このアルゴリズムは入力をブロック単位で処理し、一連の回転、加算、ビット単位の演算を通じてそれらを混合し、最終的な 256 ビットのダイジェストを生成します。アルゴリズムに秘密はありません。セキュリティは完全に数学的性質から来ており、その仕組みを隠すことではありません。
入力サイズに関係なく、出力は常に正確に 256 ビットです。 1 バイトの入力により 256 ビットのハッシュが生成されます。 1 ギガバイトの入力により 256 ビットのハッシュが生成されます。この固定サイズのプロパティにより、ハッシュが非常に便利になります。 ブロックチェーン システム: コンパクトで保存しやすい識別子に至るまで、あらゆるものをフィンガープリントできます。
SHA-256: ビットコインが使用するハッシュ関数
SHA-256 は Secure Hash Algorithm 256-bit の略です。これは米国国家安全保障局 (NSA) によって設計され、SHA-2 ファミリの一部として 2001 年に NIST によって公開されました。 SHA-2 ファミリには、SHA-224、SHA-384、SHA-512、およびいくつかのバリアントも含まれています。 SHA-256 はファミリーの中で最も広く導入されており、TLS 証明書や Linux パッケージ マネージャーから git コミット、そしてもちろんビットコインに至るまで、あらゆるもので使用されています。
サトシ・ナカモトは 2008 年にビットコインに SHA-256 を選択しました。当時、SHA-256 はすでに十分に研究され、成熟し、広く信頼されているアルゴリズムでした。 SHA-256 は 256 ビットの出力を生成し、衝突攻撃に対して約 128 ビットのセキュリティ レベルを提供します。これは、従来のコンピュータで実行可能なあらゆる攻撃を防ぐのに十分なセキュリティであり、ハードウェアが改良されたとしてもおそらく今後数十年間は十分に持続できるでしょう。
ビットコイン内部では、いくつかの場所で SHA-256 が使用されています。ブロックヘッダーはハッシュ化されて、 block hash、各ブロックの暗号化識別子です。トランザクション ID は SHA-256 ハッシュです。ビットコイン アドレスには公開キーのハッシュが含まれます。そして、
ブロック ヘッダーの merkle root は、ブロック内のすべてのトランザクションで SHA-256 を使用して計算されます。合計すると、ビットコイン ネットワーク全体で毎秒数十億の SHA-256 操作が発生します。
ビットコインはダブル SHA-256 と呼ばれる特定の構造も使用しており、多くの場合 SHA-256d と書かれます。これは、入力が一度ハッシュ化され、その後、結果のハッシュが再度ハッシュ化されることを意味します。その理由は、部分的には歴史的なものであり、部分的には防御的なものです。ダブル ハッシュは、SHA-256 などのシングルパス マークル ダムガルド ハッシュに影響を与える攻撃クラスである長さ拡張攻撃に対して、少量の保護を提供します。適切に構築された SHA-256 は実際には脆弱ではありませんが、サトシはベルトとサスペンダーのセキュリティとしてダブル ハッシュを追加しました。
文字列「hello」の SHA-256 ハッシュの例は次のようになります。 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824。この文字列は 64 個の 16 進文字長で、256 ビットをエンコードします。目に見えるパターン、入力のヒント、および読み取れる「hello」の圧縮がないことに注意してください。出力は完全に決定的であるにもかかわらず、ランダムに見えます。

ハッシュがビットコインマイニングをどのように強化するか
マイニングは、新しいビットコイン ブロックをチェーンに追加するプロセスです。マイニングの中心となるのは、単一の反復タスクです。SHA-256 でハッシュされたときに、特定の数値を下回る出力を生成する入力を見つけます。 target。近道はありません。マイナーは、有効とみなされるほど低いハッシュを生成する入力を見つけ出すことを期待して、1 秒あたり数兆件の入力をブルートフォースで処理しなければなりません。
ハッシュされる入力はブロックヘッダーです。ビットコイン ブロック ヘッダーは 80 バイトで、前のブロック ハッシュ、ブロック内のすべてのトランザクションのマークル ルート、タイムスタンプ、現在の難易度ターゲット、および 32 ビットが含まれます。 nonce。 nonce を除くすべては、基本的に特定のブロックに対して固定されています。マイナーの仕事は、ノンスを変更し続け、結果の 80 バイトのヘッダーをハッシュし、出力が目標を満たしているかどうかを確認し、満たしていない場合は再度ノンスを変更することです。繰り返す。永遠に。
SHA-256 には雪崩効果があるため、ノンスを 1 ビット変更すると、まったく異なるハッシュが生成されます。指定された nonce が有効なハッシュを生成するかどうかを知る唯一の方法は、実際にハッシュを計算することです。先に進む賢い数学はありません。これが与えるものです 作業証明 そのセキュリティ: マイニングを偽装することはできません。難しい方法でのみ行うことができます。
ターゲットは、マイニング パズルの難易度を制御します。ビットコインは、平均ブロック時間を 10 分に保つために、2,016 ブロック (約 2 週間) ごとにターゲットを調整します。マイナーがブロックを見つけるのが早すぎると、ターゲットが低くなり、難易度が上がります。遅すぎるとターゲットが上がり、難易度が下がります。の difficulty はターゲットから導き出された人間に優しい番号です。 2026 年、ビットコインの難易度は数百兆に達し、ネットワークの合計ハッシュレートは 1 秒あたり 500 エクサハッシュを超えます。これは、マイナーが集合的に 5 つのハッシュとそれに続く 20 のゼロのハッシュを毎秒試行することを意味します。
このプロセス全体については、ガイドで詳しく説明されています。 暗号通貨マイニングですが、結論は次のとおりです。ハッシュはパズルです。ビットコインは、暗号化という意味での暗号化によってではなく、十分な量の先行ゼロを含む SHA-256 ハッシュを見つけるための膨大な計算コストによって保護されています。そのコストが 51% 攻撃 健全なネットワークでは経済的に法外な費用がかかります。
ブロックのリンク方法: ハッシュ チェーン
ブロックチェーンという言葉は文字通りです。これはブロックのチェーンであり、チェーンはハッシュによって結合されています。すべてのブロックには、と呼ばれるフィールドが含まれています。 prev_block_hash、これは前のブロックのヘッダーの SHA-256 ハッシュです。この 1 つの設計の選択により、ブロックチェーンに有名な不変性が与えられます。
攻撃者がブロック 800,000 のトランザクションを変更したいとします。トランザクションを変更すると、そのブロックのマークル ルートが変更されます。マークル ルートを変更すると、ブロック ヘッダーが変更されます。ブロックヘッダーを変更すると、ブロックハッシュが変更されます。ただし、ブロック 800,001 は、ブロック 800,000 の元のハッシュを prev_block_hash フィールドに保存します。ブロック 800,001 は、その prev_block_hash が変更されたブロック 800,000 の実際のハッシュと一致しなくなったため、無効になります。
ブロック 800,001 を修正するには、攻撃者はブロックを再マイニングする必要があります。しかし、それによってブロック ハッシュが変更され、ブロック 800,002 が分割され、ブロック 800,003 が分割され、というようにチェーンの先端に至るまで続きます。履歴を書き換えるには、攻撃者は変更点以降のすべてのブロックのマイニング作業をすべてやり直す必要がありますが、一方、正直なネットワークは元のチェーンの上に新しいブロックをマイニングし続けます。正直なネットワークが攻撃者よりも多くのハッシュレートを持っている限り、攻撃者は決して追いつくことはできません。
これがハッシュチェーンの天才です。ブロックチェーンは誰かが守っているからといって不変ではありません。これを書き直すには、正直なネットワーク全体がリアルタイムで実行するよりも多くの SHA-256 作業をやり直す必要があるため、これは不変です。チェーンがブロックを超えて長くなると、そのブロックの書き換えコストが高くなります。そのため、ビットコイン取引は約 6 回の確認、つまり約 1 時間の累積プルーフ オブ ワークを経て最終的なものとみなされます。
マークル ツリーとトランザクション ハッシュ
各 Bitcoin ブロック内では、トランザクションはヘッダー内のフラット リストとして保存されません。それらは、マークル ルートと呼ばれる単一のハッシュに要約され、マークル ツリーと呼ばれるハッシュのバイナリ ツリーを使用して計算されます。これは、小さな 32 バイトの値を一度に数千のトランザクションにコミットできるハッシュの美しいアプリケーションです。
マークル ツリーは、各トランザクションをハッシュし、次にそれらのハッシュのペアを一緒にハッシュし、次にそれらの親ハッシュのペアをハッシュするということを、単一のルートが残るまで繰り返すことによって構築されます。ブロック内のトランザクションが変更されると、マークル ルートが変更されます。マークルルートが変更されると、ブロックハッシュが変更されます。したがって、マークル ルートをブロック ヘッダーに保存するだけで、ブロック内のすべての単一トランザクションを暗号的にコミットすることになります。
マークル ツリーのもう 1 つの大きな利点は、効率的な証明です。特定のトランザクションがブロックに含まれていることを証明するために、すべてのトランザクションをダウンロードする必要はありません。必要なのは、トランザクション自体と、トランザクションからルートまでのパスに沿った小さな兄弟ハッシュのセットだけです。これはマークル証明と呼ばれ、ライトクライアントを可能にするものです。専用のチュートリアルがあります マークルの木 さらに詳しく知りたい場合は、 を参照してください。しかし、本質的な考え方は、ハッシュを使用すると、膨大なデータ セットを 1 つの指紋に圧縮しながら、そのデータの個々の部分を効率的に証明できるということです。
イーサリアムのハッシュ関数: Keccak-256 対 SHA-3
ビットコインはSHA-256を使用します。イーサリアムは、と呼ばれる別のハッシュ関数を選択しました。 Keccak-256。ここでの名前付けは少し面倒で、多くの開発者を混乱させています。 Keccak は、2012 年の NIST SHA-3 コンペティションで優勝したアルゴリズムです。その後、NIST は、2015 年に SHA-3 として標準化する前に、パディング スキームに小さな調整を加えました。しかし、イーサリアムは、NIST が SHA-3 を最終決定する前に、元の Keccak バージョンをロックしました。したがって、イーサリアムの Keccak-256 は SHA3-256 に似ていますが同一ではなく、この 2 つは同じ入力に対して異なる出力を生成します。
イーサリアムはなぜ SHA-256 ではなく Keccak を選択したのですか? 2015 年にイーサリアムが発表されたとき、Kecchak は NIST によって推奨された新しい標準であり、次世代の暗号化ハッシュ関数と考えられていました。これは、スポンジ構造と呼ばれる根本的に異なる内部構造を使用しており、長さ延長攻撃や、SHA-2 に対して理論的に考えられるその他の弱点に影響されないように設計されています。 SHA-256 は実際には問題なく機能していますが、イーサリアムはより新しい設計に賭けることにしました。
Keccak-256 はイーサリアム全体で使用されています。公開鍵からイーサリアム アドレスを計算し、トランザクション ハッシュを生成し、アカウントの状態を保存するパトリシア マークル ツリーを強化し、イーサリアム仮想マシン内で KECCAK256 オペコード。開発者が記述するときに呼び出します。 スマートコントラクト。 Solidity では、関数 keccak256() は、イベント トピックの計算からマッピング キーの導出まで、あらゆる場所で使用されます。
オンライン SHA-3 計算機で文字列をハッシュし、それをイーサリアムが生成するものと比較すると、異なる結果が得られます。 SHA3-256 ではなく Keccak-256 実装を使用していることを確認してください。これは、新しい Solidity 開発者や Ethereum インテグレーターにとって、常にバグの原因となります。
ウォレットアドレスのハッシュ化
暗号通貨におけるハッシュの最もセキュリティ クリティカルな用途の 1 つは、ウォレット アドレスの導出です。新しいウォレットを生成すると、ソフトウェアは 秘密鍵、楕円曲線暗号を使用してそこから公開キーを導出し、その公開キーをハッシュしてアドレスを生成します。
ビットコインでは、アドレス生成パイプラインは次のようになります。 65 バイトの公開キーは SHA-256 でハッシュされ、32 バイトの中間値が生成されます。次に、その値が RIPEMD-160 で再度ハッシュされ、20 バイトの値が生成されます。バージョン バイトが先頭に追加され、4 バイトのチェックサム (別の二重 SHA-256 から派生) が追加され、全体が Base58Check でエンコードされて、次で始まるおなじみの文字列になります。 1、 3、または
ビットコインを受け取るときにコピー&ペーストする bc1 。
イーサリアムでは、プロセスはより単純ですが、概念的には同じです。 64 バイトの公開キーは Keccak-256 でハッシュされ、32 バイトのダイジェストが生成されます。そのダイジェストの最後の 20 バイトがイーサリアム アドレスとなり、接頭辞が付けられます。 0x。したがって、次のようなアドレスを見たとき 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045、公開キーの切り詰められた Keccak-256 ハッシュを見ています。
公開鍵をアドレスとして直接使用するのではなく、そもそもなぜハッシュするのでしょうか?理由は 3 つあります。まず、ハッシュ化によりアドレスが 65 バイトから 20 バイトに短縮され、コピー、貼り付け、表示がはるかに簡単になります。第 2 に、ハッシュ化により、楕円曲線暗号に将来欠陥が見つかった場合に備えて保護層が追加されます。たとえ誰かが公開鍵から秘密鍵を導出できたとしても、20 バイトのハッシュの背後にある公開鍵を見つける必要があり、これ自体が難しい問題です。 3 番目に、ハッシュによりアドレス形式が基礎となるキー暗号化から切り離され、アドレスの互換性を損なうことなくプロトコルで署名スキームを交換できるようになります。
雪崩効果: 実際の例
アバランシェ効果とは、入力の 1 ビットを反転すると、出力ビットの約半分がスクランブルされる特性です。これを具体的にするために、2 つのほぼ同一のメッセージと、それらが生成する SHA-256 ハッシュを見てみましょう。入力はちょうど 1 文字だけ異なりますが、出力は目に見えるパターンを共有していないことに注意してください。
The quick brown fox jumps over the lazy dogd7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592The quick brown fox jumps over the lazy dog.ef537f25c895bfa782526529a9b63d97aa631564d5d789c2b765448c8635fb6cこれが、部分ハッシュをヒントとして使用できない理由です。誰かが SHA-256 ハッシュの最初の 10 文字を見せたとしても、ハッシュの残りの部分に関する情報は実質的にゼロです。各ビットは独立しています。雪崩効果は、マイナーが段階的に作業できない理由でもあります。「ほぼ適切な」ナンスを見つけて、それをわずかに調整する方法はありません。すべての nonce は有効か無効のいずれかであり、それを知る唯一の方法は完全なハッシュを計算することです。
セキュリティの観点から見ると、雪崩効果により、ハッシュを同じに保ちながらデータを偽造することが不可能になります。チェーンを壊さずにトランザクションで 1 ドルの金額を変更したいですか?あなたはできません。新しいトランザクションは大きく異なる値にハッシュされ、マークル ルートが変更され、ブロック ハッシュが変更され、その後のチェーン全体が無効になります。
ハッシュ衝突とそれが事実上不可能である理由
ハッシュ衝突とは、2 つの異なる入力が同じハッシュ出力を生成することです。 SHA-256 は無限の入力空間を有限の出力空間にマッピングするため、 2^256 可能な値、衝突は数学的に存在する必要があります。問題は、それらが存在するかどうかではなく、誰かがそれを見つけることができるかどうかです。
番号 2^256 は直感に反するほど大きいです。おおよそです 1.16 x 10^77。観測可能な宇宙には、 10^80 原子。推定値があります 10^24 宇宙の星。したがって、256 ビットのハッシュ空間は、観測可能な宇宙のすべての原子の重要な部分に相当します。
誕生日のパラドックスのおかげで、N ビット出力を持つハッシュ関数内のランダムな衝突を見つけるには約 2^(N/2) の操作は平均的です。 SHA-256 の場合、これは約 2^128 の操作。たとえ現在、1 秒あたり約 5 エクサハッシュを実行している地球上のすべてのビットコイン マイナーが、マイニングではなく SHA-256 衝突を見つけることに専念したとしても、衝突を見つけるには現在の宇宙年齢の何十億倍もかかるでしょう。
もっと劇的に言うと、太陽は燃料を使い果たし、約 50 億年後には赤色巨星に変わります。宇宙自体は 10^100 年以内に熱による死を経験する可能性があります。これらのイベントは両方とも、誰かが現在のテクノロジーと SHA-256 衝突を総当たり攻撃するずっと前に発生します。これは、暗号学者がプロパティが「計算上実行不可能」であると言うときの意味です。それは厳密な数学的な意味で不可能ではなく、私たちが想像できる物理的な時間スケール内で不可能なだけです。
SHA-256 の前身である SHA-1 は、2017 年に Google の SHAttered プロジェクトが長年の研究と大規模なコンピューティング投資を経て、初めて実用的な SHA-1 衝突を生成したときに衝突攻撃を受けました。 SHA-256 には、何桁も大きなセキュリティ マージンがあり、同じ種類の攻撃に対して脆弱であるとは考えられていません。根本的な数学的ブレークスルーが出現しない限り、SHA-256 は何十年も安全であり続けるはずです。

SHA-256 vs Keccak-256 vs Blake3 vs RIPEMD-160
暗号で使用される暗号ハッシュ関数は SHA-256 だけではありません。異なるブロックチェーンとプロトコルは、速度、セキュリティマージン、ハードウェア互換性、設計思想に基づいて異なる機能を選択します。以下は、暗号通貨ユーザーにとって最も関連性の高い 4 つのものを並べて比較したものです。
ブロックハッシュ、マイニング、アドレスに使用されます (RIPEMD-160 を使用)。暗号通貨で最も実証済みのハッシュ。ビットコイン マイニング ASIC は SHA-256 に固有です。
アドレス、TX ハッシュ、EVM オペコードに使用されます。 NIST 調整前のバージョン。 SHA3-256とは異なります。長さを伸ばす攻撃に耐性がある。
非常に高速で並列化可能。一部の L2、ZK ロールアップ、および最新のプロトコルで使用されます。多くの場合、ソフトウェアでは SHA-256 よりも 5 ~ 10 倍高速です。
ビットコイン公開鍵ハッシュを 256 ビットから 160 ビットに縮小するために使用されます。小さくて古いですが、SHA-256 と組み合わせると安全であると考えられます。
その他の注目すべき言及には、SHA-256 よりもメモリ負荷を高めるためにライトコインとドージコインで使用される Scrypt が含まれます。 Zcash で使用される Equihash もメモリに負荷がかかります。 Cardano は、Blake3 の前身である Blake2b を使用します。 Monero は、CPU に優しく、ASIC に耐性があるように設計された RandomX を使用します。設計の選択には、ほとんどの場合、速度、セキュリティ、ハードウェアの公平性の間のトレードオフが関係します。
ハッシュのためのその他の暗号の使用例
ハッシュはマイニングやアドレスだけを目的としたものではありません。これは、暗号スタック全体で数十の微妙かつ重要な方法で使用されます。探し始めると、いたるところにハッシュが見つかります。
ハッシュされたタイムロック契約 (HTLC): ライトニング ネットワークとアトミック スワップを動作させるメカニズムは、ハッシュのプリイメージを明らかにすることに依存しています。アリスはハッシュで資金をロックしますが、ボブはプリイメージを公開することによってのみ資金を請求できます。これにより、2 者はお互いを信頼することなく、チェーン全体でアセットをアトミックに交換できます。
マークル証明: ライトウォレット、ロールアップ、クロスチェーンブリッジはすべてマークル証明を使用して、ブロック全体をダウンロードせずにトランザクションがブロックに含まれていることを検証します。検証者に必要なのは、トランザクション、いくつかの兄弟ハッシュ、マークル ルートのみです。証明は小さく、検証が速く、暗号的に健全です。
パスワードの約束: プロトコルが値を公開せずにコミットする必要がある場合、ハッシュがそのツールとなります。アリスが出版 sha256(password) をチェーンに繋ぎ、後にパスワードを明らかにして彼女がそのパスワードを知っていたことを証明しました。これは、NFT ミント、オンチェーン ゲーム、分散型ランダムビーコンで使用されるコミット公開スキームの基礎です。
コンテンツ アドレッシング: IPFS はハッシュを使用してコンテンツをアドレス指定します。 IPFS 上のファイルの URL は、文字通りそのファイルのハッシュです。内容が変わればアドレスも変わります。これにより、取得した内容が最初に公開されたものであることが保証され、サイレント改ざんの可能性はありません。
デジタル署名: トランザクションに署名する場合、トランザクション全体に直接署名するわけではありません。トランザクションのハッシュに署名します。これはより効率的であり、署名スキームに対する特定の数学的攻撃を回避します。すべてのブロックチェーン上のすべての署名は、内部的にはハッシュの署名です。
決定論的ウォレット: 単一のシード フレーズから複数のアドレスを導出する BIP32 標準は、ハッシュ ベースのメッセージ認証コードである HMAC-SHA512 に依存しています。階層的な決定論的なウォレット エコシステム全体は、反復されたハッシュに基づいています。
ゼロ知識の証明: Plonk や Stark などの最新の ZK システムは、Fiat-Shamir 変換内でランダム オラクルとしてハッシュ関数を使用します。ハッシュ化により、インタラクティブな証明システムが非インタラクティブな証明システムに変わり、これがオンチェーン ZK 証明を実用的なものにします。
ハッシュの限界と未来
SHA-256 は 20 年以上にわたって主力製品であり、壊れる兆候はありません。しかし、暗号化は決して立ち止まることはありません。 3 つの主な開発が、暗号通貨におけるハッシュの将来を形作っています。
1 つ目はポスト量子の質問です。グローバーのアルゴリズムを実行する十分な大きさの量子コンピューターは、N ビット ハッシュの総当たり検索をおよそ 2^(N/2) の操作。 SHA-256 の場合、衝突に対してはセキュリティ レベルが 128 ビットから 128 ビットに、プリイメージ攻撃に対しては 256 ビットから 128 ビットに低下します。 128 ビットのセキュリティは依然として非常に強力であると考えられているため、はるかに脆弱な楕円曲線署名とは異なり、SHA-256 は当面は量子攻撃者に対して安全です。
暗号に関するより大きな懸念は、ハッシュ関数ではなく署名スキームです。ビットコインとイーサリアムの両方が依存している ECDSA と Schnorr の署名は、Shor のアルゴリズムを介した量子攻撃に対して脆弱です。多くのプロトコルは現在、ポスト量子の将来に向けて格子ベースおよびハッシュベースの署名を検討しています。 SPHINCS+ のようなハッシュベースの署名は、基礎となるハッシュ関数のセキュリティのみに依存し、すでに暗号の大部分を保護しているのと同じプリミティブを活用するため、特に興味深いものです。
2 番目の発展は、より新しく高速なハッシュ関数の台頭です。特に Blake3 は非常に高速で並列化が可能で、最新のマルチコア ハードウェアに適しています。一部の新しいチェーン、ZK ロールアップ、およびデータ可用性レイヤーは、パフォーマンス上の理由から SHA-256 ではなく Blake3 を採用しています。 SHA-256 は、ビットコイン互換性と ASIC に優しいマイニングでは引き続き主流ですが、他のレイヤーは多様化しています。
3 番目の開発は、ハッシュとゼロ知識暗号化のより深い統合です。 Poseidon や Rescue などの ZK 対応ハッシュ関数は、ZK プルーフ システムで使用される算術回路内で効率的になるように特別に設計されています。生のソフトウェアでは SHA-256 よりも遅くなりますが、知識がゼロの場合に証明するのははるかに高速です。 ZK ロールアップと ZK アプリケーションが成長するにつれて、SHA-256 や Keccak-256 と並んで ZK に適したハッシュを採用するチェーンがさらに増えることが予想されます。
よくある質問
SHA-256 は 2026 年でも安全ですか?
はい。世界中の暗号学者による 20 年以上の厳しい調査にも関わらず、SHA-256 に対する実際的な攻撃は見つかっていません。最もよく知られている衝突攻撃には約 2^128 の演算が必要ですが、これは古典的または短期的な量子コンピューターが達成できる量をはるかに超えています。 SHA-256 は、少なくとも今後数十年間は安全であると考えられています。
ハッシュ化と暗号化の違いは何ですか?
ハッシュは一方向であり、固定長の出力を生成します。キーはなく、ハッシュから元の入力を復元する方法もありません。暗号化は双方向です。キーを使用してメッセージを暗号化し、後でキー (または関連キー) を使用して復号化し、元のメッセージを復元します。ハッシュはフィンガープリントと検証に使用されます。暗号化は機密性と秘密の通信に使用されます。
ハッシュを元に戻すことはできますか?
SHA-256 のような暗号化ハッシュ関数には対応しません。プリイメージ耐性特性は、ハッシュ出力が与えられた場合、それを生成する入力を見つける効率的な方法がないことを意味します。唯一の一般的な方法はブルート フォースです。SHA-256 の場合、平均で約 2^256 回の操作が必要になります。これは、古典的なコンピューターでは計算上不可能です。
ビットコインで SHA-256 が使用されるのはなぜですか?
2008 年にサトシ・ナカモトがビットコインを設計したとき、SHA-256 はすでに NIST によって公開され、よく研究された成熟した標準でした。これは既知の弱点のない強力な 256 ビット出力を提供し、ソフトウェアでの実装が効率的であり、後に ASIC ハードウェアでの実装も非常に効率的になります。 SHA-256 はあらゆる攻撃に耐え続け、サトシの選択を正当化しました。
ハッシュ衝突とは何ですか?
ハッシュの衝突は、2 つの異なる入力が同じハッシュ出力を生成する場合に発生します。ハッシュ関数は無限の入力空間を有限の出力空間にマッピングするため、数学的に衝突が存在する必要があります。 SHA-256 の場合、衝突を見つけるには平均で約 2^128 の操作が必要と推定されていますが、これは現在計算上実行不可能であると考えられています。 MD5 や SHA-1 などの古いハッシュ関数では実際の衝突が実証されているため、セキュリティ目的では使用されなくなりました。
Keccak-256 は SHA-3 と同じですか?
いいえ、非常に密接な関係がありますが。 Keccak は 2012 年に NIST SHA-3 コンペティションで優勝しましたが、NIST は 2015 年に SHA-3 を最終決定する前にパディング スキームをわずかに調整しました。イーサリアムは調整前にオリジナルの Keccak バージョンをロックしていたため、イーサリアムの Keccak-256 は同じ入力に対して SHA3-256 とは異なる出力を生成します。これはイーサリアム開発者にとってよくあるバグの原因です。
ハッシュはランダムですか?
いいえ、ハッシュは完全に決定的です。同じ入力は常に同じ出力を生成します。ただし、出力には目に見えるパターンがないという意味でランダムに見え、入力を少しでも変更すると、一見無関係な出力が生成されます (雪崩効果)。この擬似ランダム性により、ハッシュは多くの暗号アプリケーションにとって有用になります。
結論
ハッシュは、暗号業界全体を可能にする静かな基本的なプリミティブです。すべてのトランザクション、すべてのブロック、すべてのアドレス、すべての署名、すべてのマークル証明は、その機能を実行する暗号化ハッシュ関数に依存しています。 SHA-256 はビットコインを保護します。 Keccak-256 はイーサリアムを保護します。 Blake3、RIPEMD-160、Poseidon などがエコシステム全体で専門的な役割を果たします。暗号化ハッシュ関数の 6 つの特性 (決定性、速度、プリイメージ耐性、2 番目のプリイメージ耐性、衝突耐性、および雪崩効果) は、ブロックチェーンに不変性を与え、マイニングのコストを高め、ウォレット アドレスを安全に共有できるようにするものです。
暗号通貨ユーザーにとって良いニュースは、スタックのこの層が圧倒的な実戦テストを受けていることです。 SHA-256 は 20 年以上の攻撃に耐え、依然としてセキュリティ マージンが非常に大きいため、これを破るには太陽系に存在するよりも多くのエネルギーが必要となります。業界がポスト量子暗号化、ZK フレンドリーな証明、新しい高性能設計へと進化するにつれて、ハッシュは適応し続けます。しかし、基本的な洞察は変わりません。あらゆるデータの小さく決定論的な一方向のフィンガープリントは、分散型信頼のためにこれまでに発明された最も強力な暗号化ツールです。
次回、次で始まる 16 進数の長い文字列が表示されたときは、
ブロックチェーン エクスプローラーで 0x を実行すると、それが何であるか、なぜ重要なのかが正確にわかります。 256 ビットのハッシュは単なる数値ではありません。これは、その背後にあるデータが変更されていないこと、チェーンが書き換えられていないこと、および使用しているトラストレス システムが主張どおりの動作を行っていることを数学的に約束するものです。