1
39
不,不能反转sha-1,这正是它被称为安全哈希算法的原因。 不过,您肯定应该做的是将正在传输到哈希计算中的消息包括在内。否则,中间的人可以截取消息,并使用签名(仅包含发送者的密钥和时间戳)将其附加到假消息上(在假消息上它仍然有效)。 现在您可能应该在新系统中使用SHA-256。
您还需要在clear中额外传输时间戳,因为否则您将无法验证摘要(除了尝试大量合理的时间戳)。 如果蛮力攻击是可行的,取决于你的密钥的长度。 整个系统的安全性将依赖于这个共享的秘密(因为发送方和接收方都需要知道,但没有其他人知道)。攻击者会试图去寻找钥匙(要么是蛮力猜测,要么是试图从你的设备获取钥匙),而不是试图破坏sha-1。 |
2
24
SHA-1是一个 hash function 这样做的目的是使扭转操作变得不切实际。这种哈希函数通常被调用 one-way functions 或 cryptographic hash functions 因为这个原因。 不过,沙一号有一些 recently discovered weaknesses 这使得查找输入比对所有输入进行强力搜索更快。你应该考虑使用更强大的东西,比如 SHA-256 对于新应用程序。 Jon Callas 关于SHA-1:
|
3
15
问题是 事实上 如何在不安全会话上进行身份验证。 为什么要这样做的标准是使用消息摘要,例如 HMAC . 您发送消息的纯文本以及该消息的附带散列,其中您的秘密已经混合在其中。 所以不是你的:
你有:
消息序列ID是一个简单的计数器,用于跟踪双方在此“会话”中交换的消息数,从而防止攻击者简单地重放以前看到的消息。 这个 行业标准和安全 验证消息的方法,不管它们是否加密。 (这就是为什么你不能粗暴地对待哈希:) 哈希是单向函数,意味着许多输入都会产生相同的输出。 正如您所知道的秘密,您可以对时间戳的范围进行合理的猜测,然后可以迭代所有这些时间戳,计算哈希并进行比较。 当然,您检查的范围内的两个或多个时间戳可能会“冲突”,即尽管时间戳不同,但它们生成相同的哈希。 因此,从根本上讲,没有任何方法可以确定地逆转散列值。 |
4
9
仅用数学术语 bijective functions 有一个反函数。但是哈希函数不是 injective 因为有多个输入值会导致相同的输出值(冲突)。 所以,不,哈希函数不能反转。但是你可以寻找这样的碰撞。 编辑 由于您想验证系统之间的通信,我建议使用 HMAC . 计算消息身份验证代码的构造可以使用不同的哈希函数。您可以使用sha-1、sha-256或任何您想要的哈希函数。 为了验证对特定请求的响应,我将发送一个 nonce 以及需要用作salt来验证响应的请求。 |
5
3
不能反转sha-1加密字符串并不是完全正确的。 您不能直接反转一个,但可以用彩虹表来完成。 维基百科: 彩虹表是用于反转加密哈希函数的预计算表,通常用于破解密码哈希。表通常用于将明文密码恢复到一定长度(由一组有限的字符组成)。 从本质上讲,sha-1的安全性只相当于所用密码的强度。如果用户有长密码和模糊的字符组合,现有的彩虹表就不太可能有加密字符串的密钥。 您可以在此处测试加密的SHA-1字符串: http://sha1.gromweb.com/ 互联网上还有其他的彩虹表,你可以使用,所以谷歌反向sha1。 |
6
2
注意,对md5和sha-1的最佳攻击是找到任意两条消息m1和m2,其中h(m1)=h(m2),或者找到m2,这样h(m1)=h(m2)和m1!= m2。给定h(m1)的结果m1在计算上仍然不可行。 另外,您使用的是MAC(消息身份验证代码),因此攻击者在不知道机密的情况下无法忘记消息,只需一个警告—您使用的一般MAC结构容易受到长度扩展攻击—在某些情况下,攻击者可以伪造给定m2、h(机密,m2 m3)的消息m2 m3、h(机密,m2 m3)。这不仅仅是时间戳的问题,而是在对任意长度的消息计算MAC时的问题。您可以将秘密附加到时间戳,而不是预先挂起,但一般来说,您最好使用带有sha1摘要的hmac(hmac只是构造,可以使用md5或sha作为摘要算法)。 最后,您只需要签名时间戳,而不是完整的请求。主动攻击者很容易攻击系统,尤其是在没有重播保护的情况下(即使有重播保护,也存在此缺陷)。例如,我可以从一条消息中捕获时间戳、hmac(带有机密的时间戳),然后在我自己的消息中使用它,服务器将接受它。 最适合发送消息,HMAC(消息)具有足够长的秘密。服务器可以确保消息的完整性和客户机的真实性。 根据您的威胁场景,您可以添加重播保护,也可以注意到不需要这样做,因为当完全重播消息时不会导致任何问题。 |
7
1
散列值依赖于输入,对于相同的输入,将给出相同的输出。 因此,除了其他答案外,请记住以下几点: 如果用密码开始散列,就可以预先计算彩虹表,并快速地添加可信的时间戳值,如果从时间戳开始,则很难做到这一点。 所以,而不是使用 sha1(“我的密钥”+“时间戳”) 去 sha1(“时间戳”+“我的密钥”) |
8
0
我相信公认的答案是 技术上 正确但错误,因为它适用于用例:在公共/不受信任的媒体上创建和传输篡改明显的数据。 因为尽管它是 技术上 当您通过互联网发送纯文本“数据和数据的散列+机密”时,很难强制或反转SHA散列,如上所述,在捕获足够的数据样本后,可以智能地获取机密。想想看-你的数据可能在改变,但密钥保持不变。所以每次发送一个新的数据blob时,它都是一个运行基本破解算法的新示例。对于包含不同数据的两个或多个示例以及数据+机密的哈希,可以验证您确定的机密是否正确,而不是假阳性。 这种情况类似于WiFi解密程序在捕获足够的数据包后如何破解WiFi密码。在收集了足够的数据之后,生成密钥就变得很简单了,即使在技术上您没有反转sha1甚至sha256。确保数据未被篡改或验证另一端与谁交谈的唯一方法是使用GPG等(公钥和私钥)加密整个数据blob。散列本质上是不安全的,当您散列的数据可见时。 实际上,它实际上取决于应用程序和最初为什么要散列的目的。如果所需的安全级别微不足道,或者说您在100%完全可信的网络中,那么哈希可能是一个可行的选择。希望网络上没有人或任何入侵者对您的数据感兴趣。否则,据我目前所能确定的,唯一可靠可行的选择是基于密钥的加密。您可以加密整个数据blob,也可以对其进行签名。 注:这是英国人在二战期间破解神秘密码的方法之一,从而有利于盟国。 有什么想法吗? |
9
0
sha1旨在防止从哈希恢复原始文本。然而, SHA1 databases exists ,允许通过其sha哈希查找常见密码。 |
TJCLK · 使用此代码可以找到6字节sha-1冲突需要多长时间? 7 年前 |
ebann · 在大文件上同时计算MD5和SHA1 7 年前 |
osgx · bup(基于git的映像备份)如何计算存储对象的哈希值 8 年前 |
gbtimmon · 为什么这些SHA1实现不同? 8 年前 |
Indivara · 从VBA调用.NET加密 9 年前 |
mibollma · 支持RSA加密的智能卡系统[已关闭] 10 年前 |
lorigio · C#和C之间的SHA1不同++ 10 年前 |
Thomas Matthews · 验证SHA-1算法(功能) 10 年前 |