首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

保障区块链安全的基石-区块链之数字签名解析(一)数字签名基础知识

区块链是什么?区块链就是一种加密的分布式数据库,因此,它主要由三大技术构成:分布式数据库、密码学、以及构成区块链的计算范式。上期初步介绍了区块链中的密码学,今天我们就接着来了解区块链涉及的密码学数字签名算法。

什么是数字签名?

数字签名就是附加在数据单元上的一些数据,或是对数据单元所作的密码变换。

这里的数字签名,不是简单的把纸质的签名改为电子签名,我们需要知道的是,数字签名包含两点:一是保证信息传输的完整性,防止其在途中被篡改;二是保证发送者的身份认证,防止其抵赖。在学习数字签名之前,我们先介绍几个概念:

Hash(哈希)函数

Hash函数,音译为哈希函数,又叫散列函数或杂凑函数。它可以将任意长度的消息M映射为固定长度的摘要H(M),也叫散列值,哈希值或杂凑值。哈希函数有三大特点:

1. M1不等于M2,则H(M1)不等于H(M2);

2.单向性,即已知H和H(M),反推出M在计算上是不可行的;

3.无碰撞性,即对于M1和H(M1),找到M2使H(M2)=H(M1)在计算上不可行(弱碰撞性);任意两个M1,M2(不相等),使得H(M1)=H(M2)在计算上不可行(强碰撞性)。

所谓计算上不可行,是由计算复杂度理论来说的,即对于该运算不存在一个多项式时间算法,计算不可行是哈希函数的安全性基础。

公钥(私钥)

公钥与私钥是通过某种密码学算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分,通过这种算法得到的密钥对能保证在世界范围内是唯一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密。

数字签名算法

接下来,我们再来看数字签名的过程:由发送者把要签名的信息作哈希运算,得到一段别人无法伪造的并且长度固定的数据摘要。发送者用自己的私钥把数据摘要加密成数字签名,并将其与信息一起发送给接收者。接收者收到信息和数字签名后,对信息作Hash运算得到报文的数据摘要,用公钥把数字签名解密为数据摘要。比较这两份数据摘要,如果相同则签名有效,否则签名无效,这样就可以确定信息的真实来源。

那这数字签名算法又与区块链有什么关系呢?

接下来以比特币系统为例介绍二者之间的关联。我们知道,比特币并不是一个简单的数字化的货币,也不是一个经过Hash操作就可以得到的值,它是一个庞大的链条式的账本,这个账本记录了第一个比特币交易账单一直到现在一直在添加到这个链条上的所有交易账单。每一个交易记录是怎么发生的呢?当E同学决定发送一个比特币给M同学时,他首先对这个交易信息T进行签名,并广播到比特币网络中,其他在同一时间段内的交易信息会与T一起被打包成一个区块(Block),拥有计算机算力的矿工对这个区块的有效性进行验证,正确后广播到全网中,当大部分节点得到验证后该区块就被添加到链条上,该矿工得到一定比例的比特币奖励,交易输出正常,M同学收到比特币,并且全网算力开始进行下一个区块的验证。

比特币系统中采用了两次SHA256来对交易的输入进行哈希操作,接着用ECDSA(椭圆曲线密码(ECC)对数字签名算法(DSA)的模拟)产生的私钥和哈希后的摘要值进行加密来构成一次交易的最终签名。同时将该签名信息和用来验证数字签名的公钥一起作为输出,公布到比特币网络中。有着算力的计算机开始对包含多个交易信息的区块进行验证,这个过程就是挖矿的过程,实际上我们可以看到,挖矿本质上就是验证哈希值的过程,也就是对数字签名进行验证的过程。

51%攻击

现在一说区块链,都说其无法篡改,实际上就是整个区块链条由无数个数字签名后的区块组成,要想对某个区块进行更改,就需要将该区块之前所有的区块都验证通过,也就是要进行无数的签名验证,比如目前到525381个区块,那就是要将之前525380个区块的交易信息都进行验证,同时还要使该条链的增加速度大于原始链条的增速。这需要僵尸节点掌握大量的算力才有可能达到,其实也就是著名的51%攻击问题,即掌握了比特币全网51%的算力之后用这些算力来重新计算已经确认过的区块,使块链产生分叉并且获得利益的行为。但无需51%算力就可以发动攻击,比如45%,也有成功的可能性,但不是确定能成功的。目前已经有很多平台遭受51%攻击,如比特币黄金BTG遭51%攻击,攻击者可能从交易所窃取超过388200个BTG,价值高达1860万美元;匿名币Verge(XVG)五月遭到51%攻击,攻击者在区块2155850和2206272之间采取了行动,在短短的几个小时内谋取了近3500万个XVG,价值175万美元;以太坊平台Krypton遭受攻击,损失21465个KR代币,价值3000美元。”

我们可以看到,51%攻击是区块链网络面临的一个严重的安全隐患,同时也是威胁区块链由密码学保证的不可篡改的特性的毒瘤,因此,如何运用密码学算法来保证区块链真正意义上的安全性,是区块链密码学工作者需要解决的问题。

后记:下一篇文章会梳理目前最新的数字签名算法,包括前几天数博会上的黑科技,请大家不要错过哦!另外,初涉区块链密码学领域,才疏学浅,如对文章有任何不同意见或建议,欢迎大家积极踊跃地与我们的小编联系哦~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180602G0CSKT00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券