随机数——计算机有没有办法得到真正的随机数
rand 这鬼函数大家都知道,很容易破解
需要的是 一种不能在两台机器上产生出相同系列的随机数
现在想到的方法 是利用不同时刻 读取CPU内部定时器的值,
这个值 相对于某个数的余数是随机的
测试了一下, 这样的随机分部是比较均匀的,基本能满足需要
我自己想不出这样随机数的破解方法 但还是不放心
1. 各位帮忙看看这样产生随机数的方法 是不是理论上可行的
可能存在的破解方法
2. 也希望有大吓能 提供更好的方法
int RndNum(int rang)
{
if(rang < 1)
rang = 1;
__int64 cnt;
_asm
{
rdtsc//rdtsc 可以得到 CPU 内部定时器的值, 每经过一个 CPU 周期, 这个定时器就加一
mov DWORD PTR cnt, EAX// 当远远大于 rang时,取的随机值感觉上比较好
mov DWORD PTR (cnt +4), EDX
}
int r = cnt % rang;
return(r);
}
[解决办法]
方法太多了,^_^
hash你现在屏幕上的象素信息
得到主板检测的热量(如果你的主板有这种API的话)
哈希csdn上的滚动新闻标题
...
[解决办法]
靠,原来是你这个家伙在我的地盘捣乱啊。
你总得把你的需求说明确点吧?
比如随机数的范围?
感觉你取cpu的记数器也不是真正的随机数,想办法的话应该还是破解的
[解决办法]
取当前鼠标的位置
当前系统硬盘剩余空间(虚拟使用内存)的大小,
………
[解决办法]
如果我用汇编的int 1a 读秒得到1-100的随机数,这是随机的么?
rand db ?
;assembly code
int 1A
mov rand, dl
[解决办法]
这个问题很久前就有人提过了
http://topic.csdn.net/t/20041104/10/3520245.html
看看这篇文章:
http://www-128.ibm.com/developerworks/cn/security/playing/index.html
[解决办法]
有专用的硬件卡设备应该也可以。
[解决办法]
从理论上讲,破解cpu周期也不是不可能的,只要
1、每个cpu周期的值是一个常量
2、能精确的知道每条指令的周期数
3、用自动执行脚本精确的指定某个程序在指定的时间点开始运行,那么从理论上讲,
这个程序得到的cpu周期数是可以预先知道的
[解决办法]
linux不是自称可以产生真随机数?
所谓熵池的概念,取用户指定的噪音源(人机界面输入,硬件操作时间间隔)输入熵池,增加熵池的熵估计;在用户需要随机数时,hash这个熵池输出随机数,同时从熵池中删除一定的数据,在减少熵池的熵估计值。
既然linux使用这种办法,应该是经过数学证明的,产生的随机书不但随机而且可以平均分布
[解决办法]
检测CPU温度再乘以风扇的转速……
[解决办法]
老大说的intel的TIRNG?
http://www.cryptography.com/resources/whitepapers/IntelRNG.pdf