これが議論になることを意味しているわけではありませんが、SHA512がより安全であるにもかかわらず、多くのアプリがシークレットのハッシュにSHA1を使用する理由の技術的根拠を理解しようとしています。おそらくそれは単に下位互換性のためです。
明らかに大きなサイズ(128文字vs 40)、またはわずかな速度の違いに加えて、前者を使用する理由は他にありますか?
また、SHA-1は、数年前にVCRのプロセッサによって最初に解読されたと思います。誰かが512をクラックしたことはありますか(おそらくリーフブロワーで)、それともソルトなしで使用しても安全ですか?
SHA-1のほとんどの用途は相互運用性です。SHA-1が義務付けられているプロトコルを実装する場合は、SHA-1を使用します。開発の容易さも考慮されます。さまざまな言語およびプログラミング環境でのSHA-1実装は、SHA-512実装よりも一般的です。
また、ハッシュ関数のほとんどの使用にパフォーマンスの問題がない(少なくとも、ハッシュ関数がボトルネックである場合のパフォーマンスの問題はない)場合でも、SHA-1がSHA-512よりもはるかに効率的であるアーキテクチャもあります。基本的なLinksysルーターについて考えてみましょう。200MHzでクロックされるMips派生CPUを使用します。そのような機械は、例えば、再プログラムすることができる。 OpenWRT (組み込みシステム用の小さなLinux)を使用します。ルーターとして、高速ネットワーク(100Mbit/s)を備えています。いくつかのデータをハッシュしたいとします(たとえば、一部のVPNソフトウェアの一部として-ルーターはVPNを実行するための良い候補のように見えます)。 SHA-1を使用すると、CPU全体を使用して約6 MB/sになります。それはすでにネットワーク帯域幅よりかなり低いです。 SHA-512は、同じマシンで1.5 MB/s以下を提供します。このようなシステムでは、パフォーマンスの違いは無視できません。また、Linksysルーターで通信プロトコルにSHA-1を使用している場合、リンクの反対側のマシンでもSHA-1を使用する必要があります。
良いニュースは、コードネーム SHA- と呼ばれる新しい標準ハッシュ関数を選択する競争が続いていることです。競合する候補の一部は、SHA-1と同様のパフォーマンスを提供しますが、512ビットの出力が得られ、SHA-512と(おそらく)安全です。
SHA1とSHA512はどちらもハッシュ関数です。それらを暗号化ハッシュとして使用している場合、おそらくそれがSHA512を使用する正当な理由です。ただし、これらの関数を使用して単にオブジェクトを識別するアプリケーションもあります。たとえば、GitはSHA1を使用してオブジェクトを安価に区別します。その場合、2つのドキュメント間の衝突の可能性はSHA1では非常に小さいため、SHA1がタスクに適している場合、SHA512の追加のスペース要件を正当化することはできません。
暗号化ハッシュおよびソルトを使用するかどうかの選択に関しては、 Do n't Hash Secrets を読むことに興味があるかもしれません。 SHA512を使用する場合でも、ソルトを使用することをお勧めします(そうするのも安いので、なぜしないのですか?)。これは、上位のパスワードを推測して、それらが同じハッシュを持っているかどうかを確認できるためです。 [〜#〜] hmac [〜#〜] はより安全なメカニズムです。いずれの場合も、余分な時間とスペースに関連するコストと違反の可能性に関連するコストを決定し、どのようにパラノイアになりたいかを決定する必要があります。最近マイクロソフトによって発見されたように、 パスワードを絶えず変更することはお金の無駄であり、利益を生みません なので、セキュリティに関してはパラノイアは通常良いものですが、実際に計算して判断する必要がありますそれが理にかなっている場合...セキュリティの向上は時間とストレージコストを上回りますか?
何かをすばやくハッシュする必要がある場合、または160ビットのハッシュのみが必要な場合は、SHA-1を使用します。
データベースのエントリをすばやく比較するには、100個のフィールドを取得してSHA-1ハッシュを作成し、160ビットにすることができます。これらの160ビットは10 ^ 50の値です。
10 ^ 50番目の値のごく一部を超える可能性が低い場合は、単純で高速なアルゴリズムを使用して、自分が持っているものをハッシュする方が速いです。