私は現在、ユーザー アカウントを必要とする Web プロジェクトに取り組んでいます。アプリケーションはサーバー側のCodeIgniterなので、認証ライブラリとしてIon Authを使用しています。
パスワードを保護するために2つのソルトを使用した認証システムを以前に作成しました。1 つはサーバー全体のソルトで、.htaccess ファイルに環境変数として設定されていました。もう 1 つは、ユーザーのサインアップ時にランダムに生成されたソルトでした。
これは、パスワードをハッシュするためにその認証システムで使用した方法です。
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
//create a random string to be used as the random salt for the password hash
$size = strlen($chars);
for($i = 0; $i < 22; $i++) {
$str .= $chars[rand(0, $size - 1)];
}
//create the random salt to be used for the crypt
$r_blowfish_salt = "$2a$12$" . $str . "$";
//grab the website salt
$salt = getenv('WEBSITE_SALT');
//combine the website salt, and the password
$password_to_hash = $pwd . $salt;
//crypt the password string using blowfish
$password = crypt($password_to_hash, $r_blowfish_salt);
これに穴があるかどうかはわかりませんが、とにかく、CI で使用するより完全な機能セットを求めて Ion Auth に移行しました。
Ion は、ハッシュ メカニズムの一部として 1 つのソルトしか使用していないことに気付きました (ただし、データベース セッションを保護するために、encryption_key を設定することをお勧めします)。
私のデータベースに保存される情報は、名前、電子メール アドレス、国ごとの場所、いくつかのメモ (機密情報が含まれていないことをお勧めします)、Facebook、Twitter、または Flickr アカウントへのリンクなどです。これに基づいて、自分のサイトの安全なページで SSL 接続を行う必要があるとは確信していません。
私の質問は、Ion Auth ライブラリの一部として 1 つのソルトしか使用されていない特定の理由があるのでしょうか? それが提供する機能の前に独自の追加のソルティングを書くことを暗示していますか、それとも何か不足していますか?
さらに、2 つのソルトを使用する価値さえありますか、それとも、攻撃者がランダムなソルトとハッシュ化されたパスワードを取得した場合、とにかくすべての賭けが無効になりますか? (そうではないと思いますが、何も心配していないかどうかを確認する価値があります...)