以下仅代表本菜鸡一段时间对区块链的学习而总结,如有错误,希望多多指出,臣将感激涕零,铭记心中。
前段时间打了ddctf,算是被dalao们按在地上摩擦,总共有几千人参赛,然后只签了到,就干死了接近%70的人(非常不擅长加解密,而且自身技术菜到爆炸),十分惊愕,赛后又把wp看了一遍。
其中困扰我一道题很久的就是区块链的题目,算是第一次接触区块链吧,然后去年国赛好像考了一道挖矿的题目?这里就写我对区块链的一点点思考。
这里先来科普一下:
什么是区块链?
区块链就是所有的块(交易记录),按照时间顺序产生依次连接,每一个快只知道自己前一
个块的地址,其中采用了许多的加密算法,并且每个人都有自己的私钥,使得区块链是分的
安全。
tips
可以把区块链当区块链产生了分支怎么办,也就是两个或多个块的前一个块地址相同的
时候,区块链会默认选择最长的链,舍弃其他的链。
题目中给了银行的地址,黑客的签名(签名可用来加密)等信息,以及黑客块的格式和信息,最重要的是,其中给出了前一个块的地址"prev",也就是前一个块的地址。
{
"nonce": "HAHA, I AM THE BANK NOW!",
"prev": "623f886c59832dab27cac2c801567ff408805a02155c47c18ac93182eff3d82e",
"hash": "a7111195b4090d528f9ca1077f417106c1c80de7f0465b57fc089537aff4bb8b",
"transactions": [
{
"input": [
"6589d892-8a24-4bbb-99b8-7e686c65b397"
],
"signature": [
"9984f85c3d9bae416a745d06365b63c3489b962856b62e1ec0d6f2ea78bff6c766d43d789ed0248b0187e0e2cb44983b"
],
"hash": "84b2da093f0aba62b7f6bbbaf2e3e5f329d7a6001b0fc4cbb7bb0755f935f290",
"output": [
{
"amount": 999999,
"hash": "1f3143ab59ae523feaaa042c59b4c177cfa178010bed6f111f72e6a145975c82",
"addr": "955c823ea45e97e128bd2c64d139b3625afb3b19c37da9972548f3d28ed584b24f5ea49a17ecbe60e9a0a717b834b131",
"id": "1c1d5e6d-18d9-47cc-a78f-2610d096c617"
},
{
"amount": 1,
"hash": "92007462cd25387952be65abe4f8a4f5dc4f164d4f79587907aff35d8a9eb857",
"addr": "b2b69bf382659fd193d40f3905eda4cb91a2af16d719b6f9b74b3a20ad7a19e4de41e5b7e78c8efd60a32f9701a13985",
"id": "58cf0fa0-ab99-4180-893e-a8936da34026"
}
]
}
],
"height": 1
}
然后这道题看dalao的wp使用的是%51攻击。
扫盲是%51攻击
就是黑客具备全网%51的计算能力(一般情况下这是不可能的,比特币最初是一个电脑CPU就可
以挖矿的,但是最近一些年来比特币的火热导致现在都是一个个大型矿场的所有挖矿机进行
挖矿[挖矿的计算能力比普通电脑强的多,而且是集体进行挖矿,要想具备超越全网%51
的计算能力,只有可能黑客将几个大型矿场联合起来,但是这样操作将会及其麻烦])
拥有这样强的计算能力有什么用处呢?
区块链采用的是p2p网络,当产生一笔交易时,这笔交易会被一个挖矿节点(矿机)收到,这个
挖矿节点会对这笔交易进行确认,当挖矿的矿机挖到一个区块(通过大量的计算算出的hash值
满足这笔交易需求的hash值,并且这笔交易的手续费[挖矿挣钱原理]足以吸引矿机打包这个快,
也就是确认这笔交易,这笔交易在这个矿机上就可以被记录,现实生活中一般采用的是6确认,
同理也就是在6个矿机上记录了这笔交易,我们认为这笔交易就是成立的,永远的存在在区块链中)
如果一个黑客掌握了%51的算力,就会比其他的矿机更快的计算出hash值,并将块打包,收取
手续费,6确认就是打包6个块来确认这笔交易,如果黑客掌握的许多矿机计算能力贼强,就可
以提前进行6次打包来进行伪造这笔交易。
ddctf这道题还是比较照顾新手的,是0确认,就是当我们产生一笔交易后,不需要别确认,
差不多可以说是直接就是一笔交易了
如何利用呢?
题目中所有的矿机都宕机了,而且我们知道黑客产生的交易(块)的前一个块的地址prev,
我们可以利用前一个地址产生一个比黑客产生块更长的链,然后根据区块链规则,选择较长的链
就会使黑客的那条链取消,也就是说回到黑客交易以前的过程,并按照我们进行交易的创建
的块进行交易,我们创建的块根据区块链的加密计算法则是可以知道我们创建块的地址的,
然后链就可以由我们来控制。
然后对ddctf而言,我们就需要利用题目中的已知信息产生长一些的链,然后剩下就是一些
加解密的规则,不过区块链的加解密是真的复杂,而且我尤其不擅长这部分,基本做题遇到,
加复杂一些的加解密函数就直接挂机了。。。
这里就不详细讲述其他的一些过程了,我能力还未达到,加解密还需要好好学习一段时间才
能减少畏惧感,一段时间后再来尝试这道题
以上差不多就是我对区块链的一些理解,毕竟区块链繁而复杂,加解密尤甚,只是我在两天的学习过程中对区块链的一些理解,如果有一些错误的地方,希望dalao指出,多谢多谢。