区块链使用非对称加密对交易进行加密和解密

非对称加密有公钥和私钥,并且有如下特点:



* 公钥可以对外公开,私钥不可以
* 不能由公钥推导出私钥,确保私钥的安全性。
* 知道明文和密文,无法知道钥匙
* 知道钥匙和密文无法知道明文
公钥和私钥的使用场景:



* 对方用你的公钥对数据进行加密,只有你用私钥进行解密才能看到密文,别人不拥有你的私钥,解密不了。
* 你用私钥进行签名,即私钥+明文=>摘要;对方用你的公钥进行验证,可以知道数据是否被篡改过。
比特币的所有权由以下几个



* 数字密钥
* 比特币地址
* 数字签名
数字密钥不存储在网络中,由用户生成并存储在一个文件或简单的数据库中,称之为钱包。



* 公钥用于接收比特币
* 私钥用户比特币交易时的交易签名
比特币中:

                    单向椭圆曲线乘积                单向哈希函数


私钥(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发送的币
* 用自己的地址请求交易记录   
* 用自己的私钥兑换出输出,下一次转账时可以作为输入使用。



总结:比特币使用非对称加密,拥有公钥、私钥和比特币地址

        在交易中,转账方使用接收方公钥进行加密,使用自己的私钥进行签名,并将自己的公钥连同签名一起发送出去


        当交易被确认后,接收方就可以用自己的私钥兑换出比特币,进行后续的转账才能保证能够计算出足够的余额来支付





友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信