web-dev-qa-db-ja.com

データと共に送信されるハッシュはなぜ安全なのですか?

ハッシュ値は、安全でないチャネルを通じて送信されたデータの整合性を検証する場合にも役立ちます。受信したデータのハッシュ値は、送信されたデータのハッシュ値と比較して、データが変更されたかどうかを判断できます。 ソース

データ送信で使用される一般的なアプローチは、送信者が一方向ハッシュアルゴリズムを使用してデータの一意のフィンガープリントを作成することです。ハッシュはデータと共に受信側に送信されます。データのハッシュは再計算され、受信者によって元のハッシュと比較されて、データが転送中に失われたり変更されたりしていないことを確認します。 ソース

一部のデータのハッシュが計算されてデータと一緒に送信される場合、攻撃者はデータを変更できず、ハッシュを再計算できないため、受信者は賢明ではありませんか?

5
spottedmahn

ソースは包括的な概念を説明しており、完全に誤解を招くのではなく、おそらく少し曖昧です。 「raw」形式のデータと一緒に送信されるハッシュは、改ざん攻撃の影響を確実に受けやすいため、次のいずれかを行う必要があります。

  • ハッシュ値を帯域外で共有する:簡単な例は、ダウンロードリンクの横にあるWebページのファイルのハッシュサムを表示するWebサイトからファイルをダウンロードすることです(アウトここでの帯域外チャネルとは、別の通信チャネル内で提供されている、または別のWebサーバーで提供されているWebページコンテンツです。ファイルのダウンロードに成功したら、ファイルのハッシュを個別に計算し、ハッシュを比較して整合性を確保します。これは、オペレーティングシステムイメージなどの重要なファイルの一般的な方法です。
  • データと共に送信されたハッシュを認証します:これは、と呼ばれるものを使用して行われますハッシュメッセージ認証コード(HMAC)、メッセージに「完全性」と「信頼性」の両方のセキュリティサービスを提供します。このトピックについては多くの詳細な回答があります ここ
8
zyk

あなたの情報源は誤解を招くものです(Microsoftは誤解を招きます。あなたはこれを引用しました:

ハッシュ値は、安全でないチャネルを介して送信されたデータの整合性を検証するのにも役立ちます

したがって、技術的にはdataが安全でないチャネルを介して送信された場合に役立つと述べています。ハッシュの送信方法は指定しません。あなたが完全に正しい:攻撃者がデータを改ざんでき、それに加えてハッシュを送信する場合、それらはハッシュ値も改ざんできます。

したがって、ハッシュは安全な方法で送信する必要があります。有用な部分は、この短いハッシュ値(ほんの数バイト)を使用して、安全なチャネルで比較し、マルチギガバイトのデータファイルが正しいことを確認できることです。たとえば、電話で誰かと話し、ハッシュ値を比較して(相手の声を知っていて、だれも音声のなりすましができないと信頼している場合)、大きなファイルを確認できます。

2番目の引用では、セキュリティについては何も触れられておらず、変更されていないことを確認しているだけです。つまり、送信エラーによって変更された可能性があります。

3
Luc

一部のデータのハッシュが計算されてデータと一緒に送信される場合、攻撃者はデータを変更できず、ハッシュを再計算できないため、受信者は賢明ではありませんか?

ハッシュされるだけのデータストリームでは、そうすることができます。

これを軽減したい場合は、ハッシュに署名したり、フィールドに署名を含めたりするなど、これを検出せずに実行できないようにする必要があります。次に、ハッシュが一致する場合、メッセージは改ざんされていないことが検証されますand署名を検証できます。

1
Pedro