比特币原理入门简析

  11年时简单接触过比特币,当时的价格不到一元,现在已经涨到天价了。回想当时,自己只是坚信一个基本原理,货币需要等价的黄金等贵金属或者政府和组织机构优良的信誉做保证,比特币都不具备,肯定不会值钱,就没有继续参与下去。 现在过了这么久了,也不再关注他的价格和价值,简单从技术层面总结和归纳下实现原理。

总体感觉:比特币原理没有很复杂很繁琐,但是对数学知识特别是数字处理要求很高,同时基于P2P的交易安全性也考虑的很周全。 

准备分三篇来讲述:  首先是这篇简单的比特币知识入门 ,     然后再写一篇从破解攻击比特币系统的角度来详细讲述实现数学原理,   最后准备写用现有比特币代码和工具实现一个新的加密数字货币.

一.私钥,公钥,比特币地址       (粗略对应于银行的账号密码吧)

          

   1.1    K = k * G:椭圆曲线乘法的 相加可以做切线再对X轴翻转,如下图。G是一个固定点。

    

 

         【椭圆曲线的函数表达:y2 mod p = (x3 + 7) mod p    (p = 2^256 – 2^32 – 2^9 – 2^8 – 2^7 – 2^6 – 2^4 – 1)】

 

  1.2  A = RIPEMD160(SHA256(K)) 

    

 

  1.3  其他

     钱包,高级密钥:多重地址签名靓号,等等。钱包是可以使用比特币的软件工具(例如App)。

 总结:私钥是拥有比特币的唯一途径,别人知道你的私钥也拥有了私钥对应的比特币。 私钥可以计算得出公钥和比特币地址,反之不可以。 地址是别人给你“转账”的账户地址。比特币地址“相当于”账户,私钥“相当于” 账户+密码。

              私钥是每个人自己随机生成的256长度的二进制数字。是否可以随机尝试别人的私钥,来获取别人的比特币呢? 答案是否定的,超大的数字中随机取数字,相同的概率极低极低。甚至可以说  “当两个人生成相同的随机私钥时,上帝就出现了”。

 

 

二.交易

     交易是把货币(比特币)从源账户转到目标账户的过程。

      比特币不同于银行,不是记录每个 比特币地址 拥有多少比特币 ,而是通过 锁定在比特币地址的一条条的交易记录里的比特币(求和)表示比特币资产。A花比特币时 通过“解锁”自己地址的一个或者多个交易记录里的比特币,再“锁定”到目标比特币地址(还有找零和交易费),B想要花比特币时重复同样的过程,其他所有人通过解锁脚步来独立校验交易的合法性并独立记录这条交易。

     交易记录: 

                  N个源账号输入+ M个目标账号输出 + 其他信息。(在花费的比特币,如果一条交易记录里的比特币不够,可以同时用多个记录)

        输出:“花费的”交易记录号,比特币数量,锁定脚本;         

                       输入:比特币数量,解锁脚本等等。

    0输入交易:

      初始状态没有交易记录,也没有哪个地址有比特币,所以就有了类似于银行发行货币的 0输入交易,客户端通过挖矿的方式发现新的区块链区块,同时获得比特币奖励,这个交易是只有输出没有输入的。

    锁定和解锁脚本

       P2PKH(Pay­to­Public­Key­Hash)P2PK(Pay­to­Public­Key) P2SH(Pay­to­Script­Hash) 等。具体的数学原理后续分析。

    总结: 比特币通过锁定和解锁一条条交易记录里的比特币来实现交易的过程。支付给别人时,用自己的私钥解锁自己的比特币记录,把比特币锁定到对方的地址,并且此记录只有对方的私钥可以解锁。

 

 

三.区块链---交易数据链---分布式账本

     区块链是所有交易记录的存储方式和载体,是把一笔笔交易记录放到一个个的固定大小的区块,再串行起来的数据。 区块链数据被每个客服端独立保存完整一份(目前有几十个G的数据量)

     单个区块结构:   头+ 交易记录内容

     区块链接方式:  顺序链接,每个区块有且仅有一个上级区块

     区块数据校验方式: Merkle树

     总结:一条条交易数据被打包成一个个的区块,区块再被顺序链接起来成为区块链,每个区块采用Merkle数的方式验证数据正确性。

 

 

四.P2P网络

    比特币是去中心化的,所有客服端是平等的,校验和记录每一笔交易,所有的客户端在自己通过p2p的网络来交互信息。

    客户端节点类型: (具体看最后的附录图)

      核心客户端: 包含完整的比特币客户端功能,例如:完整的区块链数据,路由节点,提供钱包功能和同时在挖矿

      独立矿工:没有钱包功能

      矿池,挖矿节点,轻量级钱包(使用服务器的数据,不校验所有交易数据)

    网络发现:

      对等节点:客户端通过“握手”协议建立的平等关系的网络节点:后续会交换交易数据

      种子节点: 客户端维护的长期稳定允许的节点,不一定跟种子节点建历对等节点关系,但是可以通过种子节点快速找到其他节点建立对等节点关系。

      种子节点全部下线等极限情况如何处理??猜测可以通过爬虫程序寻找其他节点。

    简易支付SPV协议和Bloom过滤器:简易支付不校验全部数据,使用Bloom过滤器查找转账目标地址的方式增加安全性

      总结:P2P网络协议类似迅雷下载的协议,通过种子节点和对等节点交换数据等方式实现去中心化的网络通信。

 

五.挖矿

     挖矿是通过算力校验和记录全网交易数据,并竞争找到下一个符合条件的区块链(满足HASH条件的nonce值)来永久保存交易记录,并且成功者获得报酬的过程。

    挖矿的方式:每10分钟计算一个新区块,重复拿随机的nonce值和区块数据一起计算HASH值,直到第一个算出Hash值满足条件,则生成新的区块,数据分享全网。多分叉链路时长度更长的合法。

    挖矿的作用:保存校验全网交易记录,使系统运转。

    挖矿的报酬:1.发行的货币,持续减少,到最后玩全没有。2.区块里的所有交易的交易手续费。

    51%算力攻击:算力达到51%时可以肯定发起攻击,重复支付,拒绝某些客户端等。所以挖矿的矿工越多(算力越多)整个系统越安全。

 

全文总结:交易的账号密码:私钥和地址;交易的过程:解锁自己的比特币锁定到对方地址,循环往复;交易数据的存储方式:一块一块串联起来的交易记录叫区块链,所有用户都保存一份;客户端交互方式:p2p网络。 系统驱动运作方式: 挖矿。

 

 

 附录:

 

 

福利: 欧拉公式图示

 

posted @ 2021-05-18 22:36  thinkqin  阅读(635)  评论(0编辑  收藏  举报