【问题标题】:Is it safe that JDK 8 uses SHA hash algorithm at KeyStore.load? [closed]JDK 8 在 KeyStore.load 中使用 SHA 哈希算法是否安全? [关闭]
【发布时间】:2020-02-07 10:32:13
【问题描述】:

JDK8 在其JavaKeyStore 类中使用SHA 算法。

从源代码中,您可以看到在engineLoad 期间 - 如果提供密码 - 它会根据提供的密码生成一个 SHA MessageDigest。如果我正确获取代码,则密钥库的条目会提前使用密码进行签名。 SHA-Password-MessageDigest 用于通过将存储的哈希值与计算的哈希值进行比较来检查完整性 - 对于每个条目。

由于已知 SHA 在某些情况下不安全,因此运行时扫描程序会生成安全性调查结果。使用 Java 的 KeyStore(例如 Apache Kafka)的软件可能会受到影响。

我想知道这个安全问题在实践中有多严重。可能的攻击媒介有哪些?

我想听听别人的评价。

【问题讨论】:

  • crypto提问。
  • @JamesReinstateMonicaPolk 这是关于 API 的,需要通读 Java 代码才能对其进行任何类型的评估。我认为这里实际上更好。
  • IMO 这是on-topic,因为它是与“程序员常用的软件工具”(JDK)和“软件算法”(SHA)相关的“实用编程问题”(安全性)。 IMO,不适用任何离题类别。

标签: java security java-8 cryptography


【解决方案1】:

不,这是绝对不安全的。每当使用密码加载 Java KeyStore (.jks) 时都会使用它。然后它根据读取的数据计算这个可怜的人的 MAC,然后 将其与存储的密码哈希值进行比较

由于它只计算内容、密码和静态魔法字符串"Mighty Aphrodite" 的 SHA-1,因此非常容易执行,例如字典或彩虹表攻击。您甚至可以通过简单地首先计算数据并存储中间哈希值来显着加快速度。所以它不是不安全的,因为它大量使用损坏的 SHA-1 哈希 - 虽然这也是一个问题 - 但因为它可以很容易地恢复使用过的密码。使用具有高迭代次数的 PBKDF2 并在密码安全性不足的情况下发出警告可以避免此问题。

当前的 SHA-1 攻击仍然需要预先计算,我们可以假设密钥库内容通常不是由对手预先计算的。尽管如此,SHA-1 还是被破坏了 w.r.t。抗碰撞性,因此文件的完整性不能完全保证

我看不出长度扩展攻击会使情况变得更糟,因为条目是在使用密码之前读取的,所以幸运的是它应该没问题。然而,更换密码根本不是问题,这可能会被用于社交攻击(您是否使用了错误的密码“hi”来保护它?也许您应该更换该密码?)。

请注意,从 Java 9 开始,您确实应该使用比 JKS 更好的密钥库(例如 PKCS#12 密钥库)。

【讨论】:

  • 看来 PKCS12 密钥库至少早在 Java 6 时就受到了开箱即用的支持。
  • 是的,但是他们缺乏功能(基本上只接受带有证书链的私钥),如果我没记错的话,它在 9 中得到了修复。
  • 很好,我相信确实如此。
【解决方案2】:

JavaDoc 明确表示这样做的意图是

防止篡改密钥库

这一切都取决于您的安全目标。

由于众所周知 SHA 不安全

SHA 并非“不安全”。这是一个过于简单化的评估。对于散列密码来说,它太快了。对于许多其他用例来说,它是完全“安全”的。

显然,密钥库不是密码,因此安全目标是不同的。密钥库是本地文件。通常,如果恶意用户可以物理访问您的计算机,那么这场战斗就已经失败了。

在这种情况下,哈希比其他任何东西更多地用于完整性和真实性。在这种情况下,SHA 是一个不错的选择。

【讨论】:

  • 感谢您的意见。我根据您的反馈重新表述了我的 SHA 声明。
  • It is perfectly "safe" for many other use-cases.? 如果我们假设 SHA 表示 SHA-1,那么它并不完全安全In 2020, SHA-1 practically broken in chosen-prefix collision (CP-collision). Can double SHA-1 hashing prevent CP-collision?/ 前映像电阻和次映像电阻都可以,但是,它不能防止碰撞。 SHA-1 在 2011 年左右从推荐中删除,具有讽刺意味的是,这等于 1997 年、2011 年的版权日期
  • ...在这种情况下,SHA 是一个不错的选择... 这也是一种过于简单的评估。这里使用的散列结构似乎是一种直接使用密码的 ad-hoc MAC 技术。它从未被分析过,没有专家的意见就没有理由相信它的安全性。我并不是说它不安全,但我没有看到任何分析来支持您的说法,即这是一个“不错的选择”。
  • ...所以安全目标不同... 没错,但攻击者#1 的目标是相同的;找回未知密码。
  • 好吧,私钥是单独保护的,完整性保护还是有用的。但是,是的,没有充分保护密钥库的密码肯定是一个问题 - 可能是一个巨大的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-30
  • 2015-10-19
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
  • 2013-04-24
相关资源
最近更新 更多