我正在学校处理一些计算机安全问题,我对一般编程公共偏好,习俗,想法等感兴趣。如果你必须使用随机数发生器或提取器,你选择哪一个?你为什么选择它?数学属性,已经作为包实现或出于什么原因?你自己编写或使用一些包吗?
答案 0 :(得分:4)
如果计算时间不是对象,那么Blum Blum Shub(http://en.wikipedia.org/wiki/Blum_blum_shub)就不会出错。从非正式的角度来说,它至少与整数分解一样安全(难以预测)。
答案 1 :(得分:2)
dev/random
,或您平台上的同等产品。
它返回设备驱动程序提供的熵池中的位。无需担心数学属性。
如果您正在使用加密安全的PRNG,那么通常需要重复将安全散列应用到大型种子阵列。但是,不要发明自己的算法,请选择Fortuna或其他合理评价的版本。
答案 2 :(得分:2)
据说美国和苏联总统之间的电话加密密钥是由宇宙射线产生的。我们在大学的物理实验室检查过它们 - 它们的能量产生真正的高斯分布。 ;-)因此,对于最佳加密,您应该使用这些,因为这样的随机序列无法重播。当然,除非你的对手暗中在你的随机数发生器附近建立一个粒子加速器。
啊......关于计算机......好吧,获取一个来自物理的,而不是计算的流。 / dev / random是一个最简单的解决方案,但是你手工制作的Geiger-counter连接到USB可以提供最好的随机性。
答案 3 :(得分:1)
对于一个小型的学校项目,我会使用操作系统为随机数生成提供的任何内容。
对于严肃的安全应用程序(例如:COMSEC - 级加密),我使用硬件随机数生成器。根据定义,没有硬件访问的纯算法不会产生随机数。
答案 4 :(得分:0)