是否有可能扭转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.
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是一个简单的计数器,用于跟踪双方在此"会话"中交换的消息数量 - 这可以防止攻击者简单地重放先前看到的消息.
这是对消息进行身份验证的行业标准和安全方式,无论它们是否加密.
(这就是为什么你不能暴露哈希:)
哈希是一种单向函数,这意味着许多输入都产生相同的输出.
如您所知,您可以对时间戳的范围进行合理的猜测,然后您可以迭代所有这些时间戳,计算哈希值并进行比较.
当然,您检查的范围内的两个或多个时间戳可能会"碰撞",即尽管时间戳不同,但它们会生成相同的哈希值.
因此,从根本上说,没有办法可以确定地反转哈希.
在数学术语中,只有双射函数具有反函数.但是散列函数不是单射的,因为有多个输入值会导致相同的输出值(碰撞).
所以,不,哈希函数不能反转.但你可以寻找这样的碰撞.
编辑
由于您要验证系统之间的通信,我建议使用HMAC.用于计算消息验证代码的该构造可以使用不同的散列函数.您可以使用SHA-1,SHA-256或任何您想要的哈希函数.
为了验证对特定请求的响应,我会发送一个随机数以及需要用作salt的请求来验证响应.
归档时间: |
|
查看次数: |
82787 次 |
最近记录: |