【问题标题】:How to validate the randomness of ECDSA signature generated using HSM?如何验证使用 HSM 生成的 ECDSA 签名的随机性?
【发布时间】:2019-10-16 13:54:24
【问题描述】:

我需要以编程方式(使用 Python)验证使用 HSM RnG 生成的签名是否实际上是随机的。

没有在网上找到太多内容,因此将不胜感激!

如何验证使用 HSM 生成的 ECDSA 签名的随机性?

【问题讨论】:

  • 欢迎来到密码学。编程问题在这里是题外话,即使以这种形式,它也将在 SO 中被关闭和否决。因此我没有要求迁移。
  • 这不是你可以通过检查输出来验证的(除非它被严重破坏了)。您需要一个模型来了解设备内部的工作方式。如果您先验不信任 HSM,则查看输出无法让您对其充满信心。

标签: random cryptography signature ecdsa hsm


【解决方案1】:

正如 Squeamish 在 cmets 中指出的那样,实际上没有任何方法可以确保随机数生成器的结果是真正随机的。例如,它可能只是 Pi 在某个特定位置的输出。通常,您必须信任该平台的 FIPS 或 Common Criteria 认证,但请注意,两者都不是无懈可击的。

此外,您还可以依靠 HSM 公司想要赚钱的事实。肯定会失去(全部)市场份额的一种方法是表明你不能被信任。包括 RSA Labs 在内的多家公司已经发现这一点对他们不利。如果您不完全信任 HSM 公司,请不要从他们那里购买任何东西;但请注意,实际上并不存在完美的安全性


也许可以做一些简单的实验。如果您要求使用相同的数据生成签名,那么您永远不应获得相同的签名(ECDSA 的 r 和 s 值)。这表明RNG的输出至少不会重复。使用多个连接/会话进行一次测试可能是个好主意。

您还可以验证然后连接所有生成的 x 值(用于最终比较),然后对其运行随机性测试(例如顽固套件)。


最后,如果您不信任 HSM 的 RNG 的熵源,请注意您可以向 HSM 添加额外的种子。请查看您的 HSM 文档,它对添加/混合种子有何反应。

【讨论】:

  • 这是正确的Cryptography 答案,而不是Stack Overflow 答案。我认为这个问题应该留在Cryptography。提问者想要一个 SO 答案,但没有 SO 答案的事实是 Crypto 答案。
【解决方案2】:

This article 概述了检查某些给定数据的随机性的方法:

二进制序列有许多实际的随机性度量。 这些包括基于统计测试、转换和 复杂性或这些的混合。一种广为人知且应用广泛的 测试的集合是 Diehard Battery of Tests,由 马萨利亚;这被 L'Ecuyer 扩展到了 TestU01 套件,并且 西马德。使用 Hadamard 变换来测量随机性是 由 S. Kak 提出并由 Phillips、Yuen、Hopkins 进一步发展, Beth 和 Dai、Mund、Marsaglia 和 Zaman。

NIST Special Publication 800-22 中定义了一个标准化的测试套件。

还可以查看this discussion

【讨论】:

  • 这是在另一种意义上测量随机性。这是一个非常复杂的话题,但基本上这些是估计某些类型数据的信息论复杂性或熵源的熵水平的方法。它不适用于具有 ECDSA 签名等固有结构的数据:它会将深层结构误报为随机性,因为它无法识别该结构。
猜你喜欢
  • 1970-01-01
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-30
相关资源
最近更新 更多