random - 如何验证使用 HSM 生成的 ECDSA 签名的随机性?
问题描述
我需要以编程方式(使用 Python)验证使用 HSM RnG 生成的签名是否实际上是随机的。
在网上找不到太多内容,因此将不胜感激!
如何验证使用 HSM 生成的 ECDSA 签名的随机性?
解决方案
正如 Squeamish 在评论中指出的那样,实际上没有任何方法可以确保随机数生成器的结果是真正随机的。例如,它可能只是 Pi 在某个特定位置的输出。通常,您必须信任该平台的 FIPS 或通用标准认证,但请注意,两者都不是无懈可击的。
此外,您还可以依靠 HSM 公司想要赚钱的事实。肯定会失去(全部)市场份额的一种方法是表明你不能被信任。包括 RSA Labs 在内的多家公司已经发现这一点对他们不利。如果您不完全信任 HSM 公司,请不要从他们那里购买任何东西;但请注意,实际上并不存在完美的安全性。
可以做一些简单的实验。如果您要求使用相同的数据生成签名,那么您永远不应获得相同的签名(ECDSA 的 r 和 s 值)。这表明RNG的输出至少不会重复。用几个连接/会话测试一次 - 可能是一个好主意。
您还可以验证然后连接所有生成的 x 值(用于最终比较),然后对其运行随机性测试(例如顽固套件)。
最后,如果您不信任 HSM 的 RNG 的熵源,请注意您可以向 HSM 添加额外的种子。请查看您的 HSM 文档,它对添加/混合种子有何反应。
推荐阅读
- java - 无法为 org.gradle.api.Project 类型的项目“:app”上的参数找到方法 buildTypes()
- docker - 为 traefik.docker.network 设置默认值
- java - 我们可以将 kamon 用于 Java 应用程序指标吗?
- python - gTTS 错误:另存为 wav 但另存为 MPEG
- c# - 来自具有最佳性能的 C++ 应用程序的 API
- java - log4j2 RollingFileAppender CronTriggeringPolicy 抛出 NoSuchFileException
- javascript - 使用依赖异步函数的 ngif 的正确方法
- javascript - 在 expressionProperties 中组合模型和布尔变量 - Formly
- javascript - AngularJs复选框的ngDupes错误
- c# - .Net Core 2.1 Web 和控制台 DbContexts