导语:本课堂用通俗易懂的系列内容为大家呈现区块链与密码学领域相关知识。这里有知识也有故事,从感兴趣到有乐趣,全民课堂等你来学。这个系列中的课程内容首先从比特币着手进行入门介绍,再延伸至区块链的相关技术原理与发展趋势,然后深入浅出地依次介绍在区块链中应用的各类密码学技术。欢迎大家订阅本公众号,持续进行学习。
5.6 哈希函数在区块链中的应用
前几节课我们对哈希函数已经有了一个很完整的认知,今天这节课我们来细说哈希函数在区块链中的应用~
– 以太坊用户地址的生成 –
第一步:生成私钥 (private key)
产生的256比特随机数作为私钥(256比特 16进制32字节):
18e14a7b 6a307f42 6a94f811 4701e7c8 e774e7f9 a47e2c20 35db29a2 06321725
第二步:生成公钥 (public key)
利用将私钥(32字节)和椭圆曲线ECDSA-secp256k1计算公钥(65字节)(前缀04||X公钥||Y公钥):
04 ||50863ad6 4a87ae8a 2fe83c1a f1a8403c b53f53e4 86d8511d ad8a0488 7e5b2352 || 2cd47024 3453a299 fa9e7723 7716103a bc11a1df 38855ed6 f2ee187e 9c582ba6
利用Keccak-256算法计算公钥的哈希值(32bytes):
fc12ad81 4631ba68 9f7abe67 1016f75c 54c607f0 82ae6b08 81fac0ab eda21781
取上一步结果取后20bytes即以太坊地址:
1016f75c54c607f082ae6b0881fac0abeda21781
第三步:输地址 (address)
0x1016f75c54c607f082ae6b0881fac0abeda21781
– 默克尔哈希树-
比特币区块包含了区块头部和一些比特币交易。一个区块上所有交易的哈希值构成了该区块默克尔哈希树的叶子结点,默克尔哈希树的根节点保存在区块头里面,因此所有交易与区块头部绑定在了一起。
– 挖矿难度的设置 –
比特币难度是对挖矿困难程度的度量,即指:计算符合给定目标的一个哈希值的困难程度。
difficulty = difficulty_1_target / current_target
difficulty_1_target的长度为256比特, 前32位为0, 后面全部为1 ,一般显示为哈希值,
0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
difficulty_1_target表示btc网络最初的目标哈希。current_target是当前块的目标哈希,先经过压缩然后存储在区块中,区块的哈希值必须小于给定的目标哈希值, 表示挖矿成功。
– 数字签名 –
比特币需要利用公钥进行加锁,利用私钥签名进行解锁,从而实现数字货币的交易。解锁过程实际上是利用ECDSA算法的产生数字签名。给定交易信息m,签名过程如下:
- 选择一个随机数k
- 计算点R= k*G= (xR, yR) ,计算r=xR mod n
- 利用私钥d计算s=k-1*((H(m) – d*r)) mod n
- 输入签名(r, s)
– 软件发布 –
哈希函数在区块链中的应用就讲到这里啦,下节课我们将开启全新篇章的学习,敬请期待!
同学们可以关注PlatON World,观看更多图学院系列课程。我们下节课见啦。
本文转载自https://mp.weixin.qq.com/s?__biz=MzUzNTg2ODg5MQ==&mid=2247490666&idx=1&sn=e70310ea249cde39240ce0a7946672bd&chksm=faffb8decd8831c8a9ef394319da5b43890c0071f80f52b732a34ebcd9d47a75048abad8c7a1&scene=178&cur_album_id=1411898566347735044#rd