码迷,mamicode.com
首页 > 其他好文 > 详细

20199326 2019-2020-2 《网络攻防实践》综合实践

时间:2020-07-04 01:07:42      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:sum   积极性   wiki   关联   png   增加   显示   分析   策略   

一、论文简介

基本信息

论文标题:StrongChain: Transparent and Collaborative Proof-of-Work Consensus
论文出处:The 28th USENIX Security Symposium
论文作者:Pawel Szalachowski, Dani?l Reijsbergen, and Ivan Homoliak, Singapore University of Technology and Design (SUTD); Siwei Sun, Institute of Information Engineering and DCS Center, Chinese Academy of Sciences

概念解释

比特币:比特币是一种采用区块链技术的电子货币,现实社会中流通的货币必须有可信任的机构为我们担保,像银行,支付宝,我们可以把钱存里面,是因为他们是可信的。以上说的这些都是一些中心化的解决方案。而比特币,则是一种去中心化的货币。它采用区块链技术。

区块链:它是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次比特币网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。那么,比特币是怎么产生的呢,创始人中本聪(网名)设计的规则是,创建新的区块并加载到区块链中会触发新币生成,换言之,比特币是作为对维护区块链所付出劳动(即解决系统设置难题耗费的算力)的奖励。比特币创始人开发了创世区块(第一块),按我的理解啊,简单来说,中本聪对一串字符哈希了一下(具体规则不是我说的这样,我只是简单起见),生成了hash值,矿工们的任务就是找出这个对应的字符串。学过密码学的都应该知道,哈希函数是单向不可逆的。所以,矿工们只能通过穷举的方法来找这个字符串。这也是为什么叫他们矿工的原因。第一个找到的矿工会获取一定量的比特币。矿工辛辛苦苦挖出了矿,证明你有这个工作量了,奖励你点比特币,这就是工作量证明机制(PoW)--Proof of Work。比特币的数量是有限的,中本聪设计的就是2100万个币,刚开始奖励的币多一点,到了2020年,平均每10分钟只会产生12.5比特币。

女巫攻击(sybil attack):在对等网络中,攻击者通过伪造多个身份标识,以控制网络中大部分节点来削弱冗余备份。

区块:比特币的区块由区块头及该区块所包含的交易列表组成。区块头的大小为80字节,由4字节的版本号、32字节的上一个区块的散列值、32字节的Merkle Root Hash、4字节的时间缀(当前时间)、4字节的当前难度值、4字节的随机数组成。区块包含的交易列表则附加在区块头后面,其中的第一笔交易是coinbase交易,这是一笔为了让矿工获得奖励及手续费的特殊交易。区块大致结构如下图。
技术图片

内容简述

论文提出,比特币挖矿存在三个容易出问题的点,首先是激励不相容原则,无数矿工拼命挖矿,但是只要有1个人挖到,其他矿工的努力就白费了,只能转向新的区块。这种原则叫做激励不相容。其次,在某些情况下,矿商暂时不发布这个区块, 而是继续挖下一区块, 当发现网络上别人也挖出新区块时再发布这个区块, 这时就会出现分叉的情况,恶意节点可采用女巫攻击来伪造多个节点身份,使其他诚实节点相信他,可以获得更高的收益。最后,比特币是不可持续的。比特币是一种通货紧缩的货币,按照协议规则,大约在2140年,将不会产生新的硬币(上限为2100万),这意味着矿工们将只能获得交易费作为收入,所以要想维持下去,必然会增加交易费的数额才可维持。
这篇论文从以上三个问题触发,提出了透明与合作机制—StrongChain。而这个机制最核心的部分就是弱解的设计:
1、弱解是协议的一部分。
2、发现弱解的矿商会获得独立的奖励。
3、矿商有动力立即宣布自己的解决方案和附加别人的方案。

二、论文内容

挖矿过程

在比特币中,如果想生成一个新的区块并写入区块链,必须解出比特币网络出的工作量证明的谜题。这道题的关键的三个要素是工作量证明函数,区块和难度值。工作量证明函数是计算方法,也就是hash。区块头部是输入数据。难度值决定了这道题所需要的计算量。
如果上一个区块刚刚被建立,所以矿工就需要开始为找到下一个区块努力奋斗了。他们需要将上一个区块的头部信息作为输入,然后不断修改上一个区块头的nonce(随机数)的值。直到他们找到一个hash值h,满足下面的条件。这里的Ts代表着强头部的hash值。
技术图片
然后新的块就被建立了,并连在了上一个区块之后。上边说的是比特币挖矿的一般步骤,接下来说一下StrongChain。Strongchain又定义了一个Tw,也就是弱头部的hash值。弱头部也需要满足一定的条件,如下图。
技术图片
当其他节点的矿工找到满足这样条件的头时,他会把这个弱头加到弱头部列表里,并且广播给其他矿工,其他矿工收到信息后就会去验证这个是不是弱头,然后其他矿工再把弱头加到弱头部列表里。接下来说一下具体的算法逻辑,下面是用到的算法,一个一个分析。
挖矿函数
首先是让弱头部数目归零。然后就是一个工作量证明过程,循环产生随机数nonce,然后产生块头,对块头进行hash,得到htmp,然后分别于Ts和Tw比较,如果htmp小于Ts,那说明已经找到合适的块头了,可以创建区块了,这里createBlock函数传入了3个参数,hdr表示块头,weakHdrsTmp表示找到的弱头数量,Txs表示上个区块下的所有交易信息。然后就向所有矿工广播区块;如果htmp小于Tw,那么弱头部列表就添加找到的弱头,然后向全体广播。
技术图片

弱头响应函数
其他矿工在听到弱头广播后,就需要对这个弱头进行操作,第一个assert验证这个弱头是否满足弱头的标准,也就是上文我们提到的那个判断式,validHeader函数用来判断这个弱头的其他部分是否正确,就是检验是否符合区块头的标准。第二个assert用来判断,这个弱头是不是指向上一个区块的强头。如果以上条件均满足,则增加一个弱头。
技术图片

奖赏函数
对于找到区块的矿工来说,它需要获得这个报酬,这个rewardBlock函数就是定义这个的。Reward函数的第一个参数是矿工地址,可以理解为矿工的id,第二个参数是奖励总额。这里的R代表全额奖励,TxFees代表交易费。
对于找到弱头的矿工来说,也有奖励,奖励是两个参数,第一个是矿工id,第二个是wcR。这里的w的值等于γ*Ts/Tw。γ是弱头部相对影响因子。Ts/Tw代表强头与弱头的一个比值。说白了就是按照找到弱头的比例给予奖励。
技术图片

验证区块函数
这个函数用来验证新区块,第一个assert用来判断区块头的hash是否小于强头目标值,然验证一下头。第二个assert用来判断这个区块是否连接在上个区块。第三个assert用来判断交易信息是否有误。然后下面的循环是用来判断弱头是否满足条件的。不再赘述。
技术图片

分支计算能力函数
这个函数主要获取区块链上的Tmax(最大目标)与各个区块的Tartget(Ts)或弱解Tartget(Tw)的比值和sum。在之后也叫PoW值,主要表示该链分支的计算能力,以解决分叉问题。
技术图片

块布局

Strongchain的块布局跟比特币的块布局其实差别不大,因为strongchain引入了弱解的概念,所以核心问题就是需要把引入的弱解这部分加到块中,同时不会增加太多原来块所占的字节。接下来说明一下Strongchain块布局包含的词条。
PrevHash:这代表先前块头的hash值
Target:这是一个定义新块hash困难度的一个目标值
Nonce:这代表一个随机数
Timestamp:代表时间戳
TxRoot:代表所有交易信息的一个hash值
Coinbase:代表矿工的id。
那么问题来了,那些由弱解组成的块头放哪呢。块布局中我们提到了TxRoot,这里虽然是个hash值,但是它是块中所有交易信息的hash。Strongchain提出了绑定交易(binding transaction),而绑定交易就记录了所有弱头的hash。最后返回一个操作数OP_RETURN作为一个词条加入块中。
技术图片
说到这里,下边这个图就可以理解了,最上边是正常的区块链,而弱头部组成的区块则被隐含到了TxRoot词条里的binding transaction里。此外,为了减少弱头的大小。Strongchain把弱头里的PrevHash,Target这些重复字段给删去了,压缩了空间。
技术图片

分叉

对于分叉问题,设计采用最强链原则,其主要指标是上述算法中chainPoW方法计算出的PoW值,根据该值是Tmax与Ts或Tw的比值,代表了整个链上的计算能力,Ts或Tw较小则表明计算能力更强。所以PoW值能反映不同链的计算能力,以此解决分叉。

时间戳

之前比特币的时间戳是根据挖到矿的矿工定的。相当于由那位幸运者决定。而由于Strongchain引入了弱解机制。所以显然,之前的设定已经不太满足需要了。需要考虑找弱解的时间戳。函数定义如下。
技术图片
从这个函数可以看出,Strongchain的时间戳是sumT与sumW的比值。sumT是把强头时间戳和弱头时间戳按一定比例相加得到的。强头固定分配1权重,弱头的w是动态调整的。

三、分析验证

效率和实用性

这里主要是增加了额外的负载:弱头部。文章中利用了概率分布进行分析,证明了每个弱标头60个字节和每个比特币块1MB,最后负载会增加6%以上。这表明负载增加的不多。不会特别影响效率。文中证明了当γ = 1时,则强头部区块奖励和弱头部奖励几乎等于矿工的总奖励。所以跟传统比特币奖励实用性是一致的。

奖励差异

技术图片
Tw/Ts表示弱解目标与强解目标比值,比值等于1表示比特币,随着比值的增加,更多的节点可以通过给出弱解来获得小份的奖励,这意味着奖励差异会缩小。α表示占全球挖矿能力的多少。

链质量

衡量区块链“质量”的一种方法是过时的块率,即在分叉过程中出现但未进入主链的块的百分比。即stale rate。
技术图片
如表中所示,强区块过时率部分StrongChain与比特币是差不多的,而弱区块过时率也是比较低的。在公平性方面,高延迟和低延迟两种情况下的确要差于比特币,但是中延迟时有一定的优势。

安全性

文章中主要利用实验证明了StrongChain为自私挖矿策略增加了健壮性,矿工的自私挖矿意图将会大大降低。

四、实验复现

作者留了个github地址,里面存放着strongchain的demo。由于众所周知的原因啊,上github下代码太慢了。我就把他导入到了我的码云库。
https://gitee.com/funmary/strongchain-demo
有需要的可以下载。
环境准备
1.一台linux系统。我用的是ubuntu
2.python3的环境
代码文件主要分为两部分,一部分是用python实现的代码,另一部分是log文件,用来记录块链的生成过程。
实验步骤
1.在第一个shell里使用tail命令打开log日志文件,用来跟踪块链的生成过程
技术图片
2.在第二个shell里使用python执行代码,这里的basenode表示一个节点,相当于矿工1了。
技术图片
3.执行代码后,查看第一个shell,会发现前几行相当于初始化操作,定义了发现块头和弱头的奖励,强头弱头的比值等等。然后由于这时候只有一个矿工在挖矿,所以会显示no peers are online。
技术图片
4.再启动一个shell,这里我们生成第2个矿工,basenode2。此时再去查看日志,你会发现他会有提示说,新矿工加入了。然后这个矿工就马上投入挖矿工作了。可以看到了挖到了许多弱解。
技术图片
5.下图表示强头被找到。他会显示这个块布局。
技术图片

五、个人感悟

这篇论文讲的是比特币相关的。整体看下来,感觉作者的出发点是好的。零和游戏就是只有一个胜者,比特币采用这种机制挖到矿的矿工收益是高的,但是长此以往,会挫伤其他矿工的积极性,还有就是比特币是注定通货紧缩的货币,挖到最后,矿工们只能靠收取交易费度日了。这样并不利于比特币这样一个体系良性发展,而Strongchain强链的提出恰恰解决了这些问题。核心就是引入了弱解,然后奖励再分配。矿工们即使没有挖到强头,挖到弱头也是能按一定比例获取奖励的。比特币本来就是一个信任体系。没有矿工挖矿,这个体系自然就会崩溃,所以以矿工为本的理念是正确的。
这次通读论文,收获还是挺多的。在读这篇文章之前,我对比特币了解不多。可是这里面涉及到很多相关术语,如果不懂的话读起来其实是很吃力的。我也是从百度百科查到维基百科。从CSDN查到简书,吸收了许多知识后才大致看懂了作者的意图。这其中还涉及了许多数学概念,考研过来的时间太久了,又给忘了。也得一个一个补。总之,这篇论文对我的学习和看论文的方式是有很大影响的。以后别人问我比特币是啥,我觉得我能给他讲明白了。

六、学习总结和建议意见

学习总结
这学期很有幸选了王老师的课。总体学下来感觉收获还是蛮多的,破解软件,利用漏洞对主机进行攻击,对网页进行攻击等等,这门课几乎涵盖了攻防的所有方面。我觉得可以给自己弄一个“小黑客”的称号了。在学了这些知识后,让我对网络攻防世界有了更全面的认识。纸上得来终觉浅,实践一下才能让我记忆的更深刻。一学期下来,我觉得这门课更多的是“授人以鱼不如授人以渔”。老师把入门攻防的资料,书籍都交给我们了,然后通过实践检验学习成果。从升入大学后,我们的学习应该就是以自觉为主,更何况研究生了。你若主动学习,就能掌握许多知识,你若被动学习,那就基本很难学到真东西。所以,真的感谢这门课,至少学下来,感觉是掌握了一些知识的。有句话说得好,求上得中,求中得下,求下而无所得。

建议意见
我认为,学习是个不断加油的过程。这样才能保持学习的积极性。这学期是以诸葛建伟的书为时间线的,一周一章。可是通过一学期的学习,我感觉很明显,每一章的难度都不一样的。有时候就有一种,这一章的内容还没消化完,就得马上吃下一章的感觉了。所以建议老师这边在下学期授课的时候科学安排下每周的学习任务。此外,每周的实践,大家基本都是从上周4下午做到下周四下午(理论上),包括阅读,实践,博客等内容。我觉得实践量是够的。大家做实践肯定遇到了各种各样的问题,我建议老师上课时抽1个课时进行实践的复现和问题的答疑。其他2小时可以安排一些拓展性的小实践,就比如破解软件这种,我很喜欢。

七、参考资料

区块链共识算法
百度百科比特币
百度百科区块链
区块链论文精读
Pow算法解释
维基百科比特币
维基百科区块链

20199326 2019-2020-2 《网络攻防实践》综合实践

标签:sum   积极性   wiki   关联   png   增加   显示   分析   策略   

原文地址:https://www.cnblogs.com/funmary/p/13191904.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!