【发布时间】: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