暗号化ハッシュ関数 (CHF) は 1980 年代から存在しており、暗号化、データ整合性検証、データベースのインデックス作成、およびその他のさまざまなドメインで広く有用性があります。
暗号ハッシュ関数を計算する場合、任意の長さのデータが入力され、対応する関数がそれを固定長の出力値に変換します。 この変換には、一般にハッシュと呼ばれる入力データのさまざまなセグメントにさまざまな操作を適用することが含まれます。 結果の出力はハッシュ値と呼ばれ、操作自体はハッシュ関数と呼ばれます。
実例は、P2Pダウンローダーで頻繁に使用されるMD5アルゴリズムで、128ビットの長さを特徴としています。 ユーザーは、ダウンロードしたファイルのハッシュ値をソースから提供されたハッシュ値と比較できます。一致する場合は、ファイルの整合性が疑われることを示します。
もう一つの一般的なアプリケーションは、Webサイトでのパスワード認証です。 ユーザーのパスワードを保護するために、ほとんどのプラットフォームでは、プレーンテキストのエントリではなくハッシュパスワードが保存されます。 ユーザがログインすると、システムは入力されたパスワードのハッシュ関数を計算し、ユーザ名に関連付けられた保存された値と比較します。 暗号化ハッシュ関数の不可逆的な性質により、ハッカーがデータベースのハッシュ値を入手した場合でも、パスワードの復号化から保護されます。
「SHA256ジェネレーター」を検索すると、同じアルゴリズムを使用するさまざまなWebサイトが、同様の入力テキストに対して同じハッシュ値を一貫して生成していることがわかります。
さらに、入力テキストの大文字と小文字を変更すると、アバランシェ効果と呼ばれる、まったく異なる出力ハッシュ値が得られます。 次の特性は、暗号化ハッシュ関数のセキュリティを測定します。
前述の例では、盗まれたハッシュ値からユーザーのパスワードを再構築することは非常に困難です。 暗号ハッシュ関数内の複雑な操作と情報圧縮は、リバースエンジニアリングを妨げ、その一方向の性質を強調します。
第 2 のプリイメージ抵抗: 初期入力で同じハッシュ値を生成する別の入力値を特定するのは困難です。 **この機能は、弱い衝突抵抗と呼ばれます。
衝突耐性: 同一のハッシュ値を生成する 2 つの異なる値を検出することは困難であり、暗号化ハッシュ衝突と呼ばれます。 この特性は、強い衝突抵抗を示します。
前述のMD5を例にとると、異なるファイルが同じハッシュ値を生成することは可能ですか? 答えはイエスですが、確率は非常に低いです。 この現象は暗号化ハッシュの衝突として知られており、偶発的に、または意図的な攻撃によって発生する可能性があります。 MD5 アルゴリズムの標準的な衝突確率は約 1/2¹²⁸ であり、偶発的な発生の可能性は非常に低くなります。 ただし、MD5 は、2 つの異なる平文に対して同じハッシュ値を生成するのは比較的簡単であるため、意図的な衝突攻撃に対して脆弱であると考えられています。 したがって、MD5 アルゴリズムは、セキュリティを伴わないタスクには引き続き使用できますが、セキュリティ認証タスク (キー認証やデジタル署名など) には適しなくなりました。
イーサリアムは暗号ハッシュ関数KECCAK-256を使用していますが、この関数はもともとSolidityで「sha3」と書かれていたため、多くの人がSHA-3と誤って認識しています(Celestiaの創設者の博士論文を含む)。 混乱のため、後にKeccak256に改名されました。
MetaMaskは、その操作にさまざまな暗号化ハッシュ関数を利用します。
ビットコインはSHA-256暗号化ハッシュ関数を利用します。 ここでは、ビットコインマイナーがマイニング活動中に暗号ハッシュ関数に関与するプロセスを解明します。
ビットコインマイニングでは、マイナーはトランザクションデータをブロックヘッダーと統合し、タイムスタンプや乱数などのメタデータとともにトランザクションの詳細で構成されます。 マイナーは、ブロックヘッダー内の乱数(「ナンス」と呼ばれる)を繰り返し調整することで、特定の基準を満たすことを目指し、特定のSHA-256ハッシュを生成しようとします。 SHA-256ハッシュ関数の性質を考えると、準拠したハッシュを発見する唯一の方法は、異なる乱数で継続的に実験することです。
要件を満たすハッシュを見つけると、マイナーはそのブロックをビットコインネットワークのブロックチェーンに追加し、報酬として指定された量のビットコインを受け取ることができます。 このプロセスは「マイニング」と呼ばれ、指定された基準を満たすハッシュ値を識別するために、ハッシュ関数を継続的に実行します。
マイニングにとどまらず、暗号ハッシュ関数は、ブロック間のリンクを確立し、ブロックチェーンシステム内のトランザクションの変更を追跡する上で極めて重要です。 ハッシュポインタは、データのインデックス作成、取得、およびデータ変更の検証を容易にするデータ構造として機能します。 ブロックチェーン内の各トランザクションは、ブロックに編成される前にハッシュ化されます。 その後、ハッシュ ポインターは、前のブロックのデータのハッシュを格納することで、各ブロックをその前部に接続します。 ブロックの相互接続された性質により、ブロックチェーン内の不変性が保証されます。トランザクションを変更すると、個別のハッシュ値になり、その結果、後続のすべてのブロックのハッシュが変更されます。 たとえば、2つのブロックで構成されるブロックチェーンを考えてみましょう。
ブロック 1: トランザクション T1、T2、および T3 のハッシュが含まれます。
ブロック 2: トランザクション T4、T5、および T6 のハッシュと、ブロック 1 のハッシュを特徴としています。
個人がブロック 1 のトランザクション T1 を改ざんしようとした場合、ブロック 1 のハッシュ値を再調整し、ブロック 2 の新しい値を更新する必要があります。しかし、暗号ハッシュ関数の単方向およびプリイメージ耐性の性質により、ブロック2のハッシュ値に基づいてブロック1のトランザクションT1を反転させることは困難であることがわかります。
さらに、ブロック 2 がブロック 1 のハッシュ値を組み込んでいることを考えると、ブロック 1 を改ざんすると、結果的にブロック 2 のハッシュ値が変更されます。 そのため、ブロックチェーン内の変更のために、後続のすべてのブロックを同時に改ざんする必要があり、これは手ごわい作業です。 その結果、暗号ハッシュ関数は、ブロックチェーンデータの一貫性と整合性を効果的に維持します。
ブロックチェーンの領域では、暗号化ハッシュ関数はいくつかの重要な役割を果たします。
ブロックリンク:各ブロックのヘッダーには前のブロックのハッシュ値が含まれており、ブロックの接続されたチェーンが容易になり、改ざん防止の整合性が保証されます。
トランザクション検証:トランザクションデータはハッシュ化され、結果のハッシュ値がブロックに含まれ、トランザクションの信頼性と整合性が検証されます。
コンセンサスメカニズム:プルーフ・オブ・ワーク(PoW)コンセンサスメカニズム内で、マイナーはハッシュ関数を実行することで、難易度の要件を満たすナンス値を特定する必要があります。
2022年9月2日、ヴィタリックはTwitter(X)に質問を投稿し、ショアのアルゴリズムを使用する量子コンピューターが発明された場合、どの暗号ハッシュ関数が安全であり続けるかを尋ねました。
出典: ヴィタリックのツイート
彼は、ショアのアルゴリズムを利用できる量子コンピューターは、RSA(長年の公開鍵暗号システム)や、因数分解、楕円曲線、未知の次数のグループに基づくあらゆるものを突破できると指摘しました。 ただし、ハッシュ値 (SHA-256 など) は量子コンピューティングのコンテキストではうまく機能しますが、セキュリティは多少低下し、より長いハッシュ値の使用が推奨されます。
SHA-256などの暗号化ハッシュ関数はどの程度堅牢ですか? SHA-256 の「256」は、2 の 256 乗を表しており、具体的に把握するのが難しいほど膨大な数値です。
ソース: 3Blue1Brown
それにもかかわらず、3Blue1Brownは、暗号ハッシュ関数のセキュリティを理解するのに役立つ鮮やかなアナロジーを提示しました:地球上の40億人の個人が、世界中のGoogleの1,000倍の計算能力に相当する並外れた計算能力を持つコンピューターを所有しているシナリオを想像してください。 同時に、天の川銀河に似た40億個の惑星と40億個の銀河を持つ宇宙を想像してみてください。 このような極端な状況下でも、「SHA-256出力ハッシュ値を生成するために必要な特定の入力」を正確に推測できる確率が40億分の1になるまでには、5000億年以上かかるでしょう。
暗号化ハッシュ関数 (CHF) は 1980 年代から存在しており、暗号化、データ整合性検証、データベースのインデックス作成、およびその他のさまざまなドメインで広く有用性があります。
暗号ハッシュ関数を計算する場合、任意の長さのデータが入力され、対応する関数がそれを固定長の出力値に変換します。 この変換には、一般にハッシュと呼ばれる入力データのさまざまなセグメントにさまざまな操作を適用することが含まれます。 結果の出力はハッシュ値と呼ばれ、操作自体はハッシュ関数と呼ばれます。
実例は、P2Pダウンローダーで頻繁に使用されるMD5アルゴリズムで、128ビットの長さを特徴としています。 ユーザーは、ダウンロードしたファイルのハッシュ値をソースから提供されたハッシュ値と比較できます。一致する場合は、ファイルの整合性が疑われることを示します。
もう一つの一般的なアプリケーションは、Webサイトでのパスワード認証です。 ユーザーのパスワードを保護するために、ほとんどのプラットフォームでは、プレーンテキストのエントリではなくハッシュパスワードが保存されます。 ユーザがログインすると、システムは入力されたパスワードのハッシュ関数を計算し、ユーザ名に関連付けられた保存された値と比較します。 暗号化ハッシュ関数の不可逆的な性質により、ハッカーがデータベースのハッシュ値を入手した場合でも、パスワードの復号化から保護されます。
「SHA256ジェネレーター」を検索すると、同じアルゴリズムを使用するさまざまなWebサイトが、同様の入力テキストに対して同じハッシュ値を一貫して生成していることがわかります。
さらに、入力テキストの大文字と小文字を変更すると、アバランシェ効果と呼ばれる、まったく異なる出力ハッシュ値が得られます。 次の特性は、暗号化ハッシュ関数のセキュリティを測定します。
前述の例では、盗まれたハッシュ値からユーザーのパスワードを再構築することは非常に困難です。 暗号ハッシュ関数内の複雑な操作と情報圧縮は、リバースエンジニアリングを妨げ、その一方向の性質を強調します。
第 2 のプリイメージ抵抗: 初期入力で同じハッシュ値を生成する別の入力値を特定するのは困難です。 **この機能は、弱い衝突抵抗と呼ばれます。
衝突耐性: 同一のハッシュ値を生成する 2 つの異なる値を検出することは困難であり、暗号化ハッシュ衝突と呼ばれます。 この特性は、強い衝突抵抗を示します。
前述のMD5を例にとると、異なるファイルが同じハッシュ値を生成することは可能ですか? 答えはイエスですが、確率は非常に低いです。 この現象は暗号化ハッシュの衝突として知られており、偶発的に、または意図的な攻撃によって発生する可能性があります。 MD5 アルゴリズムの標準的な衝突確率は約 1/2¹²⁸ であり、偶発的な発生の可能性は非常に低くなります。 ただし、MD5 は、2 つの異なる平文に対して同じハッシュ値を生成するのは比較的簡単であるため、意図的な衝突攻撃に対して脆弱であると考えられています。 したがって、MD5 アルゴリズムは、セキュリティを伴わないタスクには引き続き使用できますが、セキュリティ認証タスク (キー認証やデジタル署名など) には適しなくなりました。
イーサリアムは暗号ハッシュ関数KECCAK-256を使用していますが、この関数はもともとSolidityで「sha3」と書かれていたため、多くの人がSHA-3と誤って認識しています(Celestiaの創設者の博士論文を含む)。 混乱のため、後にKeccak256に改名されました。
MetaMaskは、その操作にさまざまな暗号化ハッシュ関数を利用します。
ビットコインはSHA-256暗号化ハッシュ関数を利用します。 ここでは、ビットコインマイナーがマイニング活動中に暗号ハッシュ関数に関与するプロセスを解明します。
ビットコインマイニングでは、マイナーはトランザクションデータをブロックヘッダーと統合し、タイムスタンプや乱数などのメタデータとともにトランザクションの詳細で構成されます。 マイナーは、ブロックヘッダー内の乱数(「ナンス」と呼ばれる)を繰り返し調整することで、特定の基準を満たすことを目指し、特定のSHA-256ハッシュを生成しようとします。 SHA-256ハッシュ関数の性質を考えると、準拠したハッシュを発見する唯一の方法は、異なる乱数で継続的に実験することです。
要件を満たすハッシュを見つけると、マイナーはそのブロックをビットコインネットワークのブロックチェーンに追加し、報酬として指定された量のビットコインを受け取ることができます。 このプロセスは「マイニング」と呼ばれ、指定された基準を満たすハッシュ値を識別するために、ハッシュ関数を継続的に実行します。
マイニングにとどまらず、暗号ハッシュ関数は、ブロック間のリンクを確立し、ブロックチェーンシステム内のトランザクションの変更を追跡する上で極めて重要です。 ハッシュポインタは、データのインデックス作成、取得、およびデータ変更の検証を容易にするデータ構造として機能します。 ブロックチェーン内の各トランザクションは、ブロックに編成される前にハッシュ化されます。 その後、ハッシュ ポインターは、前のブロックのデータのハッシュを格納することで、各ブロックをその前部に接続します。 ブロックの相互接続された性質により、ブロックチェーン内の不変性が保証されます。トランザクションを変更すると、個別のハッシュ値になり、その結果、後続のすべてのブロックのハッシュが変更されます。 たとえば、2つのブロックで構成されるブロックチェーンを考えてみましょう。
ブロック 1: トランザクション T1、T2、および T3 のハッシュが含まれます。
ブロック 2: トランザクション T4、T5、および T6 のハッシュと、ブロック 1 のハッシュを特徴としています。
個人がブロック 1 のトランザクション T1 を改ざんしようとした場合、ブロック 1 のハッシュ値を再調整し、ブロック 2 の新しい値を更新する必要があります。しかし、暗号ハッシュ関数の単方向およびプリイメージ耐性の性質により、ブロック2のハッシュ値に基づいてブロック1のトランザクションT1を反転させることは困難であることがわかります。
さらに、ブロック 2 がブロック 1 のハッシュ値を組み込んでいることを考えると、ブロック 1 を改ざんすると、結果的にブロック 2 のハッシュ値が変更されます。 そのため、ブロックチェーン内の変更のために、後続のすべてのブロックを同時に改ざんする必要があり、これは手ごわい作業です。 その結果、暗号ハッシュ関数は、ブロックチェーンデータの一貫性と整合性を効果的に維持します。
ブロックチェーンの領域では、暗号化ハッシュ関数はいくつかの重要な役割を果たします。
ブロックリンク:各ブロックのヘッダーには前のブロックのハッシュ値が含まれており、ブロックの接続されたチェーンが容易になり、改ざん防止の整合性が保証されます。
トランザクション検証:トランザクションデータはハッシュ化され、結果のハッシュ値がブロックに含まれ、トランザクションの信頼性と整合性が検証されます。
コンセンサスメカニズム:プルーフ・オブ・ワーク(PoW)コンセンサスメカニズム内で、マイナーはハッシュ関数を実行することで、難易度の要件を満たすナンス値を特定する必要があります。
2022年9月2日、ヴィタリックはTwitter(X)に質問を投稿し、ショアのアルゴリズムを使用する量子コンピューターが発明された場合、どの暗号ハッシュ関数が安全であり続けるかを尋ねました。
出典: ヴィタリックのツイート
彼は、ショアのアルゴリズムを利用できる量子コンピューターは、RSA(長年の公開鍵暗号システム)や、因数分解、楕円曲線、未知の次数のグループに基づくあらゆるものを突破できると指摘しました。 ただし、ハッシュ値 (SHA-256 など) は量子コンピューティングのコンテキストではうまく機能しますが、セキュリティは多少低下し、より長いハッシュ値の使用が推奨されます。
SHA-256などの暗号化ハッシュ関数はどの程度堅牢ですか? SHA-256 の「256」は、2 の 256 乗を表しており、具体的に把握するのが難しいほど膨大な数値です。
ソース: 3Blue1Brown
それにもかかわらず、3Blue1Brownは、暗号ハッシュ関数のセキュリティを理解するのに役立つ鮮やかなアナロジーを提示しました:地球上の40億人の個人が、世界中のGoogleの1,000倍の計算能力に相当する並外れた計算能力を持つコンピューターを所有しているシナリオを想像してください。 同時に、天の川銀河に似た40億個の惑星と40億個の銀河を持つ宇宙を想像してみてください。 このような極端な状況下でも、「SHA-256出力ハッシュ値を生成するために必要な特定の入力」を正確に推測できる確率が40億分の1になるまでには、5000億年以上かかるでしょう。