美文网首页
精通比特币——读书笔记

精通比特币——读书笔记

作者: 极奏 | 来源:发表于2019-06-26 14:06 被阅读0次

第一章(介绍)

什么是比特币?

  • 比特币是构成数字货币生态系统基础的概念和技术的集合

  • 比特币用户有自己的密钥,允许他们证明比特币网络中的比特币的所有权。使用这些密钥,他们可以签署交易以解锁价值,并将其转移给新的所有者实现消费。钥匙通常存储在每个用户的计算机或智能手机上的数字钱包中。

  • 比特币是分布式的对等系统。因此,没有“中央”服务器或控制点

  • 比特币是通过称为“挖掘”的过程创建的,该过程涉及到在处理比特币交易时竞争寻找数学问题的解决方案。

  • 比特币协议包括内置的算法,用于调整整个网络的采矿功能。

  • 换句话说,比特币(bitcoin)也是协议对等网络分布式计算创新的代名词。

  • 比特币这四个创新包括:去中心化的对等网络(比特币协议)公共交易总帐(区块链)独立交易确认和货币发行的一套规则(共识规则)实现有效的区块链全球去中心化共识的机制(工作量证明算法)。

发送比特币的过程

  • A在钱包里将0.10BTC发送给B的地址,并用A的私钥签署交易。

  • 当交易通过对等协议传输时,它会快速传播到比特币网络,在不到一秒钟内,网络中大多数连接良好的节点都会首次接收到交易,并且首次看到B的地址。

  • B的钱包不断地“倾听”在比特币网络上发布的交易,寻找与B的钱包中的地址匹配的任何内容。

  • 在A的钱包发送交易几秒钟后,B的钱包将显示它正在接收0.10BTC

  • 确认起初,B的地址将把A的交易显示为“未确认”。这意味着交易已传播到网络,但尚未记录在比特币交易账簿即区块链中。要确认,一个交易必须包含在一个区块中,并被添加到区块链,这样的情况平均每10分钟发生一次。在传统的财务术语中,这被称为清算。

第二章(交易,块,挖矿和区块链)

比特币概述

  • 比特币系统由用户(用户通过密钥控制钱包)、交易(每一笔交易都会被广播到整个比特币网络)和矿工(通过竞争计算生成在每个节点达成共识的区块链,区块链是一个分布式的公共权威账簿, 包含了比特币网络发生的所有的交易)组成。

比特币交易

  • 交易输入输出的总额(负债和信用)不需要相等。

  • 当输出累加略少于输入量时,两者的差额就代表了一笔隐含的“矿工费”,这也是将交易放进账簿的矿工所收集到的一笔小额支付。

找零

  • 输入是指钱币的来源,通常是之前一笔交易的输出。交易输出将约定金额发送到新的所有者的比特币地址,并将找零输出返回原来原来所有者。

常见的交易形式

  • 最常见的交易形式是从一个地址到另一个地址的简单支付,这种交易也常常包含给支付者的“找零”。一般交易有一个输入和两个输出


  • 另一种常见的交易形式是集合多个输入到一个输出的模式。这相当于现实生活中将很多硬币和纸币零钱兑换为一个大额面钞,像这样的交易有时由钱包应用产生来清理许多在支付过程收到的小数额的找零。
  • 另一种在比特币账簿中常见的交易形式是将一个输入分配给多个输出,即多个接收者的交易。这类交易有时被商业实体用作分配资金,例如给多个雇员发工资的情形。


交易的构建

  • 钱包应用甚至可以在完全离线时建立交易。就像在家里写张支票, 之后放到信封发给银行一样,比特币交易建立和签名时不用连接比特币网络。只有在执行交易时才需要将交易发送到网络。

创建交易输出

  • 交易的输出会被创建成为一个包含这笔数额的脚本的形式,只能被引入这个脚本的一个解答后才能兑换。

  • 如果交易有多个输出,钱包会多付一小笔费用,这个差值会就被矿工当作交易费放到区块的交易里,最终放进区块链帐薄中。

将交易放到总账簿中

  • 这个交易必须要被传送到比特币网络中以成为分布式账簿(区块链)的一部分。

交易的传送

  • 因为这个交易包含处理所需的所有信息,所以这个交易是被如何或从哪里传送到比特币网络的就无所谓了。比特币网络是由参与的比特币客户端联接几个其他比特币客户端组成的P2P网络。比特币网络的目的是将交易和区块传播给所有参与者。

如何传播

  • “说着”比特币协议,从而实现参与比特币网络的任何系统(例如服务器,桌面应用程序或钱包)都称为比特币节点。

  • 任何比特币网络节点(其它客户端)收到一个之前没见过的有效交易时会立刻将它转发给联接到自身的其它节点。 因此,这个交易迅速地从P2P网络中传播开来,几秒内就能到达大多数节点。

  • 一个对比特币交易的常见误解是它们必须要等10分钟后被确认加进一个新区块,或等60分钟以得到六次确认后才是有效的。虽然这些确认可以确保交易已被整个网络接受,但对于像一杯咖啡这样的小额商品来说就没有必要等待那么长时间了。一个商家可以免确认来接受比特币小额支付。这样做的风险不比接受一个不是用有效身份证领取或没有签名的信用卡的风险更大,而后者是现在商家常做的事情。

比特币挖矿

挖矿在比特币系统中有两个重要作用:

  • 挖矿节点通过参考比特币的共识规则验证所有交易。 因此,挖矿通过拒绝无效或畸形交易来提供比特币交易的安全性。

  • 挖矿在构建区块时会创造新的比特币,和一个中央银行印发新的纸币很类似。每个区块创造的比特币数量是固定的, 随时间会渐渐减少。

第三章(比特币核心)

从源码编译比特币核心

这里我们选择用git命令来创建源代码的本地副本

git clone git@github.com:bitcoin/bitcoin.git

待更新
主要是一些节点的命令行操作

  • 要使用比特币核心客户端生成一个新的密钥,可使用 getnewaddress 命令。

  • 出于安全考虑,命令运行后只 显示生成的公钥,而不显示私钥。

  • 如果要bitcoind显示私钥,可以使用 dumpprivkey 命令。dumpprivkey 命令会把私钥以 Base58校验和编码格式显示,这种私钥格式被称为钱包导入格式(WIF,Wallet Import Format)。

第四章(密钥和地址)

  • 比特币的所有权是通过数字密钥、比特币地址和数字签名来确定的。

  • 数字密钥存储在一个叫做钱包的文件或简单的数据库中。

  • 密钥是成对出现的,由一个私钥和一个公钥所组成。公钥就像银行的帐号,而私钥就像控制账户的PIN码或支票的签名。

  • 公钥和私钥之间的数学关系,使得私钥可用于生成特定消息的签名。此签名可以在不泄露私钥的同时对公钥进行验证。

私钥和公钥
私钥、公钥和比特币地址之间的关系如下图所示。


为什么使用非对称加密(公钥/私钥)
  • 非对称密码术不是用于“加密”交易,是用来生成数字签名的。

  • 访问公钥和交易指纹的任何人都可以使用它们来验证签名。

  • 这种非对称密码学的适用性使得任何人都可以验证每笔交易的每个签名,同时确保只有私钥的所有者可以产生有效的签名。

私钥

  • 私钥就是一个随机选出的数字而已

  • 私钥用于生成支付比特币所必需的签名以证明对资金的所有权。

  • 比特币私钥只是一个数字。你可以用硬币、铅笔和纸来随机生成你的私钥:掷硬币256次,用纸和笔记录正反面并转换为0和1,随机得到的256位二进制数字可作为比特币钱包的私钥。该私钥可进一步生成公钥。

  • 本质上与“在1 到2^256之间选一个数字”无异

  • 通常情况下,操作系统随机数生成器由人工的随机源进行初始化,这就是为什么也可能需要不停晃动鼠标几秒钟。

  • 私钥可以是1和n-1之间的任何数字,其中n是一个常数(n=1.158 * 1077,略小于2256)

  • 从编程的角度来看,一般是通过在一个密码学安全的随机源中取出一长串随机字节,对其使用SHA256哈希算法进行运算,这样就可以方便地产生一个256位的数字。

  • 不要自己写代码或使用你的编程语言提供的简易随机数生成器来获得一个随机数。使用密码学安全的伪随机数生成器(CSPRNG),并且需要有一个来自具有足够熵值的源的种子。使用随机数发生器的程序库时,需仔细研读其文档,以确保它是加密安全的。正确实施CSPRNG是密钥安全性的关键所在。

  • 比较有意思的是,比特币私钥空间的大小是2256,这是一个非常大的数字。用十进制表示的话,大约是1077,而可见宇宙被估计只含有1080个原子。

公钥

  • 通过椭圆曲线乘法可以从私钥计算得到公钥。

  • 其反向运算,被称为“寻找离散对数”——已知公钥K来求出私钥k——是非常困难的,就像去试验所有可能的k值,即暴力搜索。

椭圆曲线密码学(Elliptic Curve Cryptography)解释

  • 椭圆曲线乘法是密码学家称之为“陷阱门”功能的一种函数:在一个方向(乘法)很容易做,而不可能在相反的方向(除法)做。

  • 这个数学技巧成为证明比特币资金所有权的不可伪造和安全的数字签名的基础。

  • 比特币使用了secp256k1标准所定义的一种特殊的椭圆曲线和一系列数学常数。ecp256k1曲线由下述函数定义,该函数可产生一条椭圆曲线:


  • 上述mod p(素数p取模)表明该曲线是在素数阶p的有限域内,也写作Fp,其中p = 2^256 – 2^32 – 2^9 – 2^8 – 2^7 – 2^6 – 2^4 – 1, 这是个非常大的素数。

  • 以一个随机生成的私钥k为起点,我们将其与曲线上预定的生成点G相乘以获得曲线上的另一点,也就是相应的公钥 K。

  • 生成点是secp256k1标准的一部分,比特币密钥的生成点都是相同的:
    {K = k * G}
    其中k是私钥,G是生成点,在该曲线上所得的点K是公钥。

待更新

比特币地址

  • 比特币地址是一个由数字和字母组成的字符串,可以与任何想给你比特币的人分享。

  • 比特币地址可由公钥经过单向的加密哈希算法得到。哈希算法是一种单向函数,接收任意长度的输入产生指纹或哈希。加密哈希函数在比特币中被广泛使用 :比特币地址、脚本地址以及在挖矿中的工作量证明算法。

  • 由公钥生成比特币地址时使用的算法是Secure Hash Algorithm (SHA)和the RACE Integ rity Primitives Evaluation Message Digest (RIPEMD),具体地说是SHA256和RIPEMD160。

  • 以公钥 K 为输入,计算其SHA256哈希值,并以此结果计算RIPEMD160 哈希值,得到一个长度为160位(20字节)的数字:
    A = RIPEMD160(SHA256(K))
    公式中,K是公钥,A是生成的比特币地址。

  • 通常用户见到的比特币地址是经过“Base58Check”编码的(参见“Base58和Base58Check编码”一节),这种编码 使用了58个字符(一种Base58数字系统)和校验码,提高了可读性、避免歧义并有效防止了在地址转录和输入中产生 的错误。


    公钥转换成地址的过程

Base58和Base58Check编码

  • Base64使用了26个小写字母、26个大写字母、10个数字以及两个符号(例 如“+”和“/”),用于在电子邮件这样的基于文本的媒介中传输二进制数据。Base64通常用于编码邮件中的附件。

  • Base58是Base64编码格式的子集,同样使用大小写字母和10个数字,但舍弃了一些容易错 读和在特定字体中容易混淆的字符。

  • 具体地,Base58不含Base64中的0(数字0)、O(大写字母o)、l(小写字母 L)、I(大写字母i),以及“+”和“/”两个字符。简而言之,Base58就是由不包括(0,O,l,I)的大小写字母和数字组成。

  • 比特币的Base58字母表:
    123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

  • 为了增加防止打印和转录错误的安全性,Base58Check是一种常用在比特币中的Base58编码格式。

  • 为了增加防止打印和转录错误的安全性,Base58Check是一种常用在比特币中的Base58编码格式,比特币有内置的检查错误的编码。

相关文章

网友评论

      本文标题:精通比特币——读书笔记

      本文链接:https://www.haomeiwen.com/subject/pbqccctx.html