区块链之交易及加密

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

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

  1. 公钥可以对外公开,私钥不可以
  2. 不能由公钥推导出私钥,确保私钥的安全性。
  3. 知道明文和密文,无法知道钥匙
  4. 知道钥匙和密文无法知道明文

公钥和私钥的使用场景:

  1. 对方用你的公钥对数据进行加密,只有你用私钥进行解密才能看到密文,别人不拥有你的私钥,解密不了。
  2. 你用私钥进行签名,即私钥+明文=>摘要;对方用你的公钥进行验证,可以知道数据是否被篡改过。

比特币的所有权由以下几个

  1. 数字密钥
  2. 比特币地址
  3. 数字签名

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

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

比特币中:

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

私钥(k)----------------->公钥(K)--------------->比特币地址(A)

即比特币地址是由公钥生成的。

单向椭圆曲线乘积和单向哈希函数都是公钥加密的算法。

私钥k = SHA256(密码学安全随机字节)

公钥K = 私钥k * G  //G是椭圆生成点,比特币全网相同,比特币通过openSSL加密库进行椭圆曲线计算的得到公钥

地址A = RIPEMD(SHA256(公钥K))//A是长度160bit的地址,即20字节


在区块链中,交易的过程如下:

当A向B转账,表面上:

  1.     A填入B的比特币地址,
  2.     A填入转账金额
  3.     点击转账

   其背后:

  1. 针对输出加密(金额等),为了只有B能够使用这个输出    //使用B的公钥
  2. 针对输入签名,为了证明A的输入有效,即确实由这么多钱;也为了让区块和其他节点验证数据未被篡改    //用A的私钥签名
  3. 发送A的公钥及签名后的数据

所有人可用A的公钥对签名进行验证如下内容:

  1. 确认交易有效,未被篡改
  2. 确认支付者余额足够,即对上一笔输出进行验证

为什么需要对上一笔的输出进行验证,而不是余额?

    因为比特币是没有余额的,它不记录余额,它是通过计算以前的输入输出交易来计算出余额。

交易发出到网络后,等待交易被区块打包,即从未确认交易变成已确认交易。

 作为B方,其可以选择:

  1. 等到收到A发送的币
  2. 用自己的地址请求交易记录   
  3. 用自己的私钥兑换出输出,下一次转账时可以作为输入使用。


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

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

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

猜你喜欢

转载自blog.csdn.net/weixin_42316377/article/details/80786922