随机数——计算机有没有办法得到真正的随机数

justoday 2007-01-19 10:37:10
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);
}

...全文
1361 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
mapping_ping 2007-08-14
  • 打赏
  • 举报
回复
学习中!
justoday 2007-01-24
  • 打赏
  • 举报
回复
intel的TIRNG?
我去了解一下这鬼东西,

贴子太长了,该结了不
有问题再来请教,谢谢各位
WingForce 2007-01-23
  • 打赏
  • 举报
回复
linux不是自称可以产生真随机数?

所谓熵池的概念,取用户指定的噪音源(人机界面输入,硬件操作时间间隔)输入熵池,增加熵池的熵估计;在用户需要随机数时,hash这个熵池输出随机数,同时从熵池中删除一定的数据,在减少熵池的熵估计值。

既然linux使用这种办法,应该是经过数学证明的,产生的随机书不但随机而且可以平均分布
laomai 2007-01-23
  • 打赏
  • 举报
回复
从理论上讲,破解cpu周期也不是不可能的,只要
1、每个cpu周期的值是一个常量
2、能精确的知道每条指令的周期数
3、用自动执行脚本精确的指定某个程序在指定的时间点开始运行,那么从理论上讲,
这个程序得到的cpu周期数是可以预先知道的
laomai 2007-01-23
  • 打赏
  • 举报
回复
昨天回去想了一下,你的随机数应该属于古典概型,每个结果的可能性是均等的,所以从理论上说,用cpu的电流是不合适的,因为他好象是正态分布,用cpu周期好象也有问题,
因为这是一个循环函数?取摸运算之后得到的应该不是线性的,
晨星 2007-01-23
  • 打赏
  • 举报
回复
嗯,是的。
chenhu_doc 2007-01-23
  • 打赏
  • 举报
回复
老大说的intel的TIRNG?
http://www.cryptography.com/resources/whitepapers/IntelRNG.pdf
晨星 2007-01-23
  • 打赏
  • 举报
回复
但一方面只想凭一般个人能力,另一方面又想抵挡高成本的攻击,那总归就不是件容易的事了。
chenhu_doc 2007-01-23
  • 打赏
  • 举报
回复
看了些ieee上的pdf, 确认了: 模拟随机数终久不是完全随机的。
justoday 2007-01-23
  • 打赏
  • 举报
回复
不是说了吗?有钱的话买直接买硬件就是解决了吗?
比如Intel的随机数发生器
------这是最后的绝招,一般情况不随便用,
现在还是主要考虑我们自己能力之内的事

检测CPU温度再乘以风扇的转速……
-----早先一点的板都不支持这些功能,要不然可能是个不错的选择
BluntBlade 2007-01-23
  • 打赏
  • 举报
回复
检测CPU温度再乘以风扇的转速……
晨星 2007-01-23
  • 打赏
  • 举报
回复
经济效益?
不是说了吗?有钱的话买直接买硬件就是解决了吗?
比如Intel的随机数发生器。
laomai 2007-01-23
  • 打赏
  • 举报
回复
cpu的电流是不合适的,因为他好象是正态分布,-----这个我不是很了解
这个好象在概率论的课本说过,很多常见的值域稳定的物理量都是正态分布的,不然它就工作不正常了,呵呵
justoday 2007-01-23
  • 打赏
  • 举报
回复
cpu的电流是不合适的,因为他好象是正态分布,-----这个我不是很了解

用cpu周期好象也有问题,
因为这是一个循环函数?取摸运算之后得到的应该不是线性的,
连续的循环数, 对于同一个数的模来说应该是线性的
justoday 2007-01-23
  • 打赏
  • 举报
回复
WingForce(初六,履霜,坚冰至。)

我现在也就是想找一下可靠的噪声源

steedhorse(晨星)
比如键盘敲击,鼠标移动,网络流量,线程数目 
----这些东西 可能在连续的时间内没有变化,如果根本没有人操作这台机器
CPU占用率 -----还可以考虑

其实在大多数情况下,毫秒级的系统Tick已经够难对付了。
------难吗? 不难!
没有经济利益,那你发几天,几个月来搞这东西,那当然难
但如果破出来有经济利益...总有人去做
晨星 2007-01-23
  • 打赏
  • 举报
回复
其实在大多数情况下,毫秒级的系统Tick已经够难对付了。
justoday 2007-01-23
  • 打赏
  • 举报
回复
1、每个cpu周期的值是一个常量------------这点成立
2、能精确的知道每条指令的周期数---------可以算出.但关键还要知道 两次调用 之间执行过多少指令,这个也是不确定的
3、用自动执行脚本精确的指定某个程序在指定的时间点开始运行,那么从理论上讲,
这个程序得到的cpu周期数是可以预先知道的
------再放宽一下条件:运行,这个程序的电脑你无法接触. 
换句话说,就是你不能在这台机器上运行这个脚本, 是不是相对安全一点
晨星 2007-01-23
  • 打赏
  • 举报
回复
采样各种可能的信息,比如键盘敲击,鼠标移动,网络流量,线程数目,CPU占用率……放大到同样的scale,运算hash之,应该也算可以吧。
谁能破就让他破去吧。。。- -b
chenhu_doc 2007-01-22
  • 打赏
  • 举报
回复
Random numbers are numbers that occur in a sequence such that two conditions are met: (1) the values are uniformly distributed over a defined interval or set, and (2) it is impossible to predict future values based on past or present ones. Random numbers are important in statistical analysis and probability theory.

chenhu_doc 2007-01-22
  • 打赏
  • 举报
回复
you can use a perpheral to simulate ten ping-pongs that just like a lottery machine.
加载更多回复(19)

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧