Author

Topic: 能否用已有的300000block生成时间来计算实际的51%的攻击概率呢? (Read 1308 times)

newbie
Activity: 37
Merit: 0
有可能,不过技术难点比较多
newbie
Activity: 21
Merit: 0
member
Activity: 112
Merit: 100
分析很复杂,其实51%攻击打个比方,就好象拥有核武的国家会不会使用核武一样,只要是理性人,一定不会。
所以为什么美国和西方要阻止朝鲜和伊朗发展核武?因为这类国家没底线,无法捉摸。
这个比方不错,什么人都有啊.
是啊
newbie
Activity: 27
Merit: 0
分析很复杂,其实51%攻击打个比方,就好象拥有核武的国家会不会使用核武一样,只要是理性人,一定不会。
所以为什么美国和西方要阻止朝鲜和伊朗发展核武?因为这类国家没底线,无法捉摸。
这个比方不错,什么人都有啊.
newbie
Activity: 27
Merit: 0
楼主能否讲得更详细些,先谢了.
member
Activity: 64
Merit: 10
技术问题,还需要大神回答
member
Activity: 69
Merit: 10
member
Activity: 73
Merit: 10
百发之51的攻击是肯定的,POW就是这样,没有办法的啊。
full member
Activity: 128
Merit: 100
member
Activity: 68
Merit: 10
1、中本聪比你聪明

2、好好学习。
哈哈,中本聪牛逼
hero member
Activity: 966
Merit: 587
1、中本聪比你聪明

2、好好学习。
legendary
Activity: 1148
Merit: 1000
表示支持!

很好一个概率估计方法。

赞一个。 Grin
member
Activity: 112
Merit: 10
分析很复杂,其实51%攻击打个比方,就好象拥有核武的国家会不会使用核武一样,只要是理性人,一定不会。
所以为什么美国和西方要阻止朝鲜和伊朗发展核武?因为这类国家没底线,无法捉摸。
full member
Activity: 128
Merit: 100
我也不懂技术,用着好用就行
newbie
Activity: 6
Merit: 0
只要安全就好了,技术不大懂。
member
Activity: 70
Merit: 10
legendary
Activity: 896
Merit: 1000
技术性问题可以跟@jh2012共同探讨
他的自管理板块:https://bitcointalksearch.org/topic/300000block51-657678
full member
Activity: 166
Merit: 100
太技术性的东西不太懂,这样计算的攻击概率是多少?
jr. member
Activity: 59
Merit: 10
有可能,不过技术难点比较多
sr. member
Activity: 462
Merit: 250
newbie
Activity: 32
Merit: 0
full member
Activity: 126
Merit: 100
newbie
Activity: 5
Merit: 0
如何计算实际的51%的攻击概率呢? 全文见http://blockindex.info/blog/51.html

bitcoin创建到现在总计产生30多万个block, 我们可以用这30多万个block的时间来估算51%攻击实际的概率和需要的时间

以下以6个confirm为例,来计算实际可能的概率

正常的 blockchain, 我们称之为C

[]----->[]----->[]----->[]----->[]----->[]----->[] C blockchain
诚实节点计算的 A blockchain

攻击节点计算的 B blockchain

[]----->[]----->[]----->[]----->[]----->[]----->[] A blockchain
        \
         []----->[]----->[]----->[]----->[]----->[]----->[] B  blockchain
分别计算每连续6个block的生成时间间隔:

t1 = blk5.time - blk0.time t2 = blk6.time - blk1.time ..... tx = blkn.time - blk(n-5).time

这样得到100%算力的C的连续生成6个块的时间集合 {t1,t2,t3....tx} TC1

然后用同样的方法计算连续生成7个block的时间间隔, 得到100%算力的C的连续生成7个块的时间集合 {t1,t2,t3....} TC2

对TC1绘图,得到正常的C blockchain 连续生成6个block时间分布曲线

x为连续的6个block

y为生成连续的6个block的时间

时间分布曲线
http://blockindex.info/blog/imgs/6.png

对时间排下序得到下图,可以得到连续生成6个block需要的最少时间和最多时间

时间分布曲线
http://blockindex.info/blog/imgs/6s.png

然后对T1计算,每间隔10秒内Tx的数目, 得到{len(T1...Tx),len(Tx+1....Tx+n)....},得到密度分布曲线,如下
http://blockindex.info/blog/imgs/6d.png
时间分布曲线

上图可以看出连续生成6个block需要的时间

每隔20000个block分别计算密度分布,难度应该变化10倍左右,算力变化x倍,发现block生成时间密度曲线基本重合

http://blockindex.info/blog/imgs/xd.png
 
把A和B看成一个独立的blockchain,则 A,B生成block概率的密度分布应该和C一致,但是由于A,B的算力下降,所以把时间轴等比缩放,

A 连续生成6个块需要的时间集合{t1,t2,t3....} TA = TC1 * 100/(1-49)

B 连续生成7个块需要的时间集合{t1,t2,t3....} TB = TC2 * 100/(1-51)

时间分布曲线
http://blockindex.info/blog/imgs/51d.png
得到A,B的曲线(左边为A,右边为B),和A可能的连续生成6个block的时间集合TA,和B连续生成7个block的时间集合TB

现在问题转化为在TA中随机选一个时间,大于TB中任意元素的概率

代码如下:

AB为有序集合,从小到大依次排列

AB中任意取元素a,b, 计算a>b的概率

def AB (A,B):
    N = []
    qz = 0.0
    for i,a in enumerate(A):
       n = 0
       for b in B:
          if a<=b: break
          else: n+=1
       N.append(n)
    return  float(sum(N))/(len(B) *len(A))
实际的计算结果

51% 算力攻击, height高度为280000~300000, 20000个block的生成时间密度计算成功的概率为

z=0 P=1.000000
z=1 P=0.25991752883
z=2 P=0.327356211643
z=3 P=0.362791063488
z=4 P=0.38572021231
z=5 P=0.402129295953
z=6 P=0.41492854999
如果觉得20000个样本不够,那么以height高度为200000~300000的, 100000个的生成时间密度计算成功的概率为

z=0 P=1.000000
z=1 P=0.258909623337
z=2 P=0.327897207064
z=3 P=0.363898341947
z=4 P=0.387023480539
z=5 P=0.403786580212
z=6 P=0.416886094841

全文见http://blockindex.info/blog/51.html
Jump to: