币图细说—区块链中的密码学
Posted 币图网
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了币图细说—区块链中的密码学相关的知识,希望对你有一定的参考价值。
密码学是一门很深奥的学问,密码学促进了现代计算机的发展,在区块链领域所涉及到的密码学知识主要是哈希算法和数字签名,现在我们来看看哈希算法。
1.什么是哈希算法?
加密算法是指对数据进行一定的加密处理,让自己人可以识别,而别人无法识别的一种算法,哈希算法是常用的加密算法之一。简单说哈希算法就是对于任意一个数据(计算机领域叫字符串),通过哈希算法都可以产生一个256位的加密结果,并且在目前能力范围内无法找到与之重复的结果。我在网上随便找了一个哈希(Hash)算法工具如下所示:
哈希算法测试网址
重点是 任何输入数据都可以输出一个不一样的输出结果。哈希算法包含多种计算方式,常见的有MD5和SHA-256,在历史实践中发现MD5存在重复,在加密场景中已经逐渐被淘汰。我们熟悉的比特币(Bitcoin)使用的便是SHA-256算法(安全哈希算法),而莱特币(Litcoin)使用的则是scrypt算法,你只要记住这里不一样就行了。
进阶:
对于哈希算法来说,一般要求有两个特性:
1.碰撞阻力:无法找到两个输入值,可以使得哈希算法之后的结果相同。
2.隐蔽:就算你知道了输出结果,你也无法找到输入值
2.哈希算法在区块链中的应用
我在开篇中介绍过区块链和链表结构的关系和区别,其实区块链中应用的链表结构叫哈希指针(索引),哈希索引就是指在区块头中存储了上个区块的位置,最重要的是还存储了上个区块数据的哈希加密结果。哈希加密结果具有碰撞阻力(不重复性),所以我们一直听到的区块链具有无法篡改的特性便来自这里。一旦区块的数据被人为篡改,那么下一个区块上面存储的哈希加密结果便无法对应,整个链表便无法连续。
下面做了一张图做一个简要说明:
当然,区块链头部数据用于输入的值还包含一些其他东西,比如时间等,上图为了方便解释,不再加入。
最后再解释两个名词:
创世区块:在哈希指针结构中的第一个区块。
二叉树(梅克尔树):一个区块对应两个子区块,这两个子区块都有上一个区块的哈希信息。
以上便是区块链中应用的哈希算法介绍,下一篇将介绍数字签名。这两者组成了区块链的加密系统。
如果要求哈希算法达到密码学安全的话,我们还要求它具备以下三个附加特性:
1. 碰撞阻力:
是指对于两个不同的输入,必须产生两个不同的输出。如果对于两个不同的输入产生了相同的输出,那么就说明不具备碰撞阻力,或是弱碰撞阻力。
2. 隐秘性:
也被称为不可逆性,是指 y = HASH(x)中,通过输入值x,可以计算出输出值y,但是无法通过y值去反推计算出x值。为了保证不可逆,就得让x的取值来自一个非常广泛的集合,使之很难通过计算反推出x值。
3. 谜题友好:
这个特性可以理解为,谜题是公平友好的,例如算法中 y = HASH(x),如果已知y值,想去得到x值,那就必须暴力枚举,不断的尝试才能做到,并且没有比这更好的办法,没有捷径。
哈希算法有很多,比特币主要使用的哈希算法是 SHA-256 算法。
除此之外,还有其他一些哈希算法也很流行,例如 MD5、SHA-1、SHA-2(SHA-224、SHA-256、SHA-384、SHA-512)、SHA-3 等,其中 MD5、SHA-1 已被证明了不具备 强碰撞阻力,安全性不够高,因此市场上不再推荐使用。
区块链中有一个很关键的点就是账户问题,但比特币中是没有账户概念的,那大家是怎么进行转账交易的呢?
这里就得先介绍区块链中的非对称加密技术了。
以上是关于币图细说—区块链中的密码学的主要内容,如果未能解决你的问题,请参考以下文章