ほとんどの人は、初心者の開発者であっても、データベース内のパスワードはハッシュ形式(md5など)でのみ保存する必要があることを教えてくれます。 これにより、安全性が確保され、システム全体のセキュリティが向上します。 これは本当にそうですか?
実際、そうではありません。 セキュリティと安全性は確かに向上しますが、それほどではありません。 インターネットには長い間多くのパスワードのハッシュデータベースがありました。 Yandexでのみ3分間検索すると、次のサイトにアクセスできました。MD5decrypter ( 568,002ハッシュ)とInsidepro ( 10,148,884ハッシュ)。 もう少しではありませんか? そして、これらはオープンソースプロジェクトであり、md5のみで使用できます。 幸いなことに、真面目なハッカーグループには独自の基盤があり、ボットネットが存在するため、分散コンピューティングはもはや問題ではないと思います。
誰かが最も独創的なものを提案し、ユーザーパスワードに秘密の長いプレフィックスを追加しましょう。 さて、または、例えば、md5からmd5を実行します。 クラッカーは推測することはなく、パスワードを取得しません。
助けにはなりません。 実際、ハッシュを破るとき、重要なことは元のパスワードではなく、競合の検索です。 md5( '76854')がmd5( 'our_secret_string'。 'Fhndkts')と一致する場合、パスワード76854を入力してもFhndktsを入力してもかまいません。
唯一の問題は、まだ多くのハッシュオプションがあり、それらがデータベース内の非常に大きな場所を占めることです。 はい、それらの検索には非常に長い時間がかかります。
ただし、この問題はRainbow Tablesを使用しても解決されます。 これらを使用して、保存されたデータベースのサイズとパスワード検索の速度を数桁削減します。 これについてはこちらとこちらをご覧ください 。 このようなテーブルを構築するには、分散コンピューティングも必要です。 そして、そのようなプロジェクトがあります-Rainbowcrack.com 。 範囲は印象的です-2,628テーブル、102,080,000,000チェーン(各チェーンで約1000-1500パスワード)、1.49 Tbのデータ。 ロシアの同様のプロジェクトもありますが、これまでのところはるかに少ない成果を上げています。
それでは、今どのようにパスワードを保存しますか?
denis.boltikov.ru