在比特币区块链中,所有参与节点都在遍历寻找一个随机数,节点算力输出越大就越有可能遍历到这个随机数,也就能够抢到这一轮的记账权,这个过程通常被称为“挖矿”。各参与节点在遍历随机数的过程中也在不断地验证其他节点的交易信息,抢到记账权的节点会把所有相关的信息广播出来,全网中所有参与节点在共同验证了广播出来的信息之后就会形成一个区块,紧接在上一个区块的后面,形成一条区块数据链。 随机数如何抵抗重放攻击? 定义: 特性:模拟中使用的一般是循环周期极长并能通过随机数检验的伪随机数,以保证计算结果的随机性。 种类: 产生随机数的过程[2]: 第一步:假设我们手头已经有一串数字,我们称它们为种子。对这些种子用递归法,“随机地(其实并不是)”生成一连串0到某个自然数N之间的自然数。 梅森旋转法(循环周期长,速度快) 平方取中法(速度快,但是很容易生成循环周期短的数列,还有很多不动点)[4] Lagged Fibonacci generator(独立性不好) 第二步:把这些随机生成的自然数转换成0到1之间的实数 (比如通过除以N来得到)。如果这样生成的伪随机数能够通过许多不同的统计检验,达到了“以假乱真”的程度,我们就厚脸皮地认为自家程序已经聪明地会生成[0,1]上均匀分布的独立样本啦! 统计检验: 在一定可靠性程度上对一个或多个总体分布的原假设作出拒绝还是不拒绝(予以接受)结论的程序。 差异显著性检验: 决定常取决于样本统计量的数值与所假设的总体参数是否有显著差异。在一定可靠性程度上对一个或多个总体分布的原假设作出拒绝还是不拒绝(予以接受)结论的程序。——最终结果是拒绝或者不拒绝 第三步:利用这串“从零到一均匀分布的随机数”,把它们用某些算法来转换成其他分布的随机数——转换的是固定的函数并不是想转换什么函数就可以转换 逆函数法Inverse transform sampling(为了提高速度,会用数值方法取逆函数,这样做的缺点是会产生误差) Von Neumann舍选法Rejection samplin(提高其效率的关键是讲其中的常数C取得越小越好) Box Muller算法(Box 生成正太分布) Marsaglia polar method (对Box Muller算法的改进,不需要用到sin和cos函数) Marsaglia-Bray method(生成正态分布,97%的情况下无需用到复杂函数) 产生伪随机数需要注意的地方: 伪随机数的意义:如果不考虑浮点精度,伪随机数和真随机的统计规律完全一致,也就是人类无法通过不断尝试并统计来判断随机数产生器是伪随机还是真随机,当赝品和真品各方面表现都一致的时候,实用角度就不需要真品了。纠结产生方式没有意义的。 在计算机程序中,不存在“不确定”的数字,只有确定的“1”和“0”。基于这种特性,计算机无法生成“真正的(不确定的)随机数”——赝随机数 程序和算法本身不能产生真随机,但是我们想办法可以迂回产生统计意义上的真随机。通过输入一个真正意义上的随机数
随机数在区块链中作用以及使用过程[3]:
现代信息安全体制做到以下几点,使得系统的安全性要求不受影响:
应用广泛:
随机数的分类[1]、[2]:
1.伪随机:
RANDU
) (但是如果是multiplicativ
的话,在n维空间里的点都在有限个超平面里,这些伪随机数的独立性不佳)
⎩⎪⎨⎪⎧X0=SEED,Xn=(A∗Xn−1+B)(ModM)Rn=Xn/M设定初始值
Xn+1=(Xn2/10s)(mod102s)Rn+1=Xn+1/102s float Xn=12345; //Seed & Iter float Rn; //Return Val void InitSeed(float inX0) { Xn=inX0; } float MyRnd() { //implementation: Xn+1=(Xn^2/10^S)(mod 10^2S) Xn=(int)fmod((Xn*Xn/pow(10,S)),pow(10,2*S));//here can's use % //implementation: Rn+1=Xn+1/10^2S Rn=Xn/pow(10,2*S); return Rn; }
# 从均匀分布转换到其分布函数的时候,这样的映射就使得最后就不是均匀分布,使别人看起来就是随机的了 R = np.random.uniform(rmin, rmax, N) # 获得随机均匀分布的从rmin-rmax的区间 X = invCDF(R) #最终结果,后面的都是画图的以及相关处理
''' 基本的rejection methold步骤如下: 1. Draw x uniformly from [xmin xmax] 2. Draw x uniformly from [0, ymax] 3. if y < w(x),accept the sample, otherwise reject it 4. repeat 即落在曲线w(x)和X轴所围成区域内的点接受,落在该区域外的点舍弃。 例子:下面的代码使用basic rejection sampling methold在区间[0, 10]上生成随机数,其概率密度近似为P(x)=e-x ''' # 循环舍弃接收点 while (accepted < N): # pick a uniform number on [xmin, xmax) (e.g. 0...10) x = np.random.uniform(xmin, xmax) # pp(x) # pick a uniform number on [0, ymax) y = np.random.uniform(0, ymax) # Do the accept/reject comparison if y < P(x): samples[accepted] = x accepted += 1 count += 1 #计算出最后循环的次数
2.真随机:
3.(赝随机数)计算机无法生成真随机的原因:
参考文章:
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算