| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 区块链 -> 区块链安全初探(一):比特币概述 -> 正文阅读 |
|
[区块链]区块链安全初探(一):比特币概述 |
最近做了一些区块链安全的相关研究,发现虽然这个概念非常火,但是真正想了解却不容易。区块链技术从最初的 比特币(Bitcoin)发展至今,各种用途、各种概念的加入,使得它变成了一个高度灵活的体系。也正是因为技术的蓬勃发展,使得区块链在除了电子货币的领域也得到了应用。 区块链这个世界的起源,从中本聪的那篇论文《 Bitcoin: A peer-to-peer electronic cash system》[1]开始。他提出了一种不依赖第三方的、在P2P网络上运行的现金交易系统,可以完成转账并防止双重支付(Double-spanding,也称为双花)。因此,区块链技术的本源是一个分布式账本。 区块链、比特币,到底是什么关系?在谈论具体技术之前,需要先搞清楚基本概念:比特币是什么,而区块链又是什么?如果不说明这两者的关系,后文中的很多概念都会混淆。 比特币在2008年,中本聪第一次提出了 ”点对点电子货币系统“ 的概念,并命名为 ”比特币(Bitcoin)“。在他的论文[1]中,阐述了他构建这个系统的基础:区块(Block)用于记录一定的交易,每个区块之间通过哈希值连接起来(有点像链表的结构,当前区块记录上一个区块的哈希值),这样就形成了链(Chain)的关系。 实际上,在中本聪的论文中,全篇都没有提及区块链(Blockchain)这个词汇,只是分别说了区块(Block)和链(Chain)的概念。 区块链比特币概念的提出似乎更倾向于一个概念,因为在2009年中本聪本人挖出第一笔奖励的时候,也无法预估使用人数、未来的使用场景。在对一个区块的大小进行定义的时候,由于当时使用人数很少,且设置较大可能会更容易引发垃圾交易(SPAM Tx)[2],中本聪给出了1MB大小这一数字。而一笔交易所占用的大小约为200-300Bytes,有些交易可能会更大。因此,比特币的交易性能较差(约每秒7笔)。 由于区块链是公有链,因此区块信息很容易查询和验证。比如可以访问Bitcoin Explorer来查看比特币链的信息: 图1. Blockchain.com 区块查询页面 可以看到这个区块包含的交易数是4246个,大小1424327B,平均一个交易的大小是约335B。 显然,这个交易速度实在太缓慢,此外比特币链的功能也较为单一,只能记录交易信息。因此,在比特币火了之后,各种各样的”魔改“版本出现,解决了各自的需求。比如有些提高了交易的效率,有些支持智能合约,能运行复杂逻辑(以太坊等),有些针对业务场景进行了优化(瑞波币)。 这些不同的”分布式数字货币系统“的原理类似,只是在一些具体技术上进行了一些改进和妥协,不能被称之为”比特币“。因此,根据这类技术的共同特点,称之为”区块链“技术。 Bitcoin是如何运行的[3]中指出,区块链就是一个安全的分布式数据库,保存交易记录。“A blockchain functionally serves as a distributed and secure database of transaction logs”。在这样一个系统中,需要解决以下问题:
因此,Bitcoin中设计了一些机制,来解决上述问题,但是方案在实现的时候可能就无法按照想象那么美好,实际运行中Bitcoin以及其他区块链还是出过很多安全事故。下面以Bitcoin为例,简要说说区块链技术,在理论层面如何保障分布式环境交易安全的。 问题的答案上面列出的三个问题,是我个人认为在Bitcoin中比较重要的理论基础,也是我认为中本聪这套机制特别巧妙的地方。当然,在他的原论文中讨论的问题也不止这三个,但这里先回答这三个问题,其他方面的机制后面再慢慢覆盖,先对Bitcoin有个直观的认识。
下面逐一进行说明。 如何达成共识共识机制是区块链中的一个非常重要的技术,任何声称自己是”区块链“的技术都绕不开共识。Bitcoin采用了 Proof-of-Work 的方式来进行共识。 Proof-of-Work(PoW),即工作量证明,是通过增加成本来限制攻击者攻击的方法。Bitcoin是一个开放的系统,任意节点都可以通过部署客户端加入到这个系统中。参与PoW的节点称为”矿工“节点,这与现实中付出劳动”挖矿“并获取工资的行为非常类似。 Bitcoin的区块简单来说就是包含一系列交易的一个数据段。其中,除了交易信息 图2. 区块示意图[1] 矿工们需要做的就是,根据系统给定的”难度“(即计算出的目标哈希前面有多少0,具体形态可以参见图1),尝试改变 一旦发现满足要求的随机数,发现这个数字的矿工就向全网广播这个区块,其他矿工验证通过后,就将这个块记录下来,作为得到认可的交易数据。然后将这个区块的哈希值放到下一个块中,继续计算。 “挖矿原理”一文中有更简洁的解释。 为什么矿工要按规则挖矿?一个矿工节点,在找到正确的 这个奖励会写在当前的区块中。如果矿工不按照规则去进行,那么他计算出的区块不被其他人认可,自然也无法得到这笔奖励。因此矿工必须遵守规则,按照上述规则生成区块,得到其他节点的认可,从而获取奖励。 PoW是如何保证共识的?由于寻找符合要求的 同时,挖矿是有收益的,这个收益的来源是基于遵守规则的情况下。遵守规则,就有可能在挖矿中获取比特币奖励的正向激励;不遵守规则,虽然没有惩罚措施,但是发出的区块不会被其他节点记录,对整个系统几乎没有什么影响。 这种方式真的安全吗?Bitcoin使用的PoW共识需要大部分节点的诚实。作为一个分布式、没有可信第三方的场景,只能通过少数服从多数的原则来保障多数人的利益。 随着Bitcoin规模的不断增加,应该会越来越安全。由于寻找 具体的内容会在共识机制的部分详细的讨论。 如何证明转账信息不是伪造的?这里使用了公钥和签名来完成。 图3. 交易(Transaction)示意图[1] 通过在交易里包含转账人的公钥,以及对交易信息+公钥进行签名,即可保证这条信息是由转账者本人发起的。 当然,前提条件是,私钥是保存完善的。一旦私钥泄露,那么你的账户余额就不保咯。 如何防止双花(Double Spending)?首先,在Bitcoin体系中,是没有传统的账户概念。因为区块链不断延长,不可能每次转账要检查账户余额的时候,都从链头检索一遍。 首先,区块链引入“未花费交易输出(UTXO)”的概念,可以追溯某一笔交易的“前世今生”。“UTXO模型”一文有比较清晰的阐述。 其次,在确定转账余额充足后,矿工节点会检查待生成区块中的全部交易,是否有问题。就包括同一笔金额是否被转给两个收款方。如果遇到问题,矿工节点一般会删除这个交易,以保证一笔钱只转给一个收款方。 如果有人作恶有两种情况:
对于情况1: ? 其他矿工节点接收到挖出的新区块时,会检查其内容。如果发现有问题将拒绝接收。 对于情况2: ? 首先,两个节点同时生成区块太难了。即使有这种情况,其他节点会选择其中的一个,在上面继续延伸。选择的机制在分叉的处理部分会提及。 总结比特币的出现,解决了分布式环境下,没有可信第三方的场景中的交易问题,但有其局限性。为了扩展其使用场景,出现了各种各样的“币”,以及其他形式。借用中本聪文章里对于Bitcoin的描述,成为“区块链”。 Bitcoin通过PoW的共识方式保证所有矿工节点记账都是一致的,即使有人作恶,也会因为少数服从多数的策略而失败;通过签名和公钥的方式来进行身份的验证;矿工节点记录区块和生成区块的时候,进行验证以防止双花。 参考文献[1] Nakamoto S. Bitcoin: A peer-to-peer electronic cash system[R]. Manubot, 2019. [2] 佚名. 比特币扩容纷争:双链的诞生. https://zhuanlan.zhihu.com/p/30930715, 2017-11-15. [3] Zhang R, Xue R, Liu L. Security and privacy on blockchain[J]. ACM Computing Surveys (CSUR), 2019, 52(3): 1-34. |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/27 11:44:39- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |