ゼファーネットのロゴ

ブロックチェーンの基本を学ぶ–パート3:ハッシュ関数

日付:

画像

旅の第XNUMX部では、ハッシュ関数の目的を明らかにし、雪崩効果の乗り物を共有し、ブロックチェーンフィールド全体でハッシュが広く使用されていることを発見し、暗号化タイタンの衝突で一般的に使用されるXNUMXつのハッシュアルゴリズムを比較します。 。

ブロックチェーンにハッシュ関数が必要なのはなぜですか?

ブロックチェーンと暗号の愛好家として、あなたはハッシュをたくさん扱います。 ウォレットアドレス、トランザクションID、ブロックID –これらはすべてハッシュ関数の出力です。 ハッシュ関数は、トランザクションの順序に関してノードの決定論的な動作も提供するプリミティブです。 そのプリミティブは、ビットコインでいわゆるメルケルツリーを構築するために使用されます。RSKネットワークの場合はTreiを構築するために使用されます。

ハッシュはランダムな文字のセットのように見えます。 ただし、ハッシュはまったくランダムではありません。 この値は、コンピューターで読み取って解釈することを目的としているため、人間の読者にはほとんど意味がありません。 ブロックチェーンテクノロジーで使用する理由は、データの整合性とプライバシーを目的とした汎用性です。

  • ハッシュは、元のメッセージを非表示にして一意の文字列にエンコードすることでデータの整合性を保護し、ある意味で、すべてを透過的に保ちながら、ブロックチェーン上で最高の仮名の要素を作成します。

ハッシュアルゴリズムは、任意の入力を固定サイズの出力に変換する数学関数です。 暗号的に安全であり、同時にブロックチェーンテクノロジーで使用できるようにするには、ハッシュ関数が衝突耐性である必要があります。つまり、同じ出力を生成するXNUMXつの入力を見つけることは事実上不可能です。 ハッシュ関数は暗号化関数ですが、暗号化ではありません。 暗号化は、入力、暗号化式、キー、および暗号化された出力があるシステムで機能します。 暗号化された入力とキーを知ることにより、出力を復号化して元のメッセージを取得できます。 暗号化とは対照的に、ハッシュ関数は一方向性関数として機能します。 知っているのがハッシュだけの場合、元のメッセージを見つけることができません。 同様に、元のメッセージとハッシュアルゴリズムを持っている人は誰でも、同じハッシュを生成します。

画像

ソース - https://aboutssl.org/hashing-vs-encryption/

ハッシュの入力データは、33文字から米国議会図書館の32万冊のコンテンツ全体まで、任意の長さにすることができますが、出力は常に1バイト(SHA-64)または2バイト(SHA-0)です。 )長い離散数。 これは、4,294,967,295バイトのハッシュの場合は32〜0、9,223,372,036,854,775,807バイトのハッシュの場合は64〜10の数値です。 これは、サハラ砂漠XNUMXか所のすべての砂粒よりも可能性が高いです。 XNUMXつの異なる入力が同じハッシュになる可能性はわかっていますが、このイベントの確率は非常に小さいため、問題にはなりません。 ハッシュ関数出力の固定長を保持する機能は、ハッシュアルゴリズムの一部である圧縮関数によって提供されます。 新しいブロックチェーンノードが最初に実行中の残りのフルノードと同期する必要があるブロックチェーン自体と同様に、ハッシュ関数は決定論の原則によって下線が引かれます-同じ関数でハッシュされた同じメッセージは常に同じハッシュ結果を返します(いいえ場所や時間は関係ありません)。 安全なハッシュ関数の重要な側面は次のとおりです。入力のXNUMX文字だけを変更すると、結果のハッシュはまったく異なるものになります。 同時に、XNUMXつの似たようなハッシュは、入力が大きく異なります。

例:

単語のSHA-256ハッシュ くま is x しかし、単語のSHA-256ハッシュ is y。 単純な整数の違いに注意してください。

画像

ビットコインは、SHA-256アルゴリズムよりも安全なSHA-1ハッシュアルゴリズムを使用して、予測可能な量のCPU作業を必要とする方法で検証可能な「乱数」を生成します。 現在のターゲットよりも小さい値でSHA-256ハッシュを生成すると、ブロックが解決され、いくつかのコインが獲得されます。

前の部分からのリマインダー:

ビットコインブロックチェーンは、ブロックの命名にSHA-256ハッシュアルゴリズムを使用します。 次に、ブロック名とその全体的な履歴が、現在のブロックからの情報を含むハッシュを使用して新しいブロックに渡されます。 したがって、ブロック間でこの情報を共有することで、ビットコインブロックチェーンに記録されたデータの改ざん防止の証拠が作成されます。

ビットコインブロックヘッダーハッシュ、別名「ブロックハッシュ」は、ブロックヘッダーのdouble-SHA256ハッシュであり、以下に関する情報が含まれています。

  • 前のブロックのハッシュ
  • マークルツリーのハッシュ
  • Time
  • ターゲット
  • ノンス

次に、ブロックハッシュを使用して、マイニングされる次のブロックの前のブロックを識別します。

継続…

SHAは「SecretHashingAlgorithm」の略です。 これは単一のハッシュアルゴリズムではありませんが、非常に異なる関数のファミリーであり、現在、SHA-2とSHA-3のみの使用が推奨されています。 このハッシュ関数ファミリーは、米国標準技術研究所であるNISTによって管理されています。

ハッシュ関数の出力は常に、ゼロと0の9進単位のセットとして記述される離散数です。 通常、ハッシュは0進形式で表示されます。 したがって、10から15までの数字ではなく、XNUMXからfまでの数字です(「a」はXNUMX、「f」はXNUMX)。 そのため、トランザクションIDまたはウォレットアドレスは単なる数字ですが、その中にいくつかの文字を見つけることもできます。

SHAアルゴリズムはどのように機能しますか?

SHA-1は、以前に使用されたMD4およびMD5ハッシュアルゴリズムと構造が著しく類似しています。 SHA-1 = 160ビット、5x32ビットワード、各2バイト(標準からの定義)。 SHA-256でハッシュする場合、512とXNUMXで構成されたXNUMXビットまたはXNUMXビットの長さの文字列があります。

入力データは、使用されるSHA-256のバリエーションに応じて、ファイルが展開されるまで一度に512つずつ、ループを介して2ビットまたは512ビットの大きなデータブロックにソートされます。 メッセージがちょうどXNUMXつのブロックを満たすのに十分な大きさである場合(たとえば、XNUMXビット長)、ハッシュループはXNUMX回だけ実行されます。 これは、ハッシュ関数の最終出力がXNUMX回更新されることを意味します。 メッセージが長い場合は、より多くのループが必要です。 各ループは、新しいデータブロックをハッシュ関数に取り込みます。 次に、SHAまたはMDハッシュ関数の標準部分である圧縮関数に続いて、ループされたデータが圧縮されます。

圧縮関数は、このデータとメッセージの一部を受け取り、それを別の「n」値のセットに変換します。これは、メッセージ全体で繰り返されます。 この場合、ハッシュブロック内の潜在的なスペースとまったく同じ長さのメッセージがあるため、これはXNUMX回だけ発生します。 圧縮機能で内部状態を更新することをメルケルダウンガード構造と呼びます。

メッセージが512ビットブロックをXNUMXつだけ埋めるのに十分な長さでない場合は、パディングを使用する必要があります。 パディングとは、ブロック内に残っているスペースが、ブロック内のメッセージの長さを表すバイナリ表記で埋められることを意味します。 パディングスキームは、同じ長さのメッセージと同じまたは非常に類似した方法で終了するメッセージが同じパディング、つまり最終的なハッシュを共有しないことを保証します。

SHA-1とSHA2の違いは、わずかに異なる圧縮機能と長い内部状態にあります。 SHA-256の512ビットではなく1ビットまたは160ビットです。

SHA-1は160ビットで、かなり長いです。 これは、衝突の可能性(同じ結果にハッシュされる2つのメッセージに遭遇する可能性)が約80 ^ 12であることを意味します。 それは非常に長い時間で、およそ1万GPU年です。 しかし、SHA-2の圧縮機能はあまり良くなく、攻撃者はこれを60 ^ XNUMXに減らすことができます。これは、多くの時間とお金を持っている人々によってブルートフォースハッキングされる可能性があります。

SHA-2はSHA-1に似ていますが、圧縮機能がわずかに異なり、内部状態が長くなっています。 SHA-256では512ビットまたは2ビットであるため、開始点は2 ^ 128のようなブルー​​トフォース攻撃を試みることです。これは2 ^ 80をはるかに超え、さらに2 ^ 60を超えます。

衝突の危険性

ハッシュ関数のセキュリティで焦点を当てる重要なポイントは、衝突を引き起こす可能性です。 衝突とは、同じ値にハッシュされたXNUMXつの異なるメッセージを見つけた場合です。 意味–XNUMXつの異なる入力が同じハッシュフィンガープリントを共有します。 この衝突は、ランダムな事故またはブルートフォース推測攻撃によって発生する可能性があります。 ただし、多くのプロトコルでは、衝突は問題ではありません。 重要なのは、XNUMX番目のプレイメージに対する耐性です。 XNUMX番目のプリイメージは、攻撃者がメッセージのXNUMXつを選択できないことを除いて、衝突のようなものです。 代わりに、攻撃者は衝突するメッセージのペアを見つけるように求められます。最初のメッセージは攻撃者のターゲットによって設定されます(たとえば、 認証局によって生成された暗号証明書)。 したがって、XNUMX番目のプレイメージを見つけることは、衝突を見つけることよりもはるかに困難です。

SHA-1で構築された衝突

23年2017月2013日の衝突は、実際に攻撃を実行した最初の既知のケースにすぎませんでした。 XNUMX年に、 マーク・スティーブンス SHA-1衝突を作成するための理論的アプローチを概説した論文を発表しました。 2017年の衝突シミュレーションの最初のフェーズは、 PDFプレフィックス 任意の異なるビジュアルコンテンツを持つ1つのドキュメントを生成するように特別に作成されていますが、同じSHA-XNUMXダイジェストにハッシュされます。 この理論的な攻撃を実際に構築しながら、いくつかの計算上の課題を克服するために、シミュレーションチームは、Googleの技術的専門知識とクラウドインフラストラクチャを活用して、これまでに完了した最大の計算のXNUMXつである衝突を計算しました。

攻撃シミュレーションの計算スケール[1]:

  • 合計9,223,372,036,854,775,808千億(1)のSHA-XNUMX計算
  • 攻撃の最初のフェーズを完了するための6,500、XNUMX年のCPU計算(PDFファイルのプレフィックス生成)
  • 第110フェーズを完了するためのXNUMX年のGPU計算(第XNUMXブロックのほぼ衝突を生成し、完全な衝突につながる)

これらの数値は非常に大きいように見えますが、SHA-1の粉砕攻撃は、非現実的なブルートフォース攻撃よりも100,000万倍以上高速です。 

  • SHA-1は、1番目のプレイメージに対して依然として非常に堅牢であるように見えます。また、SHA-256を使用し、XNUMX番目のプレイメージ耐性に依存するプロトコルは、当面の間、安全に実行し続けることができます。 ただし、ビットコインで使用されるハッシュアルゴリズムであるSHA-XNUMXに移行することをお勧めします。
  • 2005年以降、SHA-1は資金の豊富な対戦相手に対して安全であるとは見なされていません。 2010年の時点で、多くの組織がその交換を推奨しています。
  • NISTは、1年にSHA-2011の使用を正式に非推奨にし、2013年にデジタル署名への使用を禁止しました。
  • マイクロソフトは、1年7月2020日に、WindowsUpdateのSHA-XNUMXコード署名サポートを終了しました。

おめでとう。 あなたはブロックチェーンのエキスパートになるための第XNUMXのステップを踏み出しました。

についての次のエピソードでお会いしましょう 51%の攻撃。

それまでは、Sovrynにとどまります!

このエピソードを読んで楽しんでいますか? に向かいます ブロックチェーンの初心者の基本的な知識を育むことを目的として、平易な英語で書かれた、ブロックチェーン技術に関する技術エピソードが満載のSovrynDojoデータベース。

ミッキーマラー
ソブリンウィキ

画像

タグ

ハッカー正午に参加

無料のアカウントを作成して、カスタムの読書体験のロックを解除します。

PlatoAi。 Web3の再考。 増幅されたデータインテリジェンス。
アクセスするには、ここをクリックしてください。

ソース:https://hackernoon.com/learn-the-blockchain-basics-part-3-hashing-functions-vt1435ow?source = rss

スポット画像

最新のインテリジェンス

スポット画像