zoukankan      html  css  js  c++  java
  • 比特币非对称加密详解

    先来理论概念上的简单总结

    交易准备:

    • 我的地址A(公钥)和配对的私钥(保存在钱包)
    • 对方的地址B(公钥)

    交易过程:

    1. 两个账户转账时,比如我(A)给对方(B)转账,我发送一条信息“A给B转账10个BTC”
    2. 先用B公开的公钥加密,再用我的私钥加密(两层加密)
    3. 然后把双层加密信息广播到比特币网络节点,所有节点收到后他们会用我的公钥(A)来校验是不是我(第一层加密,确认是我的身份的东西后会进行记录
    4. 因为我做了两层加密,所以里面的数据只有B用他的私钥能解开,B也一样先检验第一层我的公钥确认是我,再用自己的私钥匙来解密第二层从而拿到数据
    5. B收到钱后也会类似我发数据的方式进行全网广播

    done!!

    下面详细记录流程

    首先我作为发送方,我拥有:

    • 付款地址(公钥):“1FKDZ3s2H787sa”
    • 私钥:“2SYFs2SU89H8YH”

    Hash ( Hash ( func ( 私钥“2SY...” ) ) ) -> 付款地址"1FKDZ..."  (第一次哈希)

    公钥和私钥是一对非对称关系,可以理解为用户名和密码的关系。

    比特币交易流程

    比特币的账户是用地址来表示,账本上不显示个人信息,转账是把比特币从一个地址转移到另一个地址。

    例如一段交易信息记录:

    {
    "付款地址":"1FKDZ3s2H787sa"
    "收款地址":"3SKC9CBa239aFcc"
    "金额":"0.5btc"
    }
    只有拥有该付款地址的私钥的我才能支付该笔交易。


    对交易信息签名

    1.对交易信息哈系(第二次哈系)
    hash('
    {
    "付款地址":"1FKDZ3s2H787sa"
    "收款地址":"3SKC9CBa239aFcc"
    "金额":"0.5btc"
    }') -> 摘要信息(Hash值):4ZYzha97zhya8

    2.签名
    sign("摘要信息4ZY...",“私钥2SY...”) -> “签名“:5QMy6gF567F


    验证

    广播付款地址和签名后,验证返回交易摘要
    verify("签名5QM...",”付款地址1FKDZ...”) -> "摘要信息"4ZY...
    这是一次逆向算出交易信息的运算,把得出的摘要信息结果和第一次哈希的结果对比,获得验证结果:
    if(verify("3cdferdadgadg", "2A39CBa2390FDe") ==
    hash('{
    "付款地址":"2A39CBa2390FDe",
    "收款地址":"AAC9CBa239aFcc",
    "金额":"0.2btc"}')) :

    # 写入账本
    # 广播

    else:
    # 不干活


    补充:
    • 比特币加密算法:SHA256
    • 比特币系统使用了椭圆曲线签名算法(ECC),算法的私钥由32个字节随机数组成,通过私钥可以计算出公钥,公钥经过一序列哈希算法和编码算法得到比特币地址,地址也可以理解为公钥的摘要
  • 相关阅读:
    快速排序
    将指定目录下的所有子文件或子目录加载到TreeView
    导入英汉文本,用字符串切割,泛型集合存储的英汉字典
    取年月日的字符串方法
    简化的MVC-导入模板HTML,导入数据txt,用字符串方法生成JS菜单
    索引器的使用
    打开文件练习
    泛型委托
    将正则表达式转化成确定的有限自动机
    青蛙过桥
  • 原文地址:https://www.cnblogs.com/zmsn/p/11677343.html
Copyright © 2011-2022 走看看