主页 > imtokenapp下载安装 > 掌握比特币学习

掌握比特币学习

imtokenapp下载安装 2023-01-17 05:28:05

本博客记录了《Learn to Master Bitcoin》一书中关于BTC的重要概念。

一、私钥和公钥

比特币的所有权由数字密钥、比特币地址和数字签名决定。数字密钥实际上并不存储在网络中,而是由用户生成并存储在文件中,或者只是称为钱包的数据库中。存储在用户钱包中的数字密钥完全独立于比特币协议,可以由用户的钱包软件生成和管理,无需参考区块链或访问网络。密钥支持比特币的许多有趣功能,包括去中心化信任和控制、所有权身份验证以及基于加密证明的安全模型。

密钥成对出现,由私钥和公钥组成。公钥就像银行帐号,私钥就像控制帐户或支票签名的 PIN。

在比特币系统中,我们使用公钥加密来创建控制比特币获取的密钥对。密钥对由私钥和从它派生的唯一公钥组成。公钥用于接收比特币,而私钥用于在比特币支付时签署交易。

公钥和私钥之间的数学关系,这样私钥可用于为特定消息生成签名。此签名在不泄露私钥的情况下验证公钥。

在支付比特币时,比特币的当前所有者需要在交易中提交他们的公钥和签名(每笔交易的签名不同,但由同一个私钥生成)。比特币网络中的每个人都可以通过提交的公钥和签名进行验证,并确认交易是有效的,即确认付款人拥有当时正在交易的比特币的所有权。

提示 为了方便起见,大多数比特币钱包工具将私钥和公钥作为密钥对存储在一起。但是,公钥可以从私钥计算出来,所以也可以只存储私钥。

生成算法

比特币钱包包含一系列密钥对,每个密钥对包括一个私钥和一个公钥。私钥 (k) 是一个数字,通常是随机选择的。有了私钥,我们可以使用单向加密函数椭圆曲线乘法生成公钥(K)。有了公钥 (K),我们可以使用单向加密哈希函数生成比特币地址 (A)。

私钥->公钥->比特币地址

在本节中,我们将从生成私钥开始,描述如何使用椭圆曲线运算从私钥生成公钥,最后从公钥生成比特币地址。私钥、公钥和比特币地址的关系如下图所示。

file

私钥

比特币分叉对比特币的影响_比特币怎么花出去_比特币转错到比特币现金地址了

私钥只是一个随机数。对比特币地址中所有资金的控制取决于相应私钥的所有权和控制权。在比特币交易中,私钥用于生成支付比特币所需的签名,以证明资金的所有权。私钥必须时刻保密,因为一旦泄露给第三方,相当于保护私钥的比特币也被交出。私钥也必须备份,以防不慎丢失,因为私钥一旦丢失,就很难找回,它所保护的比特币将永远丢失。

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

以下是随机生成的私钥(k),以十六进制格式表示(256位二进制数,显示为64位十六进制数,每个十六进制数4位):

1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD

比特币私钥空间的大小是2^256,这是一个非常大的数字。十进制大约是 10^77,而可见宇宙估计只有 10^80 个原子。

公钥

可以通过椭圆曲线乘法从私钥计算出公钥,这是一个不可逆的过程:K = k * G。其中 k 是私钥,G 是称为生成点的常数点,K 是生成的公钥。反向操作,称为“求离散对数”——知道公钥 K 的情况下找到私钥 k——非常困难,就像尝试 k 的所有可能值一样,是一种蛮力搜索。在展示如何从私钥生成公钥之前,让我们稍微详细研究一下椭圆曲线密码学。

提示椭圆曲线乘法是密码学家称之为“陷阱门”函数的函数:在一个方向(乘法)很容易做到,但在相反方向(除法)是不可能做到的。私钥的拥有者可以轻松地创建公钥,然后与世界共享,知道没有人可以从公钥中反转函数并计算出私钥。这种数学技巧成为了证明比特币资金所有权的不可伪造且安全的数字签名的基础。

我们从一个随机生成的私钥k开始,乘以曲线上预定的生成点G,得到曲线上的另一个点,即对应的公钥K。生成点是secp256k1标准的一部分,并且比特币密钥的生成点都是一样的:

{K = k * G}

其中k是私钥,G是生成点,曲线上的结果点K就是公钥。因为所有比特币用户的生成点都是相同的,所以一个私钥k乘以G会得到相同的公钥K。k和K的关系是固定的,但只能在一个方向上操作,即K 是从 k 中获得的。这就是为什么比特币地址(K 的派生)可以与任何人共享而无需透露私钥 (k)。

提示因为数学运算是单向的,所以私钥可以转换为公钥,但公钥不能转换回私钥。

比特币分叉对比特币的影响_比特币转错到比特币现金地址了_比特币怎么花出去

比特币地址

比特币地址是一串数字和字母,可以与任何想给你比特币的人共享。从公钥(也由数字和字母组成的字符串)生成的比特币地址以数字“1”开头。下面是一个比特币地址的例子:

1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy

在一笔交易中,比特币地址通常作为收款人出现。如果将比特币交易比作支票,那么比特币地址就是收款人,也就是我们要在收款人栏中写的。支票的收款人可以是银行账户、公司、机构,甚至是现金支票。支票不指定特定帐户,而是使用抽象名称作为收款人,这使其成为一种相当灵活的支付工具。同样,比特币地址使用类似的抽象来使比特币交易变得灵活。比特币地址可以代表一对公钥和私钥的所有者,也可以代表其他东西,例如将在下面的“P2SH(Pay-to-Script-Hash)”部分讨论的支付脚本。现在,让我们看一个从公钥生成比特币地址的简单示例。

比特币地址可以通过单向加密哈希算法从公钥中获取。哈希算法是一种单向函数,它接受任意长度的输入以生成指纹或哈希。加密哈希函数在比特币中被广泛使用:比特币地址、脚本地址和挖矿中的工作量证明算法。用于从公钥生成比特币地址的算法是安全哈希算法 (SHA) 和 RACE 完整性原语评估消息摘要 (RIPEMD),特别是 SHA256 和 RIPEMD160。

以公钥K为输入,计算其SHA256哈希值,并用结果计算RIPEMD160哈希值,得到一个长度为160位(20字节)的数字:

A = RIPEMD160(SHA256(K))

公式中,K为公钥,A为生成的比特币地址。

注意:比特币地址与公钥不同。比特币地址是通过单向哈希函数从公钥生成的。

通常用户看到的比特币地址是“Base58Check”编码的(参见“Base58 和 Base58Check 编码”部分),它使用 58 个字符(一种 Base58 编号系统),校验和提高了可读性,避免了歧义,有效地防止了地址错误转录和输入。 Base58Check 编码也用于比特币的其他地方,例如比特币地址、私钥、加密密钥和脚本哈希,以提高可读性和正确输入。

Base58 和 Base58Check 编码

为了更简洁方便地表示一长串数字并使用更少的符号,许多计算机系统使用大于十进制的数字和字母编码。符号。例如,传统的十进制计数系统使用十位数字 0-9,而十六进制系统使用额外的六个字母 A-F。对于相同的数字,其十六进制表示将比其十进制表示短。更简洁地说,Base64 使用 26 个小写字母、26 个大写字母、10 个数字和两个符号(例如“+”和“/”)在电子邮件等基于文本的媒体中传输二进制数据。 Base64 通常用于对电子邮件中的附件进行编码。 Base58 是一种基于文本的二进制编码格式,用于比特币和其他加密货币。这种编码格式不仅实现了数据压缩和保持易读性,还提供了错误诊断。 Base58 是 Base64 编码格式的子集,同样使用大小写字母和 10 位数字,但舍弃了某些在某些字体中容易误读和混淆的字符。具体来说,Base58中不包含0(数字0)、O(大写字母o)、l(小写字母L)、I(大写字母i)以及Base64中的“+”和“/”两个字符。简而言之,Base58 由大小写字母和数字组成,不包括 (0, O, l, I)。

比特币转错到比特币现金地址了_比特币怎么花出去_比特币分叉对比特币的影响

示例 4-1 比特币的 Base58 字母表

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

纸钱包

纸钱包是印在纸上的比特币私钥。有时,为了方便起见,纸质钱包还包括相应的比特币地址,但这不是必需的,因为地址可以从私钥中导出。纸质钱包是建立备份或离线存储比特币(即冷存储)的一种非常有效的方式。作为一种备份机制,纸钱包可以在计算机硬盘损坏、被盗或意外删除的情况下丢失密钥提供安全保障。作为一种冷存储机制,如果纸质钱包密钥是离线生成的并且永久不存储在计算机系统中,它们在应对黑客攻击、键盘记录器或其他在线计算机威胁时会更加安全。

可以使用工具轻松生成纸质钱包,例如 bitaddress.org 网站上的客户端 Javascript 生成器。此页面包含所有生成的密钥和纸钱包所需的代码比特币怎么花出去,即使在网络连接完全丢失的情况下也可以生成密钥和纸钱包。要使用它,首先将 HTML 页面保存在本地磁盘或外部 U 盘上。断开与 Internet 的连接 打开,从浏览器打开文件。更方便的是,使用原始操作系统启动计算机,例如从 CD 启动的 Linux 系统。使用此工具离线生成的任何密钥都可以通过 USB 电缆访问。在本地打印机上打印出来,从而创建纸质钱包,其密钥仅存储在纸上,从不存储在在线系统上。这些纸质钱包被放置在防火保险箱中,比特币被发送到对应的比特币地址,从而实现了一个简单但非常高效的冷藏解决方案。图 4-8 显示了通过 bitaddress.org 生成的纸质钱包。

二、钱包

钱包”这个词在比特币中有多种含义。从广义上讲,钱包是为用户提供界面的应用程序。钱包控制用户访问、管理密钥和地址、跟踪余额以及创建和签署交易。狭义上,即从程序员的角度来看,“钱包”是指用于存储和管理用户密钥的数据结构。

概览

一个常见的误解是比特币钱包包含比特币。事实上,钱包只包含钥匙。 “硬币”记录在比特币网络的区块链中。用户通过使用钱包中的密钥签署交易来控制网络上的硬币。从某种意义上说,比特币钱包就是钥匙链。

比特币钱包只包含钥匙,不包含硬币的提示。每个用户都有一个包含多个密钥的钱包。钱包仅包含私钥/公钥对的钥匙串(参见[私钥部分])。用户使用密钥签署交易,从而证明他们拥有交易输出(他们的硬币)。硬币作为交易输出(通常表示为 vout 或 txout)存储在区块链中。

钱包最佳实践

随着比特币钱包技术的成熟,出现了一些通用的行业标准,使得比特币钱包具有广泛的互操作性、易用性、安全性和灵活性。特征。这些常用的标准是:

比特币分叉对比特币的影响_比特币怎么花出去_比特币转错到比特币现金地址了

随着这些标准的发展,它们可能会发生变化或过时,但现在它们形成了一套互锁技术,已成为比特币事实上的钱包标准。

三、事务

比特币交易是比特币系统中最重要的部分。根据比特币系统的设计原则,系统的任何其他部分都旨在确保比特币交易能够在比特币网络中产生、传播和验证,并最终加入比特币交易的全球账本(Bitcoin)。区块链)。比特币交易的本质是包含比特币交易参与者价值转移信息的数据结构。比特币区块链是全球复式账本,每一笔比特币交易都是比特币区块链上的公开记录。

交易输入输出

比特币交易的基本组成部分是交易输出。交易输出是比特币不可分割的基本组成,记录在区块上,被全网认可为有效。比特币全节点跟踪所有可找到和可用的输出,称为“未使用的交易输出”或 UTXO。所有 UTXO 的集合称为 UTXO 集,目前有数百万个 UTXO。当创建新的 UTXO 时,UTXO 集变大,而当 UTXO 被消耗时,UTXO 集缩小。每个事务都代表 UTXO 集的一次更改(状态转换)。

当我们说用户的钱包“收到”了比特币时,我们的意思是钱包检测到了一个可用的 UTXO。通过钱包控制的密钥,我们可以花费这些 UTXO。因此,用户的比特币“余额”是指用户钱包中可用的 UTXO 的总和,可能分布在数百个交易和区块中。 “用户的比特币余额”是比特币钱包应用创建的概念。比特币钱包通过扫描区块链并聚合属于该用户的所有 UTXO 来计算用户的余额。大多数钱包都维护一个数据库或使用数据库服务来存储用户拥有的密钥所花费的所有 UTXO 的快速参考集。

一个 UTXO 可以是 1 个“satoshi”的任意倍数(整数倍)。正如美元可以分为代表两位小数的“美分”一样,比特币也可以分为八位小数的“satoshi”。尽管 UTXO 可以是任意值,但一旦创建,它们就不可分割。这是 UTXO 值得强调的一个重要特性:UTXO 是一个离散(不连续)且不可分割的价值单位,面值为“聪”,一个 UTXO 只能在一次交易中作为一个整体消费。

变更机制

如果 UTXO 大于交易所需,它仍然会作为一个整体被消耗,但同时会在交易中生成一小部分。例如,如果你有一个价值 20 BTC 的 UTXO 并且想要支付 1 BTC,那么你的交易必须消耗整个 20 BTC UTXO 并产生两个输出:一个支付 1 BTC 给接收者,另一个支付 19 BTC 找你的钱包。因此,由于 UTXO(或交易输出)的不可分割性,大多数比特币交易都会产生变化。

假设一位顾客以 1.$5 的价格购买了一杯饮料。她拿出钱包,试图找出所有硬币和纸币的组合,以得到她必须支付的 1.$5。如果可能,她会选择恰到好处的零钱(例如 1 美元纸币和 5 个一角硬币)或小面额的组合(例如 3 个 50 美分硬币)。如果这不起作用,她将使用大面额纸币,例如 5 美元纸币。如果她给店主 5 美元,她会得到 3.5 美元找零并将其放回她的钱包以备将来交易。

同样,比特币交易可以是任意金额,但必须从用户可用的 UTXO 创建。用户无法进一步细分 UTXO,就像他们无法撕开一美元钞票并继续将其用作货币一样。用户的钱包应用程序通常会挑选多个可供用户使用的 UTXO 拼凑出大于或等于交易所需比特币数量的数量。

就像在现实生活中一样,比特币应用程序可以使用一些策略来满足支付需求:组合几个小的 UTXO 并计算出确切的变化;或使用大于交易金额的 UTXO 并进行更改。所有这些复杂的可花费 UTXO 集合都是由用户的钱包自动完成的,并且对用户不可见。仅当您使用 UTXO 以编程方式构建原始交易时,这些才与您相关。

比特币分叉对比特币的影响_比特币怎么花出去_比特币转错到比特币现金地址了

四、比特币网络 P2P 网络架构

比特币采用基于互联网的P2P(点对点)网络架构。 P2P是指同一网络中的每台计算机都是对等的,每个节点共同提供网络服务,没有“特殊”节点。每个网络节点都以“平面”拓扑相互连接。 P2P 网络中没有服务器、集中式服务和层次结构。 P2P 网络的节点交互和协作运行:每个节点都向外界提供服务,同时也使用网络中其他节点提供的服务。因此,P2P 网络是可靠的、分散的和开放的。早期的互联网是 P2P 网络架构的典型用例:IP 网络中的每个节点都是完全平等的。今天的互联网架构具有分层结构,但IP协议仍然保留了扁平拓扑的结构。在比特币之外,P2P 技术最大和最成功的应用是文件共享:Napster 是该领域的先驱,而 BitTorrent 是其架构的最新发展。

比特币采用的P2P网络架构并不是选择拓扑那么简单。比特币被设计为一个点对点的数字现金系统,其网络架构既是这一核心特性的体现,也是基石。去中心化控制是设计的核心原则,只有通过维护一个扁平化、去中心化的P2P共识网络才能实现。

节点类型和角色

虽然比特币P2P网络中的每个节点都是平等的,但每个节点可能会根据所提供的功能而扮演不同的角色。每个比特币节点都是路由、区块链数据库、挖矿和钱包服务的功能集合。一个全节点包括四个功能,如图8-1所示:

file

图 8-1 比特币网络节点,具备钱包、矿工、完整的区块链数据库和网络路由四大功能

每个节点都参与整个网络的路由功能,还可能包含其他功能。每个节点都参与验证和传播交易和区块信息,发现和维护与对等节点的连接。在图 8-1 所示的全节点用例中,名为“Network Routing Node”的橙色圆圈字母“N”代表路由功能。

一些节点维护完整的、最新的区块链副本,这样的节点被称为“完整节点”。全节点可以独立验证所有交易,无需任何外部参考。此外,还有一些节点只保留部分区块链,它们通过一种称为“简单支付验证(SPV)”的方法完成交易验证。此类节点称为“SPV 节点”,也称为“轻量级节点”。在上面显示的全节点用例中,名为全区块链的蓝色圆圈字母“B”代表全节点区块链数据库功能。在图 8-3 中,SPV 节点没有这个蓝色圆圈,表示它们没有完整的区块链副本。

全节点

全节点是指维护包含所有交易信息的完整区块链的节点。更准确地说,这样的节点应该被称为“全区块链节点”。在比特币的早期,所有节点都是全节点;当前的比特币核心客户端也是完整的区块链节点。但在过去的两年中,出现了许多不需要维护完整的区块链,而是作为轻量级客户端运行的新型客户端。我们将在接下来的章节中详细介绍这些轻量级客户端。

完整的区块链节点维护包含所有交易信息的比特币区块链的完整、最新副本。这样的节点可以独立地构建和验证区块链,从第一个区块(创世区块)已经建立到网络中的最新区块。完整的区块链节点可以独立验证任何交易信息,无需任何其他节点或其他信息源。完整的区块节点通过比特币网络获得一个带有交易信息的新区块更新,验证后合并到区块链的本地副本中。

运行一个完整的区块链节点可以为您提供纯粹的比特币体验:所有交易信息都可以独立验证,无需依赖或信任另一个系统。很容易判断您是否正在运行一个完整的节点:只需检查您的永久存储设备(例如硬盘驱动器)上是否有超过 20GB 的空间就可以使用它来存储完整的区块链。如果您需要大量磁盘空间并且同步比特币网络需要 2 到 3 天,那么您使用的是完整节点。这是关于摆脱中心化管理,获得完全独立和自由的代价。

虽然还有其他完整的区块链客户端使用不同的编程语言和软件架构比特币怎么花出去,但最常用的仍然是比特币核心客户端,也称为“中本聪客户端”。比特币网络中超过 90% 的节点运行各种版本的比特币核心客户端。如前所述,可以通过节点间发送的版本消息或通过getpeerinfo命令获取颠覆字符串“Satoshi”的标识,例如/Satoshi:0.8.6/。

对于那些总是成功的人来说,那些旅行的人经常到达