在Linux / POSIX中,什么是Windows rand_s的最佳替代品?

时间:2020-03-06 14:35:28  来源:igfitidea点击:

问题不在于随机性本身(我们有兰特),而是在于加密安全的PRNG。在Linux或者理想的POSIX上可以使用什么? NSS有有用的东西吗?

澄清:我知道/ dev / random,但是它可能用完了熵池。而且我不确定/ dev / urandom是否保证是加密安全的。

解决方案

/ dev / random设备旨在用作加密安全位的来源。

使用/ dev / random(需要用户输入,例如鼠标移动)或者/ dev / urandom。后者具有一个熵池,除非该池为空,否则不需要任何用户输入。

我们可以像这样从池中读取:

char buf[100];
FILE *fp;
if (fp = fopen("/dev/urandom", "r")) {
    fread(&buf, sizeof(char), 100, fp);
    fclose(fp);
}

或者类似的东西。

从维基百科(我的斜体字):

与/ dev / random相对应的是/ dev / urandom("未锁定"随机源),它重新使用内部池来产生更多的伪随机位。这意味着该调用不会阻塞,但是输出所包含的熵可能比从/ dev / random中读取的信息少。目的是用作加密安全的伪随机数生成器。这可能用于不太安全的应用程序。