区块链中的哈希与签名

in cn •  8 months ago 

总的来说,只需要理解两类基本算法就可以,那就是哈希算法以及非对称加密算法

对于应用开发者来说,大可以把密码学当作黑盒,你不需要太关注其技术原理,而只需要理解它的特性以及应用场景就可以了。

哈希算法

哈希算法又称散列函数,它可以将任意长度的数据转换成短的、固定长度的数据指纹。

哈希算法不是只有一个固定的实现,而是一类算法的统称(Secure Hash Algorithm,SHA家族),比如常用的有 MD5 跟SHA-256。要评判一个哈希算法是否足够优秀,我们有 4 个标准:正向快速,逆向困难,输入敏感和避免碰撞。

  • 正向快速 :
    如果给定信息和算法规则,可以在有限的时间内计算得到信息的哈希结果。

  • 逆向困难:
    如果给定哈希结果,在有限的时间内基本不可能逆推出原始信息。也就是说一个优秀的哈希算法是不可能通过密文反推明文的,这也就是不可逆的根源。

  • 输入敏感:
    原始信息即使发生一丁点的变化,重新计算的哈希值与之前比较都应该有很大的不同。
    这个标准主要是降低原始信息被部分推断的风险。如果新产生的哈希值与之前的相差不大,计算机就可以利用差异去推断变化,相比穷举,困难度当然是降低了,而这却是不被允许的。

  • 避免碰撞:
    在设计哈希算法时,应该避免不同的明文信息产生相同的哈希值。


区块链中的哈希

哈希算法相当于是对信息提取摘要,是数据的指纹,因此经常被用于数据完整性的校验,而区块链在此基础上又做了适当的延伸。

哈希算法的地方主要是交易哈希块哈希,主要功能就是校验交易及区块的完整性,以及充当区块链网络中交易及区块的唯一标识

区块哈希还有另一个作用,区块属性中包含了前一个区块的哈希,从而构建成一条由区块哈希关联的数据链条,所以我们称区块链为哈希链也不为过。

利用哈希算法对输入的敏感性,作恶者如想篡改区块链数据,必须从被修改处开始依次修改后续的全部区块,哈希算法的加入增加了作恶者篡改的成本,可以说是哈希算法成就了区块链单节点的不可篡改特性。

非对称加密算法

对称与非对称体现在对密钥的处理上。对称表示加密和解密都使用同一套密钥。而非对称加密却不一样,分为公钥跟私钥,如果使用公钥加密,只有用对应的私钥才能解密。

非对称加密算法的密钥是一对,分为公钥跟私钥。公钥可以随便公开,而私钥需要私密保存,而只要私钥不被泄露,信息交换过程就是安全的。当然这个例子还是与非对称加密有所差异,真正的私钥应该只有一份。

对称和非对称的组合使用
对称加密的高效和非对称的安全性进行混合组合使用。
明文数据采用对称加密算法进行加密,然后使用非对称加密算法加密对称加密的密钥和明文数据哈希,对方收到
信息后,用匹配成对的另一个密钥解密数据并核对明文数据哈希,混用的方式可很好的平衡安全性与时效性。

例如:对称加密,密钥 X | 非对称加密,公钥匙A,私钥B ,明文消息M 
 SEND:  X(M),A(X)    RECV:  B(A(X)) => X, X(M) = > M  

区块链中的非对称加密

区块链中对非对称加密算法的使用并不是直接被用作数据加密,而是利用其具备身份确权的能力,也就是数字签名。

Q: 什么是数字签名?顾名思义,其实跟我们平常手写签名的概念及作用是一样的,都是用于证明你的身份,且对所签署的文件或者数据进行确认授权。

在诸如比特币以太坊等公有链中都有类似于地址、账户的概念,我们可以认为这就是区块链中的身份证,这个身份证不同于现实中需要政府统一颁发,而是分散的基于非对称加密算法的公钥的一种形变表示

你通过数字货币手机钱包创建了一个账户,此时区块链网络并不知道,只有当你接收到一笔转账之后,网络中才有你这个账户的信息。

Q: 那如何确认这个账户或者地址是属于你的呢?

A: 只要你能证明你可以花费账户中的余额就可以了,而这证明的关键就在于数字签名。既然账户是公钥的形变表示,那么必定存在与之对应的私钥,且只存在你的手中。

区块链结构上的签名

trans-struct.jpg

左边部分是交易的基本属性,而右边只包括签名。

  • 签名交易:
    实左边部分已经能够基本表示交易的内容了,只是缺少了证明。因此我们将左边部分看作一个整体,然后对它进行哈希计算得到交易摘要,接着用你手中的私钥对交易摘要进行加密,而加密的结果就是交易的签名。

  • 验证交易:
    按照相反的流程进行就可以了,将交易签名使用对应的公钥解密得到签名中包含交易摘要,同时将明文的交易内容利用哈希算法再计算交易摘要,然后将签名中的交易摘要与自主计算的交易摘要进行对比,如果匹配,则表示交易验证成功。

sign-trans.jpg

数字签名的本质也是一种加密,只不过针对的是数据的哈希摘要,并不是数据本身。

  • 一方面证明了确实是你自己构建的这笔交易,因为其他人没有你的私钥,无法假冒。
  • 因为数字签名是有哈希算法参与的,因此也继承了哈希算法的特性,能保障交易的完整性,确保了交易不会被他人无故篡改。

所以总的来说,数字签名集成了哈希算法与非对称加密算法的双重特性,在保证交易完整性的同时,还能证明交
易发起者的身份。

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!