是否有可能扭转sha1?

Joh*_*han 38 security sha1

是否有可能扭转sha1?

我正在考虑使用sha1创建一个简单的轻量级系统来验证通过未加密连接进行通信的小型嵌入式系统.

假设我使用"密钥"输入创建一个这样的sha1,并用时间戳调整它,以便sha一直在变化.

sha1("My Secret Key"+"a timestamp")
Run Code Online (Sandbox Code Playgroud)

然后我将这个sha1包含在通信和服务器中,可以进行相同的计算.希望没有人能够找出"秘密密钥".

但这是真的吗?

如果你知道我是这样做的,你会知道我确实在那里放了一个时间戳,你会看到sha1.那么你可以使用这两个并找出"秘密密钥"吗?

secret_key = bruteforce_sha1(sha1, timestamp)
Run Code Online (Sandbox Code Playgroud)

谢谢约翰


注1:我猜你可能会以某种方式暴力,但实际上会有多少工作?

注2:我不打算加密任何数据,我只想知道是谁发送的.

Thi*_*ilo 41

不,你不能反转SHA-1,这正是它被称为安全哈希算法的原因.

你应该肯定要做的是包括正在传输到哈希计算中的消息.否则,中间人可以拦截消息,并使用签名(仅包含发送者的密钥和时间戳)将其附加到伪消息(它仍然有效).

您现在可能应该将SHA-256用于新系统.

sha("My Secret Key"+"a timestamp" + the whole message to be signed)
Run Code Online (Sandbox Code Playgroud)

您还需要另外以明文形式传输时间戳,否则您无法验证摘要(除了尝试大量合理的时间戳之外).

如果暴力攻击可行则取决于您的密钥长度.

整个系统的安全性将依赖于这个共享秘密(因为发送者和接收者都需要知道,但没有其他人知道).攻击者会尝试追踪密钥(无论是蛮力猜测还是试图从设备中获取),而不是试图破坏SHA-1.

  • 你肯定*可以*找到SHA-1的冲突,它只是一个非常快的过程. (11认同)
  • 你应该使用为此目的编写的HMAC,而不是像这样散列,以防止上述方法易受攻击的各种攻击.好吧,如果你是国家安全局或中国,那就很脆弱了. (5认同)

Mar*_*ers 25

SHA-1是一个哈希函数,旨在使反向操作变得不切实际.出于这个原因,这种散列函数通常被称为单向函数加密散列函数.

然而,SHA-1 最近发现了一些弱点,它们可以比通过对所有输入进行强力搜索更快地找到输入.你应该考虑使用像SHA-256这样强大的东西来应用新的应用程序.

关于SHA-1的Jon Callas:

现在是时候走路了,但没有跑到火灾出口.你看不到烟雾,但是火警已经消失了.

  • "不切实际难以扭转"似乎回答了它. (6认同)

Wil*_*ill 15

问题实际上是如何通过不安全的会话进行身份验证.

这样做的标准是使用消息摘要,例如HMAC.

您发送消息明文以及该消息的附加散列,其中混合了您的秘密.

而不是你的:

sha1("My Secret Key"+"a timestamp")
Run Code Online (Sandbox Code Playgroud)

你有:

msg,hmac("My Secret Key",sha(msg+msg_sequence_id))
Run Code Online (Sandbox Code Playgroud)

消息序列id是一个简单的计数器,用于跟踪双方在此"会话"中交换的消息数量 - 这可以防止攻击者简单地重放先前看到的消息.

这是对消息进行身份验证的行业标准和安全方式,无论它们是否加密.


(这就是为什么你不能暴露哈希:)

哈希是一种单向函数,这意味着许多输入都产生相同的输出.

如您所知,您可以对时间戳的范围进行合理的猜测,然后您可以迭代所有这些时间戳,计算哈希值并进行比较.

当然,您检查的范围内的两个或多个时间戳可能会"碰撞",即尽管时间戳不同,但它们会生成相同的哈希值.

因此,从根本上说,没有办法可以确定地反转哈希.

  • @Johan"相当安全"正在低估它."安全"更准确. (2认同)

Gum*_*mbo 9

在数学术语中,只有双射函数具有反函数.但是散列函数不是单射的,因为有多个输入值会导致相同的输出值(碰撞).

所以,不,哈希函数不能反转.但你可以寻找这样的碰撞.


编辑

由于您要验证系统之间的通信,我建议使用HMAC.用于计算消息验证代码的该构造可以使用不同的散列函数.您可以使用SHA-1,SHA-256或任何您想要的哈希函数.

为了验证对特定请求的响应,我会发送一个随机数以及需要用作salt的请求来验证响应.

  • 我没有发现它非常引人注目,并希望看到马克的答案在顶部(当时,他们都有相同的分数).只是说只有双向功能可以逆转在这里没有多大帮助.你可以对计算x mod 4说同样的话.不是双射的,但也不安全. (2认同)