【问题标题】:How to generate random seed for random numbers如何为随机数生成随机种子
【发布时间】:2021-05-15 07:54:06
【问题描述】:

我正在尝试为公钥和私钥生成大随机数。我对在客户端生成随机 256 位私钥的初始种子有疑问。 如您所知,我们不应该在 C 中使用 randsrand 函数,因为它很容易被破坏。
如何生成随机种子来生成随机 256 位私钥?
我使用 GMP 的线性同余算法在 C 中生成随机数。

【问题讨论】:

  • Re“我使用 GMP 的线性同余算法在 C 中生成随机数”:你是说你想为种子使用高质量的真正随机源,然后你将使用简单的线性同余算法从中生成数字?这不是一个好主意。
  • @EricPostpischil 感谢您的评论。你对高质量的随机数有什么建议?我应该使用哪种算法?
  • 您是否有理由不为此使用加密库?它应该使用最好的可用随机源来生成其密钥。
  • @Barmar 感谢您的评论。你推荐哪个图书馆?我知道的唯一好的库是 openssl。

标签: c public-key-encryption private-key gmp diffie-hellman


【解决方案1】:

在 unix 系统上,您可以从 /dev/random/dev/urandom 文件中读取一些“随机”字节序列。这些序列基于您的系统熵。 有关它们之间差异的更多详细信息,请参阅this 帖子。

#include <unistd.h> // read
#include <fcntl.h>  // open
#include <stdio.h>  // printf

int main(void)
{
    int             fd;
    unsigned int    seed;

    fd = open("/dev/urandom", O_RDONLY);

    read(fd, &seed, sizeof seed);

    printf("%u\n", seed);

    //  Then you can use srand with your new random seed

    return (0);
}

注意:打开阅读后不要忘记检查错误,使用后关闭fd

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2013-08-23
    • 2017-08-29
    • 1970-01-01
    相关资源
    最近更新 更多