【问题标题】:How to make deterministic random number generator?如何制作确定性随机数生成器?
【发布时间】:2013-07-20 19:33:54
【问题描述】:

我正在做一些密码学实验,现在我正在尝试制作一个确定性随机数生成器 (DRBG)。它应该是一个基于计数器模式的确定性随机位生成器,使用 AES-128 分组密码 NIST SP 800-90。

我有 OpenSSL 的源代码。在 OpenSSL 中,有两个函数 RAND_bytes()RAND_pseudo_bytes() 用作随机数生成器。

如何使用 AES-128 分组密码将此 OpenSSL 随机数生成器配置为基于计数器模式的 DRBG?

【问题讨论】:

  • 如果这是为了玩,制作 DRBG 并不难(即使是符合 NIST 的)。如果您想更高效地工作,那么您可以借用其中一种DRBG 实现。如果这是用于生产,那么首先问问自己,为什么要关心 RNG 是否具有确定性?
  • 它必须是确定性的,并且是为了生产目的
  • 开源 (GPL) 是否重要?你需要回溯阻力吗?你需要任何程度的预测阻力吗?
  • 您可以按照this question's 答案中的说明进行操作,但只需将基于 libc rand() 的实现替换为基于 AES 的 PRNG。如果您需要这部分的具体帮助,我建议您提出一个单独的问题并描述您迄今为止所做的工作。

标签: c random openssl cryptography


【解决方案1】:

您应该能够指定随机种子:

http://www.openssl.org/docs/crypto/RAND_add.html#

看来你还可以保存并重新加载生成的序列:

http://www.openssl.org/docs/crypto/rand.html

【讨论】:

  • 你能告诉我数字生成所采用的默认算法吗?我想要 aes-128 分组加密,如何配置?
  • @jithin 我没有直接使用该库的经验,抱歉。我试图回答的是如何使其确定性。也许你应该问另一个问题。
  • 这行不通。 OpenSSL 混合了额外的随机状态,因此序列不会基于种子重复。
  • @jww 我觉得这很有趣,您为什么不在单独的答案中详细说明?
  • Here 解释了为什么这不起作用。
猜你喜欢
  • 1970-01-01
  • 2018-05-20
  • 2016-01-16
  • 1970-01-01
  • 2020-03-09
  • 2013-10-10
  • 2020-01-15
  • 2015-12-24
  • 2010-12-15
相关资源
最近更新 更多