假设我要从/ dev / random中获取一千兆字节左右的随机数据,适合一次填充(因此/ dev / urandom消失了。)如何为我的/ dev / random注入足够的熵来做到这一点?我正在为此寻找特定的命令和程序。我不想买任何东西。我正在使用Arch Linux,如果有帮助的话。
Here — type something:
然后以比人所能控制的精度更高的精度来测量击键之间的时间增量?
假设我要从/ dev / random中获取一千兆字节左右的随机数据,适合一次填充(因此/ dev / urandom消失了。)如何为我的/ dev / random注入足够的熵来做到这一点?我正在为此寻找特定的命令和程序。我不想买任何东西。我正在使用Arch Linux,如果有帮助的话。
Here — type something:
然后以比人所能控制的精度更高的精度来测量击键之间的时间增量?
Answers:
不幸的是,/ dev / random也不适用于一次性垫板,至少不适合大多数人在考虑或实施一次性垫板时想到的那种一次性垫板(具有可证明的安全性保证)。以下大多数信息摘自http://www.2uo.de/myths-about-urandom/上的(很长)文章。
问题是/ dev / random不是真正随机的。它使用CSPRNG生成其输出。实际上,/ dev / random使用与/ dev / urandom完全相同的CSPRNG。唯一的区别是,如果/ dev / random的内部熵估计不足,则会阻塞。
前一句中的“估计”一词是关键。大多数人认为此估算始终是准确和完美的,但实际上并不完全准确。估计错误的那一刻,您将失去一次性保护垫的所有可证明的安全保证,而剩下的只是计算安全性-这比使用/ dev / urandom更好!
使熵估计有点错误并不会使您的一次性垫子有点不安全。一次性垫可证明的安全保证是全部或全部。
这个问题的前提是可以通过添加更多的熵来“解决” / dev / random问题。不幸的是,这个前提是错误的。恶意的熵源要比根本没有熵差得多,因为熵源通常可以访问内部数据,并且可以使用RNG输出秘密导出此数据-请参阅http://blog.cr.yp.to/20140205-entropy .html进行完整的讨论(在此不胜枚举)。特别是,从安全的角度来看,熵的硬件来源(如其他几个答案所建议的)是一个非常糟糕的选择,因为该硬件处于处理恶意行为的首要位置,并且基本上是不可审计的。
似乎硬件组件是最好的主意。那里有一些硬件发生器IC,但是当它们出现时,您必须信任它们。
可能两个不错的解决方案是诱导组件产生噪声。两种主要的解决方案似乎是温度偏差和二极管产生的avanche噪声(请参阅http://web.archive.org/web/20061117145903/http://willware.net:8080/hw-rng.html)
随着陀螺仪和加速度计等组件变得越来越敏感,使它们以最高灵敏度工作,并且使用其LSB值也是一个不错的解决方案,但AFAIK对此没有人进行审核。
有趣的是,关于不使用RNG的论文很多,但是没有公开和验证过的硬件实现
您可以使用pycsprng.py。密码安全吗?我不太确定,但我想进行同行评审。
python pycsprng.py | pv | dd of=data.file bs=1024 count=1000
管道pv
是可选的,只会帮助您了解已传输了多少数据。
您可能会发现,较大的块大小(bs)可提高性能。如果增加块大小,则必须调整计数以不生成太大的文件。
/dev/urandom
...
当您不插入麦克风时,从模拟麦克风通道获得的信息通常只是静态的。例如,将其通过bzip2进行管道传输以进行美白,然后将其与其他随机性源(urandom或另一个麦克风插孔)混合,或者将结果通过openssl进行管道传输以获得良好的测量效果,并且得到的结果应该是相当随机的。
但是,将很难证明有关结果随机性的任何硬性和快速性安全性。
如果您在amd64 / x86_64处理器,虚拟或物理环境上使用Linux内核2.6.9或更高版本,则可以尝试ncomputers.org/pandom一个真正的随机数生成器,该生成器通过64位ubits / 64位提供8 KiB / s的熵通过/dev/random
要生成100 MB的硬件生成的随机数据,您可以:
使用计算机的内置麦克风(笔记本电脑上提供)录制20分钟的音频(96khz 16bit单声道)。您将获得〜220 MB WAV文件。
丢弃一些无用的位,并用一些数学方法将二进制数据的位进行混洗(许多方法可以这样做)
将改组后的位导出为〜100 MB二进制文件
这是有关此的文章:尝试使用音频(和计算机的内置麦克风)生成真实的熵和随机数据。