当我启动一个tomcat服务器时,我看到了日志:"使用[SHA1PRNG]"创建用于生成会话ID的SecureRandom实例;
这是个问题! 据我所知,SHA1并不安全。若然,使用[SHA1PRNG]生成会话ID是个问题?
如果这是一个安全问题,那么另类的想法(通用)是什么?
答案 0 :(得分:1)
重点是:SHA1实际上已损坏,例如参见https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html
然而:这只是"只有"对于碰撞而言,它们需要数百个CPU小时的处理时间。
因此有两点是相关的: - 你必须有一个起点,用于计算碰撞 - 你没有会话ID,因为如果它被泄露没有任何帮助。 - 会话仅在几个小时内有效
我不会将其视为安全风险,至少对于短期会话ID
答案 1 :(得分:1)
简短回答:即使sha1坏了,sha1-prng也没有被破坏。
答案很长:
加密散列函数需要具有许多不同的属性,最常见的属性是:抗冲突性,预图像电阻和第二预映像电阻。但是我们还想要其他属性,即使它们可能没有意义,例如“看起来像是一个随机的oracle”。我们要求这些属性,以便哈希函数可以用于各种疯狂的方式,人们可以认为它们从中获得安全性。
但实际上,不同的构造依赖于底层哈希函数的不同属性。 Sha1尤其取决于预图像电阻,而不是抗冲击性或第二预图像电阻。
我们知道可以在sha1中找到碰撞(我们已经知道了很多年但是最近才发布了第一个例子碰撞)。但没有人提供证据证明sha1的其他所需属性不满意。
因此,如果使用sha1,则需要抗冲突的构造被破坏,而不需要此属性的构造可能仍然可以。 Sha1-prng的安全性不需要抗冲击性。 HMAC-sha1也没有(我知道很多人也想知道那个)。