在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中读取的信息少。目的是用作加密安全的伪随机数生成器。这可能用于不太安全的应用程序。