パスワードを暗号化するための最速でありながら安全な方法は何ですか(PHPでできれば)。どちらの方法を選択しても、移植性はありますか?
つまり、後でWebサイトを別のサーバーに移行した場合、パスワードは引き続き機能しますか?
私が今使用している方法は、言われたように、サーバーにインストールされているライブラリの正確なバージョンによって異なります。
パスワードを暗号化するための最速でありながら安全な方法は何ですか(PHPでできれば)。どちらの方法を選択しても、移植性はありますか?
つまり、後でWebサイトを別のサーバーに移行した場合、パスワードは引き続き機能しますか?
私が今使用している方法は、言われたように、サーバーにインストールされているライブラリの正確なバージョンによって異なります。
ログインシステムの暗号化方法を選択している場合、速度は友だちではありません。JeffはパスワードについてThomas Ptacekと話し合い、結論として、余裕のある最も遅く、最も安全な暗号化方法を使用する必要があります。 。
Thomas Ptacekのブログから:
速度は、パスワードハッシュ関数に必要とされないものです。最新のパスワードスキームは、インクリメンタルパスワードクラッカーで攻撃されています。
インクリメンタルクラッカーは、クラックされた可能性のあるすべてのパスワードを事前に計算するわけではありません。彼らは各パスワードハッシュを個別に検討し、PHPログインページと同じようにパスワードハッシュ関数を介して辞書にフィードします。Ophcrackのようなレインボーテーブルクラッカーは、スペースを使用してパスワードを攻撃します。John the Ripper、Crack、LC5などのインクリメンタルクラッカーは時間とともに機能します:統計と計算。
パスワード攻撃ゲームは、パスワードXを解読するのにかかる時間でスコアリングされます。レインボーテーブルの場合、その時間は、テーブルの大きさと検索速度によって異なります。インクリメンタルクラッカーの場合、時間はパスワードハッシュ関数を実行できる速度によって異なります。
パスワードハッシュ関数を最適化できるほど、パスワードハッシュ関数の速度が速くなり、スキームが弱くなります。MD5とSHA1は、DESのような従来のブロック暗号でさえ、高速になるように設計されています。MD5、SHA1、およびDESは、弱いパスワードハッシュです。最新のCPUでは、DESやMD5などの生の暗号化ビルディングブロックをビットスライス、ベクトル化、および並列化して、パスワード検索を非常に高速にすることができます。ゲームオーバーFPGAの実装には、わずか数百ドルの費用がかかります。
私はピーターと一緒です。開発者はパスワードを理解していないようです。私たちは皆、MD5またはSHA1を選択します(そして私もこれに罪を犯しています)。なぜならそれらは高速だからです。それについて考えると(誰かが最近私にそれを指摘したので)、それは意味がありません。ばかげた遅いハッシュアルゴリズムを選択する必要があります。つまり、物事の規模で、忙しいサイトはパスワードをハッシュしますか?1/2分ごと?サーバーに関しては、0.8秒と0.03秒かかるかどうかは誰が気にしますか?しかし、その余分な速度は、あらゆる種類の一般的な野蛮な攻撃を防ぐために非常に大きなものです。
私の読書から、bcryptは安全なパスワードハッシュのために特別に設計されています。それはフグに基づいており、多くの実装があります。
PHPについては、 PHPパスを確認してください
.NETをやっている人は、 BCrypt.NETをチェックしてください。
パスワードを暗号化するのではなく、ハッシュ化する必要があることに注意してください。
暗号化されたパスワードを解読して、誰かにパスワードを見せられる可能性があります。ハッシュは一方向の操作であるため、ユーザーの元のパスワードは (暗号化によって) 失われます。
どのアルゴリズムを選択するかについては、現在受け入れられている標準のものを使用してください。
また、ユーザーのパスワードをハッシュするときは、必ず他のジャンクも一緒にハッシュしてください。例えば:
password1
PasswordSaltDesignedForThisQuestion
ユーザーのパスワードにソルトを追加します。
String s = HashStringSHA256("password1PasswordSaltDesignedForThisQuestion");
何をするにしても、独自の暗号化アルゴリズムを作成しないでください。これを行うと、(暗号学者でない限り)アルゴリズムに欠陥があり、クラックするのが簡単になることがほぼ保証されます.
必ずしも最速のものを探しているわけではありませんが、バランスの取れたものを探しているわけではありません。このコードが開発されているサーバーの一部はかなり遅く、パスワードをハッシュして保存するスクリプトの実行には 5 ~ 6 秒かかります。ハッシュに絞り込みました(ハッシュをコメントアウトすると、1〜2秒で実行されます)。
最も安全である必要はありません。私は (今のところ) 銀行のためにコードを書いているわけではありませんが、パスワードを平文で保存するつもりはありません。
bcrypt
laravel のような多くの最新のフレームワークで使用されることを検討してください。
データベースに挿入するときにこの関数を使用します Password_harsh($password,PASSWORD_DEFAULT); データベースから選択するときは、関数 if(password_verify($password,$databasePassword)){ を使用して、挿入するパスワードとデータベース内のパスワードを比較します。
}else{
echo "password not correct";
}
これにより、安全な形式でパスワードが厳しくなります