【问题标题】:How to use external random number generator with java.security.KeyPairGenerator?java.security.KeyPairGenerator 如何使用外部随机数生成器?
【发布时间】:2018-08-22 23:22:12
【问题描述】:

基本上我有一个 RNG 向数据库提供随机数,我想在生成密钥对时使用这些随机数。

根据我目前的理解,您可以初始化 KeyPairGenerator 提供随机源(SecureRandom 对象)。 查看 SecureRandom 文档,我只看到提供一个种子的可能性,该种子将在生成种子时用作“基础”种子(方法 generateSeed())。我说的对吗?

我是否必须创建自己的 SecureRandomSpi 类实现,其中 generateSeed() 方法基本上会返回从数据库中挑选的随机数?

希望有这方面经验的人提供建议。

感谢您的支持。

【问题讨论】:

    标签: java random key-pair secure-random


    【解决方案1】:

    我相信你可以只继承 SecureRandom,因为它有一个可访问的无参数构造函数。您应该查看 org.bouncycastle.crypto.prng 包中 bouncycastle 库类的源代码,尤其是 FixedSecureRandom 类,例如。

    【讨论】:

    • 感谢詹姆斯的回答并提供了一个我可以研究的例子。莱昂内尔
    • 嗨,James,我重新完成了这项任务并尝试了一个简单的示例,方法是继承 SecureRandom 并只为每个方法打印一条特定的消息。然后我做了以下测试:KeyPairGenerator keyGen = KeyPairGenerator.getInstance("ECDSA", "LunaProvider"); keyGen.initialize(P521EC(), new MySecureRandom()); keyPair = keyGen.generateKeyPair(); 我在控制台上得到的唯一日志是:**setSeed(long) **MySecureRandom constructor 阅读 SecureRandom javadoc,我预计会调用方法“nextBytes()”,但事实并非如此。你知道为什么吗?
    • LunaProvider?我确定它只使用内部随机数并忽略您提供的任何内容。
    • Luna SDK 文档的“SecureRandom Objetcs”部分,他们说可以提供例如 PRNG。并且它不会使用 Luna HSM 提供的硬件 RNG。这正是我想做的。我会尝试联系客户支持。
    • 与支持团队交流后发现,Luna 内部随机数生成器是唯一可行的。无法用外部随机数代替。
    猜你喜欢
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 2023-01-03
    • 2020-08-23
    • 1970-01-01
    • 2013-02-08
    相关资源
    最近更新 更多