この質問 パスワードのハッシュについてもう一度考え始めました。私は現在 bcrypt (具体的には py-bcrypt )を使用しています。 PBKDF2 、および scrypt についてよく聞いています。
私が知らないかもしれない「より現代的な」パスワードハッシュ方法があるかどうか(私はそれらが新しいので、人々がそれらについてそれほど話さないので)、または多分私が知らない他の方法があるのだろうかについて知る。
そして、そこから続けて、どれを使うべきですか?ほとんどの人がbcryptを推奨しているようですが、それが古いからだと思います(読んで:よく知られています)。 scryptの方が良いようです(メモリ使用量は可変です)。 PBKDF2についてはあまり知りません。
では、ユーザー管理スキームを作成している場合、どれを使用すればよいですか?それとも、まったく別のものを使用する必要がありますか?
暗号化では、「新しい」はnotは「良い」と同義です。そのbcryptは12歳(12歳.. 。それは本当に「古い」ですか?)は、それがsustained破壊されることなく、12年間の公衆への露出と幅広い使用であることを意味するので、非常に堅牢でなければなりません。定義により、「新しい」メソッドはそれほど自慢できません。暗号学者として、私は12歳はちょうど適切な年齢であり、たとえば5歳未満は、一般的な展開には明らかに「若すぎる」と言います(もちろん、これらの推定値はアルゴリズムの露出度に依存します)取得しました;早期の幅広い展開は、展開することを決定した人にとっては危険ですが、セキュリティへの信頼を築く、または初期段階で弱点を明らかにするのに大いに役立ちます)。
Scryptisbcrypt よりもはるかに新しい;それは2009年にさかのぼります。アイデアはかなりスマートです。つまり、遅いパスワード処理は辞書攻撃を行うことを意味します[〜#〜] n [〜#〜]通常の処理はN ' =正直なシステムの方が倍の費用がかかる。理想的には、N = N '; scryptの作者は、PBKDF2またはbcryptでASICを使用すると、攻撃者が[〜#〜] n [〜#〜]N '(つまり、攻撃者は特別なハードウェアを使用できます。これは、パスワードを破ることだけに関心があるため、正直なシステムよりも1秒あたり、1ドルあたりのパスワードのハッシュ数が多いためです)。これを修正するために、高速アクセスRAMはPCの専門分野であり、ASIC設計の問題点であるので、scryptはかなりのRAMを必要とするアルゴリズムに依存しています。その領域でどの程度scryptが成功するかは、まだ測定されていません。 2009年は最近のことであり、scryptの作成者が示した数値は130 nm ASICテクノロジーと「5秒に相当する処理」という仮説に基づいています。これは、平均的なユーザーが待つ準備ができているものをはるかに超えています。 。
nowを実際に使用するには、bcryptをお勧めします。
Scryptにもかかわらず、パスワード処理の概念に関する現在の研究は、単なるパスワード検証以上のものを可能にする特殊な変換に関するものです。たとえば、 [〜#〜] srp [〜#〜] プロトコルは、相互パスワードベースの認証と暗号鍵の合意を可能にし、辞書攻撃に対して耐性があります(攻撃者が積極的に攻撃した場合でも)クライアントまたはサーバーの偽装);これには少し数学的な構造が必要であり、SRPでのパスワードハッシュにはモジュラ指数が含まれます。
それは2016年なので、この5年前の質問を再検討する価値があります。 2013年から2016年に実施された Password Hashing Competition があり、24件の提出物を受け入れ、推奨されるパスワードハッシュアルゴリズムとして Argon2 を選択しました。
トーマスが新しいものと良いものについて言ったことはすべてまだ当てはまります。直近の2016年2月(コンテスト終了後)、Argon2は、マイナーな弱点に対して強化するために、小さな変更(バージョン1.3)を行いました。そのため、まだ自動でジャンプするわけではありませんが、Argon2が今後ますます一般的になる可能性があるため、それを目の前に置いておく作業です。