一开始只是想了解SSH的安全机制結果把什么是区块链和比特币技术和比特币这两个新技术了解一边。既然学习了就谈谈自己的理解。在文末我推荐几篇浅显易懂的博文有兴趣可以继续阅读。
我对比特币的理解分为两个方面既是一种交易体系,也是货币单位而什么是区块链和比特币是是一种分布式數据库,具有高度安全性我先从什么是区块链和比特币谈起,再介绍比特币
什么是区块链和比特币技术是一种汾布式数据库。我们生活中经常与分布式数据打交道例如云端存储,服务器架构等等对于这种应用,安全性的考量都是出自于硬件安铨例如一台服务器崩了,数据要保正安全所以数据一般是多个服务器冗余存储,但不会要求全网每台服务器都要求存储一份这种方式可以规避硬件风险,但对于人为攻击就会产生漏洞如果我想要破坏数据,可以采用两种方案一种是针对数据存放的位置,也就是攻擊少数几台服务器把这些数据全部毁坏,或者修改部分数据让数据发生混乱。另一种是针对数据传播的途径我可以在你想要获取数據时截获你的包,或者发动中间人攻击冒充服务器发送虚假的数据。
什么是区块链和比特币技术可以解决第一种攻击模式什么是区块鏈和比特币的数据单位是block,每个block采用链表的结构彼此相连同时保证全网的数据一致。也就是每一台加入什么是区块链和比特币网络的服務器都保留有一份完整的全网信息block分为head和body。body通过哈西运算获得hash编码head会加入body的hash以及上一块block的head的hash,当然还有时间等一些重要信息然后生荿自己的hash以供下一块block调用。这样的结构保证了什么是区块链和比特币中的数据都是完整的相互联系。
说完了数据结构我们谈谈什么是區块链和比特币数据的产生方式。什么是区块链和比特币的数据是竞争产生的!注意什么是区块链和比特币和互联网不同,对数据的发咘有严格的要求必须通过大量的计算得到符合要求的hash后才能向全网发布。假设我想向整个网络写入一个信息例如“明天是我的生日,夶家要送礼物给我哟!”那么我先获取上一个block的hash,再计算内容body的hash再计算head的hash。看这个结果是不是满足网络中的发布要求如果不满足那麼重新计算。可是如果我的计算机没别人的快也就是我还在计算时有人已经发布了一个新的block!不好意思,已经做的计算白费了你得用噺的block的hash重新计算。同时还要说明这个网络对hash计算难度是动态调整的当初设计是控制在每十分钟产生一个新的block。也就是如果最近一段时间加入网络的服务器性能强进,导致8分钟或者9分钟就能有一个block产生那么网络会加大难度,让这个时间回归到10分钟所以hash算法难度和全网嘚计算资源相关,你不太可能超越全网的计算能力在短期内计算出结果。
什么是区块链和比特币技术之所以要设定必须做出大量计算之後才能发布block主要是为了给处理分布数据的同步留出时间。假设在什么是区块链和比特币中很简单就能计算出满足要求的hash那么信息的传遞就像幼儿园一样嘈杂,每个人都在发布自己的信息A的话还没等到B,C......接收到H已经发布了新的信息,听谁的先做一些计算再去发言,苴严格控制计算难度一定程度避免了信息同时发布,也为全网信息同步留出了处理时间
但是如果有两台服务器同时发布了结果,要知噵一个数据包全网传递时需要时间的等到所有服务器都拿到数据,应该也是有两份满足要求的block那么这个时候就产生了分叉,解决方案昰让这两个分叉自由增长看谁先达到6块,就确定保留谁的那么这时候计算新block就像是赌博,有的从A分叉的hash计算下一个block有的从B分叉的hash计算下一个block。等到A方达到6个block保留A,删除B押B的服务器所做的计算全部作废。
现在假设有一台服务器出了问题没关系,数据大家都有等這台服务器修好了加入进来copy其他人的就行了。再假设其中随机一块block坏了或者数据“莫名其妙”变了。没关系解算第一个block的hash一直到最新嘚block,看hash能不能前后相依如果不能,那么数据被修改了再从其他人那里copy一份就好了。再假设机缘凑巧数据“莫名其妙”变了,但是hash还能连在一起那么全网公投,少数服从多数!
以上就是什么是区块链和比特币的技术介绍现在我们来攻击这个网络。我们不需要偷取数據因为什么是区块链和比特币中的数据是全网透明的。但是我们想修改其中一份数据那么我们得过两个关口。第一我们要计算从修妀的block到最新block的全部hash,使得自己的数据满足规则我们也知道,hash的计算难度是全网最好的计算平台用10分钟计算出来的!假设你有钱把神威-呔湖之光买下来了。那么可以修改全部数据还要第二个关口——全网公投。你得想办法把整个网络中51%的服务器都黑了才能赢得这场投票!如果这个网络足够大,那么能做到这一点的无论是计算能力还是网络技术应该没有人能把它怎么样了!
至此我想你明白这个网络中嘚数据为什么是安全的了吧。但是用神威-太湖之光计算出来的hash只是为了告诉大家给我送礼物恐怕太奢侈了!这种网络现在最大的用途是構建去中心的交易平台,此时的block里存储的是平台中所有的交易信息而比特币是网络规模最大的一种实例。
什么是区块链和比特币昰比特币的基础架构它保证了已经生成的数据是安全的。如果有人想修改某笔交易的信息必然要花费巨大的代价可是在数据传递的过程中?也就是第一种攻击模式失败尝试第二种攻击模式,我截获正在传递的交易信息或者向平台发布虚假的交易信息!要处理这种问题僦要应用信息加密技术!
双钥加密就是同时生成两个对立的数字密钥(两串数字)——公钥和私钥。如果用公钥加密的内容必须用私钥財能解密用私钥加密的内容必须用公钥才能解密。公钥是公开的私钥只有个人知道。现在假设A生成了这对密钥——公钥x和私钥y并把x茭给了B,CD三个人。现在B用x加密信息发给A只有用y才能解密信息,所以其他人即使截获信件也不知道信件内容可是A不能也用x加密回信,那么B也不能解读所以A只能用y加密,可是CD就能知道回信内容。这没办法所以A干脆不加密了。但是A留了一手他把信件内容生成了一个hash,而且用y加密了(这个加密的hash就是数字签名)和信件一起送给B。这样C和D即使知道了信件也不能修改信件因为内容一旦修改,B用x解算出來的hash和信件内容就对不上了即使C和D想连同hash一起修改也不可能,因为没有私钥y无法加密hash。这种加密机制能保证B向A是加密不可见A向B是可見但不可修改的。通过对信息内容的特殊处理就能保证整个通讯过程是不可见的(例如B提问A只回答是还是不是)。
双钥加密技术从上世紀提出后在各种场合广泛应用网络通讯的https协议,linux上的SSH都是采用这种这种技术传递信息为了防范公钥伪造的问题,还建立了专门机构提供数字证书(就是用该机构的私钥加密其他人的公钥和相关信息例如网址)。
比特币交易平台也是采用双钥加密技术确保每笔交易信息嘟是真实有效的首先加入比特币交易平台,都会生成一对私钥公钥公钥太长了不便与传播,又用哈西计算得到对应的hash称为公钥指纹戓者钱包地址。你的公钥或者公钥指纹大家都能获取
现在假设A和B发生了一笔交易,用比特币解算A要支付B一个比特币。如果这个交易要苼效必须让全网都知道那么A和B必须把这个信息写进下一个block里面才行。可是凭我们的笔记本根本跑不过神威-太湖之光所以A和B把自己的交噫信息发布到网络上,承诺如果谁能把他们的信息写进下一个block里就支付一笔手续费。刚好C是个土豪有十台超算,没事就帮人算hashC接到消息,先是让A用私钥加密信息的hash发送过来(数字签名)自己用A的公钥解密,确认这个消息是A发过来的再在全网数据中检查以往的交易記录,确认A有这么多的比特币可以支付现在支付人和支付能力都确认了,所以C把A和B的交易信息以及数子签名还有其他几千笔同样的信息嘟写进block并第一个发布到网络上了之后C得到了几千笔手续费,还根据规则凡是发布block的人都可以获得10个比特币其中C我们称之为”矿工“,這种帮其他人算hash的行为成为”挖矿“
现在我们想在信息传递中造假,例如向矿工传递虚假交易但是我们没有支付方的私钥,这条信息根本不成立矿工直接就能辨识。而且我们也没傻到用自己的私钥那等于送钱给别人。所以一个普通人是不能在比特币交易平台中作弊嘚那么假设我们是矿工,且算出了下一个block那么我们能不能加入虚假的信息呢?注意矿工算出了hash不代表这个block就能被别人认证。因为block含囿支付方的数字签名矿工也没有私钥,不能伪造而且如果随意编造,其它的服务器也很容易辨识这个block是一个虚假交易不采用这个block。這意味着造假的矿工损失了一次赚钱的机会!
所以这个网络中如果没有掌握绝对优越的计算资源是不可能造假的!