主页 > imtoken靠谱吗 > No.14 比特币工作原理阅读面试笔记

No.14 比特币工作原理阅读面试笔记

imtoken靠谱吗 2023-01-27 08:03:54

比特币本质上是一种电子货币的实现技术。 电子货币作为密码学领域的一种密码学应用技术进行了长期的研究,包括去中心化的、集中式的,以及基于不同密码学原语的多种方案。 然而,比特币是一个被广泛认可和实际使用的系统。 比特币系统公开十余年,经历了发展、疯狂、稳健发展的阶段。 业界对比特币的看法也不一。 它与当今世界上基于可信任的第三方(一般是国家政府)的货币发行模式完全不同。 不管比特币未来能否成为法定货币,是否存在不可避免的缺陷,这些都不重要,本文着重详细介绍比特币是如何运作的。

在本文作者看来,与比特币相关的东西可以分为四个层次:1)比特币的技术起源生命周期,即比特币的产生、使用、销毁(目前好像没有); 2)比特币的交易、流通; 3) 比特币与现实世界货币的兑换; 4)在金融层面,比特币的定位和意义。 每一层都有很多发展。 本文作者想重点关注第一层,即比特币如何在数字世界中通过协议和数据实现比特币的产生、使用和交易。 关于建立在比特币之上的各种代币,首次发币,割韭菜,挑战现实世界的货币体系,这里不展开讨论。

本文的策划得益于山东安运公司某位大师的鼓励,以及大师介绍的“钱币”“冰山”实践者的支持。 在此表示衷心的感谢。 由于本文是作者阅读文献并与冰山大师讨论,关于以下问题,不清楚哪些是访谈的结果,哪些是阅读理解的结果,所以出处不会在这里区分。 还是采用问答的方式,主要是这种方式更方便笔者梳理思路,并不代表是采访过程的记录。

2008 年 10 月 31 日 18:10:00 UTC,中本聪在密码学邮件列表上发布了比特币创建论文,可在 . 本文报道了一种电子货币系统,其特点是:没有可信任的第三方中央机构,匿名参与者,参与者通过工作量证明获得满足特定哈希结果要求的随机数证明的新比特币作为奖励,通过 P2P 网络验证比特币的真实性并避免双重支出。

北京时间2009年1月9日15:27,中本聪向神秘密码学讨论群发送邮件,宣布第一版比特币客户端正式发布。

2017年9月4日,人民银行等七部委(网办、工信部、工商总局、银保监会、证监会、中国保险)证监会联合发布《关于防范代币发行融资风险的公告》明确指出,自公告发布之日起,立即停止各类代币发行融资活动; 所有金融机构和非银行支付机构不得开展与代币发行和融资交易相关的业务; 对于违法违规的代币融资交易如何找回比特币账号,平台和金融管理部门将要求电信主管部门依法关闭其网站平台和手机APP,网信部门将手机APP从应用商店下架,并工商行政管理部门依法吊销其营业执照。

这篇文章清楚地列出了过去十年比特币发展的几个关键里程碑。 对比特币发展感兴趣的读者可以参考这里。

鉴于比特币现在在世界范围内被广泛认可和使用,虽然它还不是法定货币,但对于那些使用它进行交易的人来说,这并不重要。 因此,作为一名IT从业者,笔者决定对比特币的一些关键特性做一些学习,重点学习和理解比特币和区块链的工作原理和工作机制,并从安全技术人员的角度来审视比特币可能在哪些方面级别是面临的一些安全风险。 至于比特币与金融体系的关系,笔者认为这是一个金融和经济问题。 笔者深感没有相应的基础知识去理解和解读,所以这里不讨论经济金融问题。

0)开始讲解比特币之前,需要先了解2个密码学工具,散列(hash)函数,公钥密码系统。

【答】Hash(散列函数),来自百度百科:一般翻译是hash,散列,或者音译成散列,即把任意长度的输入(也叫预映射,预像)通过散列算法,转化为定长输出,输出的是哈希值。 这种转换是一种压缩映射,即哈希值的空间通常远小于输入的空间,不同的输入可能会被哈希成相同的输出,无法从哈希中唯一确定输入值价值。 简单的说就是将任意长度的消息压缩成固定长度的消息摘要的函数。

公钥密码学:【摘自百度百科】信息发送方和接收方真实身份的验证、发送/接收信息的事后不可抵赖性、数据完整性和机密性的保护是一些关注的问题现代密码学。 主要特征。 公钥密码体制(public key cryptosystem)对这两个问题给出了极好的答案,并且还在不断产生许多新的思想和方案。 在公钥系统中,加密密钥不同于解密密钥。 人们将加密密钥公开,任何人都可以使用它。 一般用于验证密钥拥有者使用私钥对某些数据进行签名(确认),以便接收消息的人可以确认消息确实是由密钥拥有者发出的。 而私钥只有解密者自己知道,这样其他人就可以使用私钥拥有者的公钥加密一些数据发送给密钥拥有者,只有密钥拥有者才能解密数据。 在迄今为止所有的公钥密码体制中,RSA 体制是最著名和应用最广泛的一种。 在公钥密码系统的日常应用中,最常用的是:银行的Ukey采用公钥机制,为每个存款人在UKey中安装存款人的私钥和公钥证书,使用私钥密钥作为用户登录网上银行时的身份标识。 确认。 另一个引起工程师对公钥密码学关注的案例是勒索软件。 在比特币系统中,采用了机会椭圆曲线的公钥密码体制;

在比特币系统中,使用哈希函数(sha256算法)实现工作量证明的“挖矿”概念,并使用椭圆曲线作为公钥系统,实现交易过程中对用户身份的确认过程。

0-1) 如何使用哈希函数实现工作量证明?

【答】这个问题其实是挖矿的核心问题。 其实挖矿所做的工作就是挖矿程序(实际上是比特币节点的挖矿功能部分,是比特币客户端功能的一部分)需要搜索随机数如何找回比特币账号,形成新的区块内容,包括: new需要签名的交易记录数据+已确认的历史区块哈希+随机数。 这个新区块数据的哈希结果需要满足条件。 目前的情况是,要求哈希的前N位为'0'。 如果需要满足这样的要求,就需要不断尝试不同的随机数才能找到。 挖矿程序只能穷举随机数,判断哪个满足条件。 为什么'0'越多越难找? 为什么我们只能穷举随机数,却没有快速找到这种随机数的算法? 这两个问题取决于散列函数的特性。 有兴趣的读者可以百度下载散列函数的设计,百度搜索SHA-256即可。

0-2) 如何使用公钥系统实现比特币交易的关键特性?

【答】 在比特币体系中,比特币的业务是通过记录在区块链中的内容(交易记录)来实现的。 比特币的产生和交易将在后面介绍。 本题首先说明如何使用公钥系统来实现比特币的概念。

0-2-1——在比特币系统中,定义了比特币交易的数据结构,即使是记录在区块中的记录的数据格式,也是用json来表达记录的数据结构; 比特币的区块中只能记录定义好的比特币交易记录;

比特币号没了怎么找回_如何找回比特币账号_mtgox已找回20万个比特币

0-2-2——每个区块可以包含很多交易,但是区块的大小是有限制的。 一个区块中的交易记录之间是没有联系的。

0-2-3—— 在比特币系统中,没有账户余额的概念。 在比特币系统中,只有一条记录。 每条记录记录某人(发送者)给某人(接收者)。 ) 要支付多少比特币。

0-2-4——每条记录包含一个输入交易和一个输出交易; 输入的交易记录是本次交易的发送方过去收到的交易; output transaction 在这篇文章中提交 transaction 是新创建的,意思是给接收比特币; 值得注意的是,输入交易中的比特数大于输出交易中的比特数,多出来的部分留给矿工将这些记录打包到区块奖励中。 当然,这个奖励的大小可以由发送者控制;

0-2-5——在这里,某人被比特币地址所引用。 该地址是对某人的公钥进行哈希处理得到的哈希结果位串。 在这个位串的十六进制表示中,第一个数字(最左边的数字)是1; 一个人/企业可以有多个公私钥对,每个公钥可以生成一个地址,也就是说一个人可以有多个比特币地址,每个比特币地址之间没有联系,系统不知道每个地址与人之间或地址与地址之间是否存在关系; 每个人拥有的比特币是他拥有的每个地址中包含的比特币的总和。

0-2-6——发送此类交易时,发送方需要使用私钥对发送交易中交易数据的哈希结果进行签名,以向他人证明他拥有所发送比特币的所有权; 如何证明这种所有权呢? 因为在输入记录中,这条记录指定的比特币是给指定接收方的,而这条记录已经记录在区块链中,也就是系统认可这条记录,那么这时候发送方需要提供一个人通过用他的私钥对一些数据进行签名并提供他的公钥来验证记录来证明他是输入记录的指定接收者只需要通过公钥验证签名是否正确,并根据哈希计算地址算法通过公钥,比较这个地址与输入记录中指定的接收方地址是否一致。 如果一致,说明当前记录的发送者确实拥有输入记录中的比特币,现在就是他了。

0-2-7——通过0-2-6的解释,明确了区块链记录的比特币交易记录的链条。 在交易集中,通过私钥签名和公钥哈希得到地址,通过签名验证公钥。 密钥与私钥的匹配,通过公钥哈希得到已经被区块确认的地址,证明私钥对与地址的对应关系,从而证明该位是使用公私密钥对完成的。

比特币交易资本支出示意图(图片来自文献[3]图2.4):

比特币号没了怎么找回_如何找回比特币账号_mtgox已找回20万个比特币

在上图中:

a) 横向粗切头代表资金划转; 每个水平块代表资金转移;

b) 带斜杠的细箭头表示上一笔交易的资金接收方将上一笔交易获得的资金作为下一笔交易的资金输出方。

c) 斜线箭头的实现,在具体的交易记录中,传递:上层交易的接收方地址<---下层交易的发送方公钥的哈希值; <--- 下层交易中的输入部分 其中,上一笔交易记录的输出部分中发送方对接收方私钥给出的证明; 通过这两个证明(一个hash,一个数字签名),证明需要在后面的交易中输出资金的人对前面交易中收到的资金的所有权证明他可以在下面的交易中使用这些资金transaction to pay 后续交易输出部分指向的资金的新收款人(可以是他自己,也可以是他自己的其他收款地址,也可以是其他人)。

1)整个比特币体系,比特币是如何凭空产生的?

【答】比特币不是凭空产生的,它是通过挖矿获得的。 上面说了,所谓挖矿就是在穷尽随机数的过程中,找到一个符合哈希结果要求的随机数。 一旦一个比特币客户端(系统中的所有节点都是点对点客户端)找到这样一个随机数,它就可以对该块进行签名,并且在签名之后将该块添加到区块链中,延长区块链,并广播这个新块到他在整个网络中知道的所有其他节点。 签名前,挖矿程序会在区块中添加一条记录,表示奖励比特币发送给自己。 这条记录与一般交易记录的格式相同,但它是区块中的第一条记录。 ,通过location和一些参数表明这是奖励给矿工的比特币,并将这条记录放入区块中,该区块加入区块链,并向全网广播,宣告矿工获得了奖励比特币。 奖励的比特币是整个网络中比特币的唯一来源。

2)比特币的具体形态是什么?

【答】比特币其实并没有专门的数字文件,也没有什么地方有数字表示一个地址(代表比特币系统中的一个参与者)有多少个比特币,有的只是交易记录。 比特币系统使用全网账本来记录比特币系统每个参与者所拥有的比特币交易记录。 一个交易记录记录了谁付给了谁多少比特币。 这里的“谁”用一个“地址”来表示,支付多少比特币用一个具体的数字来表示。 地址是一个无意义的比特串,由比特币发送方和接收方的公钥通过哈希计算得到。 实际上,每条记录都是一段数据结构清晰的json数据,由比特币开源系统设计实现。 许多交易组合成一个区块,整个比特币网络每10分钟构建一个新区块,依附于比特币主链。

3)由于比特币系统没有地方记录每个比特币参与者拥有多少比特币资产,你怎么知道你有多少比特币可供使用?

【答】原则上,比特币系统中的每一个参与者都是一个全功能节点。 当然,随着发展,节点开始分化。 有的节点功能齐全,有的只有挖矿功能,有的有钱包功能。 让我们从一个全功能节点作为假设开始。

每个节点都会有一个完整的比特币区块链。 因此,通过记录在区块链中的记录,可以知道收入(交易的输出接收方)和支出(输出交易的发送方)的多少,就可以计算出每个账户有多少盈余。 一个节点可以有很多个账户(也就是很多对公私钥对),集成就会知道一个节点有多少比特币。

4)在比特币体系中,比特币和区块链是什么关系?

【答】从本质上讲,区块链和比特币是解决不同问题的两个层面的概念,但是在比特币这个特定场景下,中本聪将两者结合起来,实现了一个中心化的电子货币体系。 在比特币体系中,区块链是实现去中心化特性的框架; 比特币是在区块链框架上实现的应用; 在实现上,中本聪以比特币作为具体应用的实现,同时实现了区块链和电子货币两个概念。 也就是说,比特币的电子现金的思想也可以放在一个中心化的可信第三方的账本中实现电子货币,而不需要使用区块链的实现和思想。 比特币的应用本身通过记账实现了一种电子货币; 在中本聪的比特币体系中,比特币协议的实现只依赖于区块链提供的技术特性:去中心化,从创始区开始,从区块开始到任何区块的链接,保证了区块链上信息的上下文关系堵塞; 比特币协议是通过记录在区块中的每一条记录来实现的,通过记录信息、公私钥对的签名、身份验证和公钥与地址的对应关系实现电子货币的技术特性,如生成、电子货币的消费、找零、避免双重消费。

5)刚才提到的比特币节点,节点和区块链是什么关系?

【答】在中本聪的设计中,比特币是一个没有中心的系统。 他使用许多节点来构建网络以实现去中心化。 每个节点的地位是平等的,节点之间通过挖矿竞争来争夺每个区块的计算量。 谁先找到,谁就会获得奖励,即获得比特币。 有人找到一个区块,广播给其他节点后,大家结束本轮比赛,开始进入下一个节点计算的竞争。 通过节点之间按照约定进行竞争与合作,不断将新的区块添加到区块链中,通过合作完成区块链的建设。 构建的区块链本身是不可伪造的(伪造的计算成本太高,无法实现),因为每个节点都包含了之前所有节点的哈希信息和节点的签名,即可信链上的数据。 请注意,这个完整的区块链理论上在每个节点都有一个副本。

6)整个比特币网络有多少个节点? 这些节点如何找到彼此?

[答] 参考文献 [3] 第6章“比特币网络”,作者撰写和翻译时,世界上有7000-10000个节点。 一些节点可能是一个巨大的矿池,其他的只是一两台计算机。 尽管节点的功能状态与节点的功能状态相等,但计算能力不一定相等。 比特币节点通过域名查找其他节点,或者通过比特币客户端软件中内置的一些IP列表来查找初始接入网络的节点。 节点进入网络后,通过其他协议进程发现网络上的节点。 其他节点。 这个问题很好,但这是传统网络节点发现的问题,与比特币实现本身关系不大。 比较容易解决,具体细节我还没搞清楚。 但是从书本[3]中我们可以知道,一个新的比特币客户端软件在刚刚安装后,需要从节点网络下载完整的区块链数据。 这个过程通常持续2-3天。 20G区块链数据。

7)比特币总量不在线?

【答】比特币的创始人在设计上将比特币总量限制在2100万左右。 原因是约定每10分钟创建一个区块,每四年作为一个奖励周期; 所谓的奖励周期就是在这四年里,每挖出一个区块,就会奖励一定数量的比特币,四年之后,奖励的数量就会减半,这样一直持续到区块奖励的比特币少于 1 个“聪”单位。 初期为 50 比特币/块。 这样算下来,每4年大约是21万个区块,结合每个周期的奖励数量,大约是2100万个比特币。 “聪”是比特币的亿分之一。 所以我经常看0.005和0.00001比特币的计量单位,就是因为计量单位“聪”的存在。 按照4年一个周期,每次奖励减半,到2140年左右,奖励将少于1个“聪”,不再提供区块挖矿奖励。

8) 比特币被盗是怎么回事?

【答】前面提到,要证明一个“人”拥有一些比特币,是通过生成交易记录时私钥的签名,以及交易记录中公钥与接收方地址(或其他解锁脚本),以证明这个“人”拥有某些交易的比特币输出的所有权。 而这些交易记录本身是网络中每个节点所拥有的,它们都记录在区块中。 因此,谁能证明自己拥有交易记录对应的私钥,就宣告自己拥有这些比特币,可以消费。 因此,如果一个“人”的私钥被盗,窃取私钥的人就可以声称相应交易输出的比特币是他的。 因为私钥等数据都是数字,不容易被人记住,所以都是通过钱包软件来管理的。 那么如果你使用的钱包软件里面的数据被黑客盗取了,即使你还有钱包和私钥,但是你没有用这个私钥来使用比特币,而偷私钥的人用了,你也没有办法,一旦这些比特币被认领使用并记录在区块链中,就再也找不回来了。

9) 那么,如何保证私钥更安全呢?

【答】这个问题不好回答,因为有很多链接可能被盗。 首先,钱包软件靠谱吗? 如果钱包软件是恶意开发者制作的,那么你的私钥可能刚进去就被盗了。 二、有些人使用在线钱包,钱包数据在服务器平台备份,相当于把自己的钱放在别人的柜子里。 如果服务器被黑,服务器上所有用户的钱包数据都可能被盗。 这就是为什么一些比特币交易平台被黑后,大量人的比特币被盗的原因。 现在有些开发硬件钱包的开发者只是把私钥放在硬件里面,用的时候用,比较安全。 这种方法类似于银行系统的UKey,效果会更好。

10) 现在互联网上的比特币交易是怎么回事?

【答】前面说了,比特币是通过挖矿产生的,但并不是每个人都对挖矿感兴趣,即使你对挖矿感兴趣,也未必有幸挖到。 那么想要使用比特币的人需要从拥有比特币的人那里购买比特币。 交易所解决了这个问题,为比特币的供求双方提供了一个交易平台。

11)比特币交易的输入输出对应关系是如何实现的? 即如何使用地址收到的比特币?

【答】本题是比特币系统中最核心的交易和支付问题。 之前已经回答过这个问题。 可以参考本书[3]的第5章“交易”。 在书中,作者描述了在比特币交易的验证过程中,在输出交易中设置“锁定脚本”,在输入交易中给出“解锁脚本”。 意思是,支付比特币的输出交易中的“锁定脚本”描述了应该提供哪些数据来解锁这些比特币的所有权。 解锁是通过“解锁脚本”实现的。 在比特币当前版本中,实现了5种加锁和解锁脚本,包括:通过签名-公钥-地址的对应关系解锁,即解锁时提供私钥签名数据和公钥,实现公钥对应地址,签名通过公钥验证解锁。 还提供公钥签名、M of N多重签名解锁等方案。

12)有人说他挖了零点几比特币,现在挖矿奖励是12.5个比特币,怎么解释?

【答】这跟挖矿的组织方式有关。 为了获得更高的挖币概率,投入了更多的计算资源,从最早的CPU,到GPU,再到FPGA和定制ASIC,挖矿成为了一项职业活动。 与这些专业的挖矿资源相比,个人计算资源可以忽略不计。 于是,为了组织这些闲置资源参与挖矿,有人开发了一个系统,让这些闲置资源成为计算资源,挂在一个节点管理系统下。 大量闲置资源组成一个计算节点参与计算。 当计算节点找到并计算出一个区块,即挖出奖励比特币后,节点管理系统根据输入算力的比例分配获得的奖励。 节点的个人参与者。 一些矿池也按照这种“众筹”模式开矿,挖出的比特币按照算力投入比例进行分配。 也就是说,存在已经挖出0.00x比特币的情况。

13)各种交易所盈利的依据是什么? 是否收取交易费?

[答] 收取手续费; 收取撮合交易,按千分之二收取佣金;

参考:

1)2008年中本聪发表的比特币论文:

2)更全面详细的比特币发展史:

3)一本关于比特币技术和应用的书,适合工程师:作者:Andreas Antonopoulos Blockchain: The Road to Asset Digitization(解密区块链底层技术,数字货币投资开发入门指南),%E4%BA%9A %E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&keywords=%E6%AF%94%E7%89%B9 %E5%B8%81&qid=1556785434&s=digital-text&sr= 1-14