ハッシュ化する前にパスワードの先頭にソルトを追加することは悪い考えだとどこかで読んだことがあります。代わりに、この記事はパスワードの途中のどこかに挿入する方がはるかに安全だと主張しています。
どこで見つけたのか覚えていませんし、同じことを言っている他の記事も見つかりません。また、これによりセキュリティが向上する理由もわかりません。
それで本当ですか?それとも、セキュリティの観点からは重要ではありませんか?アサーションが真の場合、誰かが理由を説明できますか? MD5/SHA1のような弱いハッシュに対してのみ有効ですか?
この記事の意味するところは、ソルトをパスワードの途中に置くと、同じハッシュを実際に構成するルールをパスワードに実装できなかったため、辞書攻撃またはブルートフォースによってクラックされる可能性が高まるということです。選択のクラッカー。実際には、これはおそらくまったくナンセンスです。
これはどのように機能しますか?
John the Ripper のようなプログラムを使用する場合は、そのようにパスワードファイルをフィードします(正確な構文ではありません)。
username:password:salt
次に、ハッシュの生成に使用すると思われるパラメーターとして形式を渡します。これは:
md5(pass + salt)
md5(salt + pass)
md5(md5(pass) + md5(salt))
md5(pass + md5(salt))
md5(md5(...(salt + pass + salt)...))
...
and whatnot.
John the Ripperには、選択可能な約16のサブフォーマットがあらかじめ用意されています。
Saltをパスワードのどこかに置くと、おそらく次のようになります。
md5(password.substring(0,4) + salt + password.substring(4,end))
したがって、このような手法を使用するには、クラッキングを開始する前に、まずJohn用の小さなプラグインを作成する必要があります(これはまったく問題になりません)。
さらに、攻撃者は、不明なOriginのハッシュとソルトのリストを持っている可能性があり、ハッシュの構成方法に関する知識がありません。これはまれなケースです。攻撃者がデータベースからハッシュとソルトを抽出できた場合、おそらくWebサイトのパスワードハッシュアルゴリズムを抽出する方法を見つけるか、既知のパスワードで新しいアカウントを作成し、ハッシュとソルトを抽出するだけです。それと最終的なハッシュを作成するために使用されたアルゴリズムを総当たり的に実行します(これは多少難しいかもしれません)。
全体として、ソルトをどこに置くか、ハッシュアルゴリズムを1万回繰り返すかどうかは、ほぼ完全に任意です。これは、かなりの量のセキュリティを提供しません。
セキュリティが必要な場合は、より優れたハッシュアルゴリズムやbcryptなど、計算コストがかかるものを使用することで、より優れた方法を実行できます。
それはハッシュ関数に依存します。
ランダムなOracle(これは「理想的なハッシュ関数」です)では、saltとpasswordを組み合わせる方法に違いはありません。
実際のライブハッシュ関数では、入力の位置に違いがある可能性があります(拡張攻撃があるなど)。
ただし、通常は、PBKDF-2、bcrypt、scryptなどの特別なパスワードハッシュスキームを使用する必要があり、これらはすでに3つの入力で作成されています。使用するつもりだったので、それらを使用してください。
入力文字列の終わりよりも、最初のほうがランダムである方が良いでしょう。
Saltがすべてのパスワードに対して一定の値である場合、saltを次のように適用すると、複数のパスワードをブルートフォースする方が簡単です。
hash(salt . password)
のではなく
hash(password . salt)
その理由は、いくつかの(そしてmd5とsha-1の両方がこの説明に当てはまると思う)ハッシュアルゴリズムが反復的であるためです-ハッシュしている文字列が既知の定数値で始まる場合、クラッキングの試みを次の結果でシードすることが可能ですソルトをハッシュすることで、パスワードをソルトする利点を取り除きます。
ソルト値がパスワード固有である場合(そうでなければなりません)、上記は適用されず、ソルトはパスワード自体よりランダムである可能性があります。このため、差を付けることをお勧めします-違い/利点はごくわずかです。
入力文字列の途中にソルトを挿入するという提案は、入力文字列を定数値で開始しない別の組み合わせである可能性があります。それを回避する限り、パスワードはハッシュアルゴリズムとそれを使用するアプリケーションと同じくらい安全です。
それは潜在的にわずかにより安全ですが、無視できます。私はそれについて心配するつもりはなく、単純にするためにそれを付加するだけです。私が働いたほとんどすべての会社はソルトさえ使用していなかったので、あなたはすでにほとんどよりもより安全です。
レインボーテーブルで簡単にクラックされる可能性のある無塩ハッシュとは対照的に、データベースからハッシュが盗まれたハッカーや、ソルトが適用された中間者攻撃の可能性はほとんどありません。
他のアプリケーションでは、HMACを使用する場合、秘密鍵の追加と追加の両方がさまざまなタイプの攻撃に対して脆弱です。ただし、どちらもパスワードハッシュのソルトには適用されないため、どちらでも問題ありません。