一、对区块链的初步认识
(一)什么是区块链?
狭义来讲, 区块链是一种按照时间顺序将数据区块以链条的方式组合成特定数据结构, 并以密码学方式保证的不可篡改和不可伪造的去中心化共享总账(Decentralized shared ledger), 能够安全存储简单的、 有先后关系的、 能在系统内验证的数据。 广义的区块链技术则是利用加密链式区块结构来验证与存储数据、 利用分布式节点共识算法来生成和更新数据、 利用自动化脚本代码(智能合约)来编程和操作数据的一种全新的去中心化基础架构与分布式计算范式。(参考文献:袁勇, 王飞跃 . 区块链技术发展现状与展望. 自动化学报, 2016, 42(4): 481-494.)
(二)区块结构
每个数据区块一般包含区块头(Header)和区块体(Body)两部分。 区块头封装了当前版本号、 前一区块地址、 当前区块的目标哈希值、 当前区块PoW共识过程的解随机数(Nonce)、 Merkle根(Merkle-root)以及时间戳等信息 。区块体则包括当前区块的交易数量以及经过验证的、 区块创建过程中生成的所有交易记录.。这些记录通过Merkle树的哈希过程生成唯一的Merkle根并记入区块头。(参考文献:袁勇, 王飞跃 . 区块链技术发展现状与展望. 自动化学报, 2016, 42(4): 481-494.)
(三)区块链特性
(参考文献:王珍珍 ,陈婷 .区块链真的可以颠覆世界吗——内涵、应用场景、改革与挑战[J].中国科技论坛,2018)
(参考文献:王元地, 李莉粒, 胡谍 . 区块链研究综述[J].中国矿业大学学报(社会科学版),2018(3):74-86.)
对于区块链底层(数据层、网络层、共识层)安全问题的研究。
区块链的基础架构包括6层,但是但是数据层、网络层、共识层是区块链的必要层,包含了大量的加密算法,网络协议,共识机制等,因此通过对于底层的研究可以更为清晰的理解区块链的运作原理。C++是一种通用程序设计语言,支持多重编程模式(例如面向对象程序设计、泛型程序设计),大多数的区块链的底层开发都用的c++。在大学期间的学习中,对c++的掌握运用比较好,因此可以更好地深入区块链底层研究。对底层的研究需要掌握相关的算法的思想,需要过硬的理解能力,以及思考、分析问题的能力,在大学期间算法分析与设计这门课的学习中积累了算法的学习方法,锻炼了分析问题、解决问题的能力,也有助于对区块链底层的研究。其次,想要了解相区块链关的网络协议,对于计算机网络的学习也是必不可少的,大学期间的计算机网络掌握的比较好,也有助于对区块链底层相关网络协议的理解。
安全性威胁是区块链迄今为止所面临的最重要的问题。
1、其中,基于PoW共识过程的区块链主要面临的是51%攻击问题,既节点通过掌握全网超过51%的算力就有能力成功篡改和伪造区块链数据。为了解决该问题,引用基于PoS共识过程。但基于PoS共识过程同时也引入了区块分叉时的N@S(nothing at stake)攻击问题。研究者进一步提出通过构造同时依赖高算力和高内存的PoW共识算法来部分解决51%攻击问题。
2、区块链的非对称加密机制也将随着数学、密码学和计算技术的发展而变得脆弱。以目前天河二号的算力来说,产生比特币SHA256哈希算法的一个碰撞大约需要248年,但随着量子计算机等新计算技术的发展,未来非对称加密算法具有一定的破解可能性,这也是区块链技术面临的潜在威胁。为了抵抗量子攻击,应该研究能够抵抗量子攻击的密码算法。
3、区块链的隐私保护也存在安全性风险。区块链系统内各节点并非完全匿名,而是通过类似电子邮件地址的地址标识(例如比特币公钥)来实现数据传输。虽然地址标识并未直接与真实世界的人物身份相关联,但区块链数据是完全公开透明的,随着各类反匿名身份甄别技术的发展,实现部分重点目标的定位和识别认识有可能的。应对措施:确保私钥的随机性、使用冷钱包、对钱包进行备份,建立合理的安全机制对秘钥进行保管。当秘钥泄露时,应当对秘钥进行修改。
研究过程:充分阅读相关文献,深入理解每一层的相关的算法、协议等,掌握底层的运作机理。并且学习其在处理安全性问题方面的提出的处理方法,思考自己有没有改进的方法。
在对区块链的底层有了充分了解后,上手编程实现区块链小Demo,在此基础上可以加深对区块链的理解,并继续研究底层的安全性问题。