白话加密货币之加密技术与哈希算法
Posted BeingIt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了白话加密货币之加密技术与哈希算法相关的知识,希望对你有一定的参考价值。
作为银行从业人员,对区块链在金融领域的巨大发展潜力有强烈的信心和期待。在一切还处于朦胧中时能够领先一步深入学习了解,就能够在未来获得更多的机会。
一旦和钱扯上关系,安全性一定是每一个使用者关心的首要问题。在传统互联网金融的框架下,资产盗用问题已经让很多人产生心理阴影,信用卡盗刷、支付宝盗用等屡见不鲜,而区块链又是一个对大多数普通人而言不那么熟悉的新技术,大家不禁会问它到底安不安全呢。
有没有发现我们常常会听到「加密货币」(Cryptocurrency)这个词,它是区块链世界中诸如比特币、以太坊等虚拟币的另一种称呼,字面上好像就在告诉我们,这种货币很安全,被加密了嘛。也常常看到这样的说法,区块链是去中心化的——分布式记账,不可被篡改的——因为它是分布式去中心化的,但我还是想问,它到底是怎样加密并实现这些特性的呢?
经过最近一段时间的学习了解,以下两个方面让我对加密货币有了更立体的认知。
加密技术
简单来说加密技术主要有两个发展阶段,第一阶段是对称加密,第二阶段是非对称加密。
对称加密的意思即传输信息的双方掌握同一套算法,举一个最简单的例子,比如A要发出一段数字信息「1234」给B,通过将每位数字都+1来进行加密,所以B收到的数字是「2345」,他只要进行逆向运算解密,将每位数字减1即可获取原始信息,但这种加密方法比较简单,任意一方被攻破就必须更换整套算法来维持系统安全性。
第二阶段的非对称加密技术相对对称加密技术就要安全得多,在信息发送双方之间不再使用同一套算法,同样举一个简化的例子就能秒懂:在数学中有这样一个规律:「10001」乘以任意一个数字之后其末四位数不变。我们可以利用这条规律来对数字信息进行加密,比如A还是要传输一个数字「1234」给B,它先在「1234」的基础上乘以「137」,得出「169058」,去掉前两位,实际传输给B的数字是「9058」,B在收到「9058」这条信息后会怎么做呢?你一定会觉得很神奇,B用「9058」乘以「73」,得出「661234」,然后即可知道A要传给他的信息就是末四位「1234」!为什么会这样?因为「10001」这个数字可以拆解成两个因子「137」和「37」,「137」乘以「37」即「10001」,所以A与B的手里各执一把钥匙,放在一起就撬动了这个锁,获得想要传输的原始数据。那为什么要去掉前两位,只传输「9058」呢?请再次注意这条数学规律,任意数字乘以「10001」其后四位不变,所以无论是「169058」也好还是「269058」、「XX9058」,效果是一样的,但通过传输残缺的数据却可以大大增加数据的安全性,何乐而不为呢。
这只是一个最简化的例子用于理解非对称加密的概念,实际应用中可以发展出比这个复杂得多的加密算法,加密货币目前使用的是RSA加密系统,确保虚拟货币数据传输过程的安全性。
哈希算法
这是另外一个对加密货币的安全性起到至关重要作用的概念。简单来说,任意一个数据可以通过哈希算法计算出一个唯一的哈希值。在区块链中每一个区块包含一个表头,表头中包含一个哈希值,这个哈希值唯一对应上一个父区块的数据内容。结构如图所示:
(图片来自《区块链技术驱动金融》一书)
而这个唯一性从何而来呢?哈希算法有一个非常重要的特性叫做「防碰撞性」,即两个不同的输入值,其哈希值必然不同,也就是说你可能找一辈子也找不出两个不同的输入值(没有任何限定的数据),能够得到一个相同的哈希值,由此我们称这种算法具有防碰撞性。如比特币用的是「SHA256」哈希算法,将区块中的数据内容作为输入值,计算生成一个固定256位长度的哈希值,存储在下一个区块的表头中,只要数据有任何改动,哈希值就会发生变化,这就是哈希值可以唯一指向上一个区块内容的根本原因。它最重要的作用就是可以防止篡改,因为黑客一旦篡改了某一个区块中的数据,必然造成其后面区块表头的哈希值与上一个区块被修改后的数据内容不匹配,所以如果想要篡改这一个区块的数据必须篡改其后的所有区块上的数据,这必须拥有全网51%的算力才可能做到,而这几乎不可能实现,无论从技术上还是财力上,因此保证了加密货币在底层区块链上数据的不可篡改性。
通过以上两个方面的学习终于让我对加密货币增加了更多安全感,同时深知自己学习的时间和深度还远远不够,可能叙述中会有失偏颇或有理解不正确的地方,望得到拍砖指正,共同学习进步。
以上是关于白话加密货币之加密技术与哈希算法的主要内容,如果未能解决你的问题,请参考以下文章