内容简介:来源:
2018-12-26 14:43
来源: ccidbc
我们知道整个比特币,以太坊的基石就是椭圆曲线加密算法。所有的数据均需要发起者通过私匙签发,其它人通过非对称的公匙验证确实消息的真实性。下面我们就一起来了解一下椭圆曲线加密算法,并使用以太坊提供的 工具 对要发送的数据进行数字签名,以及使用Solidity区块链编程语言的ecrecover()校验数字签名的合法性。
椭圆曲线DSA(ECDSA)简介
假如Alice要对消息m加上数字签名,而Bob需要验证该签名。
生成数字签名
-
Alice根据随机数r和基点G求出点rG = (x, y);
-
Alicce根据随机数r、消息m的散列值h、和私匙a计算
最后,Alice将消息m、点rG = (x, y)和s发送给Bob,其中点rG和s就是数字签名。
验证数字签名
-
Bob接收到消息m、点rG = (x, y)和s。
-
Bob根据消息求出散列值h。
-
最后,Bob根据上述信息,用Alice的公匙进行以下计算。
最后让上述计算结果与rG进行比较看是否相等。
如果签名结果正确,则计算结果应如下所示。
原书[1]中关于这部分看了三四遍,也没看明白。但觉得做程序的明白他大概要干个什么就好。大体上来说,对于要签名的数据m,使用它的哈希后的结果h,会生成签名。签名结果分为r,s,v三段值。其中r,s为32字节。v为一个字节,如果要用ecrecover()算法来验签,需对v值加27来组成27,28这两个值中的一个[2]。
实践
使用web3.js进行数据签名
以太坊提供了web3.eth.sign方法来对数据生成数字签名。
在上面的代码中,我们先将要签名的数据abc生成哈希串,使用web3.sha3("abc)。接着我们使用当前连接节点的第一个默认帐户进行签名。
由于我使用的是EtherumJS TestRPC,它默认打开了帐户。否则,你还需要web3.personal.unlockAccount("0x..", "
运行的结果:
使用ecrecover()对签名数据进行校验
ecrecover[5]函数是由以太坊提供的一个全局函数,用于签名数据的校验。与上面所陈述的方式略有不同的是,这个函数返回的是签名者的公匙地址。如果返回结果是签名者的公匙地址,那么说明数据是正确的。
ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) returns (address)
ecrecover函数需要四个参数,需要被签名数据的哈希结果值,r,s,v三个值。通过前面的说明,我们知道r,s,v是分别来自签名结果串。
其中v取出来的值或者是00或01。要使用时,我们先要将其转为整型,再加上27,所以我们将得到27或28。在调用函数时v将填入27或28。
如果要在以太坊中验证比特币的签名,可能有几处不同的地方[6]。
使用Solidity的ecrecoverDecode验证签名的完整例子。
上述代码使用临时写的slice()函数把数据签名中的r,s,v切割出来;由于返回的仍是一个bytes类型,所以我们使用bytesToBytes32()进行一下类型转换[7];另外需要注意的是ecrecoverDecode()根据前面的说明,我们需要对v值,加上27后再进行调用。最后调用decode()函数,我们将会得到公匙0x60320b8a71bc314404ef7d194ad8cac0bee1e331。
版权申明:本内容来自于互联网,属第三方汇集推荐平台。本文的版权归原作者所有,文章言论不代表链门户的观点,链门户不承担任何法律责任。如有侵权请联系QQ:3341927519进行反馈。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 区块链入门丨一文读懂数字签名
- 兄弟连区块链教程Fabric1.0源代码分析ECDSA椭圆曲线数字签名算法
- [原]数字签名
- 数字签名与HTTPS详解
- 对称加密,非对称加密,数字签名,数字证书,SSL握手
- 【go密码学】-数字签名
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Chinese Authoritarianism in the Information Age
Routledge / 2018-2-13 / GBP 115.00
This book examines information and public opinion control by the authoritarian state in response to popular access to information and upgraded political communication channels among the citizens in co......一起来看看 《Chinese Authoritarianism in the Information Age》 这本书的介绍吧!