导语:本课堂用通俗易懂的系列内容为大家呈现区块链与密码学领域相关知识。这里有知识也有故事,从感兴趣到有乐趣,全民课堂等你来学。
这个系列中的课程内容首先从比特币着手进行入门介绍,再延伸至区块链的相关技术原理与发展趋势,然后深入浅出地依次介绍在区块链中应用的各类密码学技术。欢迎大家订阅本公众号,持续进行学习。
【本课堂内容全部选编自PlatON首席密码学家、武汉大学国家网络安全学院教授、博士生导师何德彪教授的《区块链与密码学》授课讲义】
1.4. 比特币的交易
比特币交易有两种类型,一种是Coinbase交易,也就是挖矿奖励的比特币,这种交易没有发送人。另一种就是我们常见的普通交易了,即普通地址之间的转账交易。我们可以看到下图中有无数密密麻麻的字符组成的字符串,这些字符串有什么作用呢?
接下来我们看一组字符串:
18e14a7b6a307f426a94f8114701e7c8e774e7f9a47e2c2035db29a206321725
16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM
这看似毫无关联的字符串,其实是一对“拜把子兄弟”,「私钥」和「公钥」。在比特币系统中,私钥相当于身份证,能够证明你的身份。而公钥相当于家庭住址,大家可以通过公钥找到你。公钥是通过私钥“转化”而来,所以具有唯一性。也就是说,你的家只能通过你的身份证打开,但是如果你的身份证丢了可不支持补办哦~那么私钥是如何转换为公钥的呢?
比特币使用了secp256k1椭圆曲线,其描述参数为:
E : y^2 ≡ x^3 + ax + b (mod p)
p: 代表有限域Fp的那个质数
a,b:椭圆方程的参数
G: 椭圆曲线上的一个基点G = (xG, yG)
n:G在阶
椭圆曲线?有限域?基点?看不懂没关系,也不用在乎公式是怎样计算的,我们可以把它当做一个“转化方式”,可以从私钥转化为公钥,再起一个比较简单的名字,比如“乾坤大挪移”。
比特币科普之非对称加密
1976年,W.Diffie和M.Hellman在IEEE Trans.on Information刊物上发表了“ New Direction in Cryptography”文章,提出了“非对称密码体制即公开密钥密码体制”的概念,开创了非对称加密的先河。
例如,我们要去取一份机密文件,输入苹果,对方显示苹果才可以解密,就像我们日常去银行取钱输入的六位密码,这是对称加密。而非对称加密则是,输入苹果,对方是香蕉才能解密。“天王盖地虎,宝塔镇河妖”可以说就是运用了非对称加密。
非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将公钥公开,需要向甲方发送信息的其他角色(乙方)使用该密钥(甲方的公钥)对机密信息进行加密后再发送给甲方;甲方再用自己私钥对加密后的信息进行解密。甲方想要回复乙方时正好相反,使用乙方的公钥对数据进行加密,同理,乙方使用自己的私钥来进行解密。
注:部分说明来源百度百科
比特币地址产生的过程就像是在工厂的流水线上生产一瓶啤酒,需要经过多个计算步骤最后才能产生比特币地址。
下面我们一起看看,在比特币工厂,如何在流水线上产生一条质量合格的比特币地址:
第一步:产生私钥
随机选取32字节的数字,大小介于1~0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间
第二步:产生非压缩公钥(pubKey)
使用“乾坤大挪移”算法(椭圆曲线加密算法 ECDSA-secp256k1)计算私钥所对应的非压缩公钥。
第三步:X=SHA-256(pubKey)
得到公钥之后,进一步计算公钥的SHA-256哈希值
第四步:Y=RIPEMD-160(X)
取上一步结果,计算RIPEMD-160哈希值。
第五步:Z=addr version+Y
取上一步结果,前面加入地址版本号(比特币主网版本号“0 x 00”)
第六步:H=SHA-256(Z)
取上一步结果,计算SHA-256哈希值
第七步:K=SHA-256(H)
取上一步结果,计算SHA-256哈希值
第八步:len(K)[0:4]
取上一步结果的前4个字节(8位十六进制)
第九步:A=Z+ len(K)[0:4]
把这4个字节加在第五步的结果后面,作为校验。这就是比特币地址的16进制形态啦!
最后一步:base58(A)
用base58表示法变换一下地址,这就是最常见的比特币地址形态啦。
我们拿出这堂课最初展示的比特币地址:
16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM。来举例说明比特币地址的生产过程。
举个例子
1. 随机选取一个32字节的数作为私钥
(大小介于1~0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间) :
18e14a7b6a307f426a94f8114701e7c8e774e7f9a47e2c2035db29a206321725
2. 使用“乾坤大挪移”算法(椭圆曲线加密算法 ECDSA-secp256k1)计算私钥所对应的非压缩公钥:
(共65字节,1字节0x04,32字节为x坐标,32字节为y坐标)
0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6
3. 计算公钥的SHA-256哈希值:
600FFE422B4E00731A59557A5CCA46CC183944191006324A447BDB2D98D4B408
4. 计算上一步哈希值的RIPEMD-160哈希值:
010966776006953D5567439E5E39F86A0D273BEE
5. 在上一步结果之间加入地址版本号:
(如比特币主网版本号”0x00″)
00010966776006953D5567439E5E39F86A0D273BEE
6. 计算上一步结果的SHA-256哈希值:
445C7A8007A93D8733188288BB320A8FE2DEBD2AE1B47F0F50BC10BAE845C094
7. 再次计算上一步结果的SHA-256哈希值:
D61967F63C7DD183914A4AE452C9F6AD5D462CE3D277798075B107615C1A8A30
8. 取上一步结果的前4个字节:(8位十六进制数)D61967F6,把这4个字节加在第五步结果的后面,作为校验。
(这就是比特币地址的16进制形态)
00010966776006953D5567439E5E39F86A0D273BEED61967F6
9. 用base58表示法变换一下地址,就变成我们最初的那个地址啦!
16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM
16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM
就是我们常说的公钥,也就是钱包地址。我们以为的钱包有可能是这样的:
但其实比特币钱包是一个抽象的概念,就是保存和管理比特币地址以及对应公私钥对的软件。根据终端类型的不同,比特币钱包可以分为桌面钱包、手机钱包、网页钱包和硬件钱包。
按照私钥的存储方式,可以分为冷钱包、热钱包两种。
冷钱包是指互联网不能访问到私钥的钱包:
冷钱包往往依靠“冷”设备确保比特币私钥的安全,比如不联网的电脑、手机、写着私钥地址的小本本等。冷钱包避免了被黑客盗取私钥的风险,但是可能面临物理安全风险,比如电脑丢失损坏等。
热钱包是指互联网能够访问私钥的钱包:
热钱包往往是在线钱包的形式。使用热钱包时,最好在不同平台设置不同密码,且开启二次认证,以确保自己的资产安全。
比特币科普之Hash不是加密?
Hash是比特币系统中很重要的一个概念,不少人认为Hash是加密,其实是一种误解。Hash和加密是两种不同的密码学技术。加密是对传递数据进行编码处理的技术手段,使得编码后的数据对于未获知具体处理方式的其他方不可读。通常,我们将明文转换为密文的过程称为“加密”。
而Hash(哈希)又称数字摘要、散列、杂凑、指纹,是以任意长度的数据为输入输出相应固定长度的值。在区块链中,账户与交易都涉及哈希函数的使用。
全民课堂第1-4讲今天就讲到这里啦,比特币让无数的“淘金者”疯狂,投身进入挖矿的大部队中,比特币究竟是如何挖出来的呢?下一节课我们将详解比特币的挖矿原理。敬请期待~