0

プロジェクトに取り組んでおり、パスワードの保存を最初から安全に保つことに熱心です。構想段階ですが、大体こんな感じで使いたいと思います。

class Crypto {
    public function hash1($string, $salt) {
        return hash('sha512', $string . $salt);
    }

    public function hash2($string, $salt) {
        return hash('sha512', $salt . $string);
    }

    public function compareToHash($string, $salt, $hash1, $hash2) {
        return($this->hash1($string, $salt) === $hash1 && $this->hash2($string, $salt) === $hash2);
    }
}

ご覧のとおり、衝突を回避しようとしています。これは効果的な方法ですか、それは非常に単純に思えますが、何かが欠けているのではないかと思います。

ありがとう。

4

4 に答える 4

0

最初からパスワード ストレージを安全にしたい場合は、sha512または他の高速ハッシュ アルゴリズムを使用しないでください。代わりに、BCryptのようなキー派生関数を使用してください。

高速アルゴリズムの問​​題は、一般的なハードウェアで 1 秒あたり 80 メガ sha512 ハッシュを計算できることです ( 2012 年)。これにより、数ミリ秒で約 500000 語の英語辞書全体をブルート フォースすることが可能になります。他のアルゴリズムはさらに高速です。

BCrypt は特にパスワードをハッシュするように設計されているため、処理が遅くなります(計算時間が必要です)。コスト ファクターを使用すると、必要な時間を将来の (したがってより高速な) ハードウェアに適応させることができます。

BCrypt の使用は、sha512 ハッシュを使用するのと同じくらい簡単です。phpassのような十分に確立されたライブラリを使用することをお勧めします。実装方法を理解したい場合は、最も重要な点を説明しようとしたこの記事を読むことができます。

sha512 との衝突は決して問題にならないため、2 つの個別のハッシュを使用したスキームではセキュリティは向上しません。最悪の場合、両方のハッシュを保存する必要があるため、セキュリティが低下することさえあります。そのため、攻撃者はハッシュされたパスワードに関する 2 つの関連情報を取得します。

于 2012-10-20T18:55:31.870 に答える
0

おそらくウェブサイトをパスワードで保護することを計画しているので、クライアントからすでにエンコードされたパスワードを送信する必要があることを説明させてください。そうしないと、スニファーが実際のパスワードを見つけてしまいます。多くの、多くのアカウントで同じです。

ハッシュとパスワード保護に関するすべての問題を説明しているため、少し前に見つけた投稿を見て、そのリンクを保存しておくことをお勧めします。 /rainbow-hash-cracking.html

すぐに-可能な限り最強の(そしてsha1はもはや強力ではない)パスワードエンコーダーを使用します。最速のものではありません。ハッカーが侵入しようとして貴重な時間を浪費するのを許してください。

それが役立つことを願っています、そして幸運を祈ります。

于 2012-10-19T21:02:54.663 に答える
0

それはかなり基本的なことです。OWASPのPassword Storage Cheat Sheetを調べてみます。また、すでに作成され精査されているパスワード ハッシュ ライブラリも多数あります。

OpenWallのPortable PHP Hashing Frameworkを見てみましょう。非常に安全なハッシュを作成し、適切な回数の反復も実行します。こちらもかなり広く使われています。

SHA512 でハッシュしている場合、衝突を回避するためにその時点で特別なことをする必要はありません。衝突を見つけることは、まだしばらくの間はまだ実行可能ではないことを最近読んだことを覚えています。

私が注目する主な 2 つのことは、セキュア ソルト (20 バイト以上) と、ハッシュを少なくとも 64,000 回繰り返して攻撃時間を増やすことです。

于 2012-10-19T21:05:48.430 に答える
0

パスワード セキュリティの最初のルール: 何かが安全かどうかわからない場合は、そうではない可能性があります。

パスワードルーチンを書き始めたばかりなので、ここでやめることをお勧めします。

PHP5.5 (2013 年 2 月/3 月予定) には、セキュリティのベスト プラクティスを念頭に置いてパスワードを処理するために特別に設計された一連の新しい関数が付属しています。5.5 がリリースされると、これらの関数は、PHP でパスワードを処理する唯一の推奨される方法になります。

幸いなことに、これらの機能を使用するために 5.5 を待つ必要も、5.5 にアップグレードする必要もありません。5.3 および 5.4 で実行できるようにバックポートされているため、すぐに使用できます。ここからライブラリをダウンロードしてください: https://github.com/ircmaxell/password_compat

参考記事:http ://www.h-online.com/open/news/item/PHP-5-5-should-reduce-password-sloppiness-1707835.html

于 2012-10-19T21:05:56.163 に答える