2017-03-17 16 views
1

私は1Gファイルをブラウザの1Mbの1024チャンクに分割し、すべてのチャンクのSHA1を取得し、このハッシュを一時的に保存します。最後にすべてのチャンクをハッシュした後、以前に収集したすべてのSHA1ハッシュのSHA1を実行します(ハッシュのハッシュを行います)。次に、この「最終的な」ハッシュをサーバーに送信します。複数のsha1ハッシュのSha1ハッシュ - >ファイルを識別するための安全?

このハッシュはサーバー上のファイルを識別するために安全ですか? (安全な接続があり、sha1が衝突しないと仮定して)

複数のハッシュのハッシュを行うのは悪い考えですか?

+1

はい、なぜですか?あなたは同じハッシュで偽造から守っているのですか、あるいは2つのファイルが異なるかどうかを判断するだけですか?最初のケースでは、SHA1は現在のベストプラクティスではSHA256またはSHA-512を使用するだけでは不十分です。 2番目のケースでは、1つのSHA1で十分ですが、SHA-256に移行することをお勧めします。 – zaph

答えて

0

これは動作するはずです。 SHA-1がcollision freeであると仮定すると、2つの異なるファイルに対して、少なくとも1つのハッシュが互いに異なります。したがって、「最終的な」ハッシュも異なるでしょう。

一般に、ハッシュハッシュはセキュリティを向上させません。より多くのセキュリティを必要とする場合は、SHA-256を使用してください。

+0

リンクを読むと、第1段階の攻撃を完了するための6,500年間のCPU計算と、第2段階を完了するためのGPL計算の 110年の実質的なコンピュータ電源が必要であることがわかります。これは実行可能な攻撃ですか?そうした攻撃は、SHA1が実際に衝突安全であることを証明しています。 – zaph

+1

私はこれを読んだ。 SHA1は理論的には何年も壊れており、今では衝突を起こしました。それは壊れています。 時間の支出はあなたと私にとっては多分問題ですが、かなりのCPUとGPUを持っている人もいます。したがって、セキュリティを必要とする場合は、新しいプロジェクトにSHA1を使用しないでください。セキュリティを気にせず、内部使用のために指紋を欲しい場合は、偶然に衝突することはないので、SHA1を使用することができます。 – AbcAeffchen

+1

SHA1の使用は、セキュリティの必要性によって異なります。これは、認証のために壊れていると見なされますが、Gitのようなファイルの一意性については考慮されません。確かにSHA-256はSHA1よりも良い選択ですが、SHA1は依然として多くの用途に有効です。ハッシュあたり6,500CPUを費やす可能性がある攻撃者から保護する場合は、より大きな問題があり、[ゴムホース暗号解読](https://en.wikipedia.org/wiki/Rubber-hose_cryptanalysis)にもっと関心があるはずです。 – zaph

3

あなたの目的は、クライアント側とサーバー側で計算されたchekcsumを比較して、アップロードされたファイルの整合性をチェックすることです。その後、各チャンクをハッシュし、それらを結合し、結果をハッシュするだけで十分です。

//pseudocode 
SHA1.digest ( 
    SHA1.digest(chunk 1) + SHA1.digest(chunk 2) + ... + SHA1.digest(chunk n)) 

しかし、あなたは計算に各チャンクを追加し、完全なファイルに増分SHA1ハッシュを行うことができます注意してください。このように、結果は、1つのステップで完全なファイルをハッシュして、一時的なデータ

SHA1.update(chunk 1) 
    SHA1.update(chunk 2) 
    ... 
    SHA1.update(chunk n) 
    SHA1.digest() 

はおそらく、この目的のSHA1のため、コメントに示すように、SHA256に移動することも考えてみましょう

を結合する必要がないということと同じです適切だろう

関連する問題