文字列の MD5 ハッシュを生成し、それを 25 文字に切り捨てた場合、総当たり攻撃は可能ですか? ハッシュをソルトするのは比較的安全ですか?
1 に答える
私は暗号の専門家ではありませんが、切り捨ては塩漬けにいくらか似ていると思います。ソルトするときは、入力データにランダムデータをパディングしてから、ハッシュ値を生成します。つまり、本質的には
hash = md5(pass + salt)
このランダムなソルトは明らかに返されるハッシュ値に影響を与えるため、パスワードとして「password」を使用している場合、ソルトを使用すると、ハッシュ値はパスワードから派生したハッシュ値「password」とソルトを追加しない場合とは完全に異なります。そうは言っても、攻撃では、ソルトがどのように実装されたかを推測し、ソルトとパスワードの組み合わせをブルートフォースする必要があります。したがって、攻撃者は文字列のどこに塩が配置されているかを知る必要があります。
hash = md5(salt + pass) or hash = md5(pass + salt) ?
どういうわけかそれを推測できる場合は、パスワード+ソルト値を総当たり攻撃する必要があります。
hash = md5(password + 1)
hash = md5(password + 2)
hash = md5(password + 3)
....
hash = md5(password + ;fioja4ofu4fioaejfio)
....
hash = md5(password2 + 1)
....
非常に計算集約的です!
したがって、ハッシュを切り捨てた場合でも、おそらくそれほど多くの作業は行われていませんが、実行する必要のある推測作業がいくつかあります。取得したmd5ハッシュ値を考えてみてください。ほんの数文字を変更すると、ハッシュが完全に変更されたように見えます。
例えば、
cat = d077f244def8a70e5ea758bd8352fcd8
cat1 = a980d10665f268b0ec6c13ebea43034f
ほとんどの入力は排他的に一意のハッシュ値を持っていると言っても過言ではありません。切り捨てが静的だった場合、たとえば、32文字から25文字に切り捨てます。攻撃者は、切り捨てがどこでどのように発生するかを知る必要があります。端からスライスしたのですか、それとも正面からスライスしたのですか?ハッシュからランダムに選択しましたか?ただし、ハッシュ値は一般的に非常に異なるため、いくつかの確率を実装できます。
たとえば、猫のハッシュを考えてみましょう。最後から7文字を切り捨てます...
cat = d077f244def8a70e5ea758bd8352fcd8
cat = d077f244def8a70e5ea758bd8
これらのハッシュは一般に完全に異なるという事実を考えると、切り捨てはあまり役に立ちません。切り捨てられたハッシュをランダムな入力データの完全なハッシュと照合して、ax%の一致などがあるかどうかを確認する、短いスクリプトを作成できます。私が猫をハッシュし、あなたの切り捨てられたハッシュが私の猫のハッシュの32文字のうち25文字と一致した場合、あなたの切り捨てられたハッシュは単語cat用であり、切り捨てられた部分に残りの部分を入力するだけです。猫のハッシュ。
私がここで言ったことはすべて、私の心の中で唾を吐くだけです。私は決して暗号/セキュリティの専門家ではありません。私はランダムなセキュリティ関連のものに手を出します。それを取るか、それを残します:)それがいくつかの明確さをもたらすことを願っています。
すっごく、私は切り捨てるよりもむしろ自分自身の塩漬けソリューションを実装したいと思います。数バイトのスペースを節約するために切り捨てを検討している場合は、切り捨てよりもソルトを実装してください。