これは興味深い質問です。なぜなら、IT セキュリティの典型的なシナリオでは、攻撃者として$a
選択できないからです。$b
たとえば、ハッシュ化されたパスワードを取得でき、$a
すでに$b
定義されていて、それを処理する必要がある場合。その場合、ソルトの$b
あるものが利用可能な場合にのみ、ブルートフォースまたはレインボーテーブルを使用できます.
一方、あなたの例では、両方の値を自由に選択できます。任意のシークレットを取得できます。たとえば、それに応じてandtest
の値を選択できます。$b を に選択し、で計算すると、 が得られます。$a
$b
empty string
$a
$a = md5($secret)
098f6bcd4621d373cade4e832627b4f6
を選択$a = "098f6bcd4621d373cade4e832627b4f6"
し$b= ""
、どうかお尋ねします$secret == "test"
。あなたは本当だと言い、私は問題が解決したと言います。
これは最終的に私たちを本当の答えに導きます。与えられた2つの条件
- $a と $b を選択できます
- あなたは $secret を知りません
一緒に仕事をしないでください。私の例では、私は$secret
自分自身を定義しました。2 番目の条件に違反しました。一方で、 から導出せず$a
に$b
恣意的に選択することはでき$secret
ません。
と のすべての可能なペアに対して少なくとも 1 つの解があると仮定する$a
と$b
(証明があるかもしれませんが、私にはわかりません)、実際にはわからない方法でそれらを選択する場合$secret
、私は常に次のようにします。を定義$b = ""
して、攻撃をできるだけ簡単にします。その場合、レインボーテーブルはあなたの友達です。