web-dev-qa-db-ja.com

キーストレッチアルゴリズムや繰り返しのアップグレードは重要ですか?

90年代に戻って、あなたが時代を先取りし、SHAを使用してパスワードをハッシュおよびソルトし、大規模なサイト、数百万のアカウントなどであると考えてください。

Webは進化し、時間の経過とともに、より高度なセキュリティ対策が期待され、一般的になります。キーストレッチ、より高度なハードウェア、より安価なハードウェアなど。

すべての顧客が毎年ログインするわけではないことを想像してみましょう。彼らが90年代にアカウントを作成し、2014年にアカウントにアクセスしたい場合は、ログインの頻度は関係ありません。それはまったく問題ありません。しかし、あなたは彼らのセキュリティをアップグレードしたいと思っています。

単純なSHAハッシュ、PBKDF、Bcrypt、Scrypt、futureCryptに移行するセキュリティの進化を想像してみてください。この進化を通じて、繰り返しやその他の構成可能な値を増やします。ハードウェアの電力と手頃な価格が向上するにつれて、存在する可能性があります。

私は推測する

1)人々はこれをしますか、これは事ですか?

そして

2)そのような方法でパスワードセキュリティをアップグレードするための現在の戦略または理論的戦略は何ですか?

2
Andrew Hoffman

これは行われており、主に使用される戦略は次のとおりです。

  • 古いアルゴリズムsha1(password+salt)でハッシュを生成します
  • 次に、新しいハッシュ関数を実装します(scryptを見てみましょう)
  • データベースを取得し、保存されているすべてのパスワードハッシュでscrypt(hash)を実行します
  • コードscrypt(sha1(password+salt))を実装して、このアルゴリズムを使用してパスワードを変更するようにします

次に、それをさらに一歩進めて、ユーザーがログインしたときにパスワードが変更され、scrypt(password)のハッシュが変更されるように実装することもできます(以前のアルゴリズムを使用するユーザーIDのリストを保持できます。それらを認証するために使用し、新しいアルゴリズムにログインした後にパスワードを移行してから、リストから削除します)。ここでの利点は、休止状態のアカウントを持っているものでも、すべてのパスワードがscryptを使用することです。

4
Lucas Kauffman

パスワードハッシュのアップグレードはものです。実際、 パスワードハッシュ理論 によると、優れたパスワードハッシュ関数(bcryptなど)の反復回数はトレードオフです。許容できる限り関数を遅くします現在のコンテキスト。新しい、より高速なハードウェアを購入すると、反復回数を増やすことができるため、そうする必要があります。反復回数により、 ムーアの法則 の影響に対抗できますが、これは、回数が実際に定期的に増加している場合にのみ機能します。

一般的な方法は、ユーザーが戻ってくるのを待ち、その時点で新しいパラメーター(または新しい関数)でパスワードを再ハッシュすることです。サーバーが実際にパスワードを取得して操作できる場所。それを行う人々は、しばしばそれを有効期限ポリシーと結び付けます(2年間アクセスされていないアカウントは閉鎖されているか、少なくとも「凍結」されています)。

さらに多くのことをしたい場合、つまりofflineの方法で(ユーザーが表示されるのを待たずに)パスワードハッシュをアップグレードする場合は、暗号を手に入れます。 この回答 で説明されているように、いくつかのネストハッシュメカニズムを考案できますが、それは暗号設計であるため、特に注意して、基本的には控える必要があります。一般に、ユーザーが戻ってくるまでハッシュ値を(一時的に)強化するために「ハッシュをハッシュ」します。

進行中のパスワードハッシュコンペティション の場合、望ましい機能としてリストされている候補者の募集:

パスワードを知らなくても、既存のハッシュを別のコスト設定に変換する機能。

このような機能には、特定の内部構造が必要です。一部のPHC候補者はそれを提供します。 私の

6
Thomas Pornin