web-dev-qa-db-ja.com

鍵がわかっている場合、HMAC SHA-1の暗号文から平文を取得する方法はありますか?

これは技術的には攻撃でもありません。元の平文を除くすべてのリソースが手元にあります。暗号文(平文に変換される)と鍵があります。 。

DBに保存される暗号文は次のとおりです:HKnvB41kkow+KkR4c7G/8vusmEM=

使用されるハッシュ関数は次のとおりです:

Public Shared Function EncryptPasswordInHash(ByVal password As String) As String
    Dim EncodedPassword As String = password
    Dim Hash As New HMACSHA1()
    Hash.Key = StrToByte(LicensingBLL.ENCRYPTION_KEY)
    EncodedPassword = Convert.ToBase64String(Hash.ComputeHash(Encoding.Unicode.GetBytes(password)))
    Return EncodedPassword
End Function

使用したキーは次のとおりです: "zooooooooooo123"

与えられたすべての情報を含むプレーンテキストを取得する方法はありますか?

7
DKode

いいえ
一般的に言えば、いいえ。ハッシュは暗号化ではありません。ハッシュは元に戻せません。全然。常に固定長の出力を生成します。つまり、32文字に固定された出力と33文字の入力では、これを元に戻す方法はありません。その1つのキャラクターの情報は回復不能に失われます。 -それとともに、他のすべてのキャラクター。

小さな入力に対して実行可能なブルートフォース
しかし、ご存知のように、入力が0〜9の数字で3つしかないことがわかっている場合は、1000個すべてを試してみてください。そうすれば、ハッシュを効果的に逆にできたことになります。 (「ブルートフォース」による。)

キー付きハッシュのロック解除はありません
また、キー付きハッシュで使用する「キー」は、何かのロックを解除する種類のキーではありません。 「キー」は、そのコンテキストでは実際に悪い、紛らわしい名前です。特別な方法で通常のデータと混合されるのは、もう1つの入力です。 -その後、すべてがハッシュ関数ミートグラインダーを通過し、固定長出力に変換されます。

補足:パスワードを保存する奇妙な方法
HMACを使用してパスワードを保存しているようです。これは異常です。また、基本的には、ペッパーを使用した、無塩の、ラウンド数の少ないハッシュされたパスワードを保存することを意味します。ペッパードがいいです。 (コショウがハッシュ自体以外の場所に保存されている場合。)無塩は常に悪いです。ラウンド数の少ないハッシュも悪いです。 (詳細:この質問を参照してください: HMAC-なぜHMACをパスワードの保存に使用しないのですか? )-これにより、キーがわかっていても、ブルートフォースでハッシュをブルートフォースすることが容易になりますが、ブルートブロートする必要があります強制。

12
StackzOfZtuff