【发布时间】:2010-02-10 07:22:20
【问题描述】:
是否可以反转 SHA-1?
我正在考虑使用 SHA-1 创建一个简单的轻量级系统来验证通过未加密连接进行通信的小型嵌入式系统。
假设我使用来自“密钥”的输入创建了一个像这样的 sha1,并使用时间戳来添加它,这样 SHA-1 就会一直变化。
sha1("My Secret Key"+"a timestamp")
然后我将这个 SHA-1 包含在通信和服务器中,它可以进行相同的计算。并且希望没有人能够弄清楚“密钥”。
但这真的是真的吗?
如果您知道我是这样做的,您就会知道我确实在其中放置了一个时间戳,并且您会看到 SHA-1。 然后你能用这两个找出“秘钥”吗?
secret_key = bruteforce_sha1(sha1, timestamp)
注意1: 我想你可以通过某种方式进行暴力破解,但这实际上需要做多少工作?
注2: 我不打算加密任何数据,我只想知道是谁发送的。
【问题讨论】:
-
类似于翻转馅饼。即使你知道面包师在里面放了多少鸡蛋,你能做的最好的就是尝试烤出完全相同的馅饼:)。
-
加密系统几乎总是被错误地实现。 / 如果可能的纯文本空间足够小,那么遍历所有合理的组合是可行的。几年前,在一个单核工作站上,我用大约一个小时的蛮力(使用一个简单的 Java 程序)运行了价值 32 位的 MD5。
-
你怎么知道服务器和客户端的时间完全相同,所以服务器可以重现客户端创建的哈希?
-
@Karsten:客户端时间戳需要作为消息的一部分进行传输
-
两者都可能使用某种时间同步,如 ntp。