私が避けたい問題は、データベースに対する「ブルートフォース」攻撃です。したがって、50バイト長の暗号的にランダムなソルトを情報に追加した場合(取得する必要はなく、ハッシュのみ)、十分に安全ですか?
私は答えが不正確であることを知っています-それがスーパーコンピューターであるかPCであるかなどによって異なります。一般アイデアを取得したい-スーパーコンピューターは1秒間にそれらの10 ^ 9を通過できますか? 10 ^ 20? PCがそれらすべてを通過するのに1年かかりますか?曖昧にしてください。
編集:ソルトはハッシュされた結果にのみ残ります。
ソルトの目的 はnotであり、ハッシュの計算を遅くします。これは、Rainbowテーブルが役に立たないようにするためです。 SHA512の1回の反復は、wayが速すぎて、ブルートフォーシング攻撃に対して有用ではありません。
まともなGPUでは、SHA512で 〜1億ハッシュ/秒 ( 新しいリンク )を実行できます。複数のGPUを備えたシステムの場合はこれを乗算します。 bcrypt などの遅いKDFを使用すると、反復回数を微調整してより適切にすることができます。十分なセキュリティマージンを得るために、ハッシュあたり約0.3秒程度のものが必要です。
50バイトは400ビット、つまり2 ^ 400のキースペースであることに注意してください。 2 ^ 400のハッシュを計算できれば、SHA512で衝突が見つかることはほぼ確実です。ただし、攻撃者は塩を推測しようとはしていません。心配する必要があるのは、攻撃者が塩をすでに知っているときにハッシュをクラックすることです。
解決策は PBKDF2、bcrypt、またはscryptを使用 、および ソルトをプレーンテキストで保存 データベースに保存します。
更新:
独自のスキームを実装しようとしているようです。これをしないでくださいしないでください。広く受け入れられている暗号化のルールは2つあります。
特に暗号を扱う場合、独自のスキームをロールすることがどれほど危険であるかを強く強調することはできません。伝説的なブルース・シュナイアーでさえ、真剣なピアレビューと数ヶ月(数年ではないにしても)のテストと調整なしに、あえて自分の暗号システムを書くことはありませんでした。
ハッシュに関して私があなたに与えたアドバイスは、ピアレビューと膨大な量の理論的および実際的なテストに基づく標準です。追加のハッシュと その他の黒魔術 を使用して拡張しようとするのは悪い考えであり、アプリケーションの攻撃対象領域を増やし、潜在的なセキュリティ上の欠陥を作成するだけです。標準に固執します。