区块链使用非对称加密对交易进行加密和解密
非对称加密有公钥和私钥,并且有如下特点:
* 公钥可以对外公开,私钥不可以
* 不能由公钥推导出私钥,确保私钥的安全性。
* 知道明文和密文,无法知道钥匙
* 知道钥匙和密文无法知道明文
公钥和私钥的使用场景:
* 对方用你的公钥对数据进行加密,只有你用私钥进行解密才能看到密文,别人不拥有你的私钥,解密不了。
* 你用私钥进行签名,即私钥+明文=>摘要;对方用你的公钥进行验证,可以知道数据是否被篡改过。
比特币的所有权由以下几个
* 数字密钥
* 比特币地址
* 数字签名
数字密钥不存储在网络中,由用户生成并存储在一个文件或简单的数据库中,称之为钱包。
* 公钥用于接收比特币
* 私钥用户比特币交易时的交易签名
比特币中:
单向椭圆曲线乘积 单向哈希函数
私钥(k)----------------->公钥(K)--------------->比特币地址(A)
即比特币地址是由公钥生成的。
单向椭圆曲线乘积和单向哈希函数都是公钥加密的算法。
私钥k = SHA256(密码学安全随机字节)
公钥K = 私钥k * G //G是椭圆生成点,比特币全网相同,比特币通过openSSL加密库进行椭圆曲线计算的得到公钥
地址A = RIPEMD(SHA256(公钥K))//A是长度160bit的地址,即20字节
在区块链中,交易的过程如下:
当A向B转账,表面上:
* A填入B的比特币地址,
* A填入转账金额
* 点击转账
其背后:
* 针对输出加密(金额等),为了只有B能够使用这个输出 //使用B的公钥
* 针对输入签名,为了证明A的输入有效,即确实由这么多钱;也为了让区块和其他节点验证数据未被篡改 //用A的私钥签名
* 发送A的公钥及签名后的数据
所有人可用A的公钥对签名进行验证如下内容:
* 确认交易有效,未被篡改
* 确认支付者余额足够,即对上一笔输出进行验证
为什么需要对上一笔的输出进行验证,而不是余额?
因为比特币是没有余额的,它不记录余额,它是通过计算以前的输入输出交易来计算出余额。
交易发出到网络后,等待交易被区块打包,即从未确认交易变成已确认交易。
作为B方,其可以选择:
* 等到收到A发送的币
* 用自己的地址请求交易记录
* 用自己的私钥兑换出输出,下一次转账时可以作为输入使用。
总结:比特币使用非对称加密,拥有公钥、私钥和比特币地址
在交易中,转账方使用接收方公钥进行加密,使用自己的私钥进行签名,并将自己的公钥连同签名一起发送出去
当交易被确认后,接收方就可以用自己的私钥兑换出比特币,进行后续的转账才能保证能够计算出足够的余额来支付
热门工具 换一换