Go区块链之地址
简介
在上文中,我们实现了基本的交易。我们知道了,在比特币中没有账户,用户电话等用户相关信息,区块链并不保存个人信息。但是,在比特币中仍然有一些信息证明谁拥有这些Coin,这个信息就是地址。在上一文中,我们的地址使用的是自己定义的字符串,比如zhangsan、lisi、wangwu、zhaoliu等。本文将实现真正的地址。
比特币地址
这是一个比特币地址:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa。这是第一个比特币地址,据称该地址属于Satoshi Nakamoto。比特币地址是公开的。如果你想要转币给某个人,你必须直到他的比特币地址。每一个比特币地址都是独一无二的,该地址并没有指定谁是该地址的拥有者。实际上,这些地址只是一个(可读性比较好的)公钥。在比特币中,你拥有一对公私钥。比特币根据加密算法生成这些密钥,并且保证只有拥有了这对key,才能使用该地址的币。
公钥密码学
公钥加密算法使用一对密钥:公钥和私钥。公钥可以展示给其他人,私钥不可展示给其他人。在比特币中,私钥就代表着你本人。
比特币钱包就是这样的一个密钥对。当你使用钱包或客户端创建地址时,就会生成一个这样的密钥对。拥有私钥的人,就拥有该地址的币。公钥和私钥仅仅是一些随机的字节序列,因此比特币使用一个算法将公钥转换为一个可读的字符串。
现在我们直到如何认定address所属,但是比特币又是如何校验交易输出(储存coin的地方)的所属呢?
数字签名
在数学和密码学中,数字签名保证:
1.数据由发送人发给接受人的过程中,数据不可更改。
2.数据由确定的发送人发送。
3.发送人不能否认发送过数据。
对数据进行签名,可以得到签名数据(signature),我们可以对该签名数据进行验证。当我们使用私钥时,我们需要进行数字签名,当我们进行签名验证时,我们使用公钥。为了对数据进行签名,我们需要一下参数:
1.需要签名的数据
2.私钥
对数据进行签名后生成一个签名数据(signature),该数据存储在input中,想要验证该签名,需要以下参数:
1.数据
2.签名
3.公钥