ログインシステムを更新しています。パスワードはSHA512(password + long_string)としてサーバーに送信されます。将来的にはSHA512(ユーザー名+パスワード)のようなものに切り替えたいと思います。
そうすることで、ログインシステムが変更されたときに「もう一度ログインしてください」ダイアログを追加する必要がなくなり、ユーザーが気付かないうちにパスワードを新しい形式に更新できます。
質問:ログイン時にSHA512(パスワード+ long_string)とSHA512(ユーザー名+パスワード)の両方を送信すると問題が発生しますか?誰かがそのデータを傍受したとすると、彼は元のパスワードをもっと早く見つけることができるでしょうか?
ラマが言うように、クライアント側でパスワードを事前にハッシュすることにはほとんど意味がありません。SSLがあなたを保護します。もちろん、これはすべての通信にSSLを使用することを前提としています。そうでない場合は、最初に取り組む必要のあるはるかに大きな問題がすでに発生しています。
攻撃者が「SHA-512(password + long_string)」を見つけた場合、攻撃者はそのパスワードに対してオフライン辞書攻撃を実行できます。つまり、一致するものが見つかるまで潜在的なパスワード値を試します。もちろん、これは攻撃者が「long_string」を知っていることを前提としていますが、クライアントとサーバーの両方がそれを知っており、人間のユーザーが入力していないため、「long_string」はユーザーの前にサーバーによって提供されていると想定する必要があります認証、またはクライアントコードにハードコードされています。いずれにせよ、攻撃者がそれを持っていないと仮定するのは無理です。辞書攻撃は、毎秒数百万百万の試行のリズムで実行されます。これは、基本的なPCがSHAの計算に非常に優れているためです。 512。
ある程度、「long_string」が本当に長い場合(ここではメガバイトを話している)、ハッシュのコストは無視できなくなり、遅くなる可能性があります攻撃者をダウンさせます。このような速度低下は、優れたパスワードハッシュ関数の半分(ただし半分)です。暗号化アルゴリズムは微妙であることに注意してください。「SHA-512(long_string + password)」は、「SHA-512(password + long_string)」よりもはるかに弱いでしょう(理由がわからない場合は、触れないでください)。そのキーボードをもう一度)。優れたパスワードハッシュの後半は、並列攻撃の阻止に関するものです。この場合、各ユーザーは、他のユーザーとは異なる独自の「long_string」値を持っていることになります。 「長い文字列」は、saltとして機能します。
「SHA-512(ユーザー名+パスワード)」を使用した代替手段は、低速部分で失敗し、非並列部分を不完全に保証します(ユーザー名は世界中で一意ではなく、ユーザーがパスワードを変更したときにも再利用されるため)。元のシステムで「long_string」がどのように選択されているかによって、提案によってセキュリティが弱まったり強化されたりする場合があります。
正確な質問に対する答えは、攻撃者がbothの値を見ると、どちらを攻撃するかを選択できるということです。これは彼を助けるだけです。ただし、より完全な答えは次のとおりです。
簡単な質問ですが、サーバーにパスワードを送信する前にパスワードをハッシュするのはなぜですか?パスワードがハッシュされているかどうかに関係なく、SSLを使用してすべてを送信する必要があります。
また、SHA512(ユーザー名+パスワード)またはSHA512(パスワード+ロング)のみを使用してパスワードを保存する場合 実際には安全なハッシュアルゴリズムを使用していない であることに注意してください。