区块链防双花
Ⅰ 在区块链中,双花问题是什么问题呢
什么是双花问题呢?
双花问题,简单讲就是一笔钱能被花两次三次很多次。为什么双花问题会成为比特币系统里面一个这么重要的问题呢?
原因就在于:比特币,是虚拟货币,它是虚拟的,通过代码形式呈现出来的,是可以被复制下来的。一旦被攻破了代码漏洞,那么就可以循环使用同一笔比特币,这样一来,比特币这种“钱”就会变得很鸡肋。
我们想一下,要是一笔钱可以花很多次,你有500块钱,你去买一件500块钱的衣服,还能循环使用,再去买一双500块钱的鞋,这样一来,钱还能叫钱吗?
所以,中本聪在设定比特币系统的时候,他所有的技术手段基本上都是围绕着解决
“双花问题”的,来保护比特币作为一种货币,它自身的一个支付手段职能。
其实,这个双花问题在我们现在的中心化世界里面根本不是问题,因为有银行,钱的交易结算都是通过银行,很安全,有问题直接找银行。
但是,在去中心化世界里面呢,没有银行这样一个中心机构,还必须保证一笔钱只能花一次,怎么样实现在去中心化的前提下,杜绝“双花问题”呢,这是一个难题。
这里插一句,中本聪为什么如此执着的追求“去中心化”呢,自找烦恼吗?不是,他希望能够通过去中心化,来解决一些社会问题,其中最主要的问题就是:因为权力机构过量发行货币造成的通货膨胀。
所以,我们总结一下他的逻辑:中心化的货币增发导致通货膨胀——所以我们要实现去中心化——去中心化要面临很多问题,最大的问题是双花问题——所以我们要解决双花问题——怎么解决双花问题?
这里,中本聪就引入了UTXO和“时间戳”概念,依靠这两种手段来解决双花问题。
Ⅱ 区块链的作用和特点是什么
1.任何节点都可以创建交易,在经过一段时间的确认之后,就可以合理地确认该交易是否为有效,区块链可有效地防止双花问题的发生。
2.对于试图重写或者修改交易记录而言,它的成本是非常高的。
3.区块链实现了两种记录:交易(transactions)以及区块(blocks)。交易是被存储在区块链上的实际数据,而区块则是记录确认某些交易是在何时,以及以何种顺序成为区块链数据库的一部分。交易是由参与者在正常过程中使用系统所创建的(在加密数字货币的例子中,一笔交易是由bob将代币发送给alice所创建的),而区块则是由我们称之为矿工(miners)的单位负责创建。
Ⅲ 什么是区块链
什么是区块链?会对以后的生活带来什么样的改变?
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。
区块链(Blockchain),是比特币的一个重要概念,它本质上是一个去中心化的数据库,同时作为比特币的底层技术,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次比特币网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。
比特币白皮书英文原版其实并未出现 blockchain 一词,而是使用的 chain of blocks。最早的比特币白皮书中文翻译版中,将 chain of blocks 翻译成了区块链。这是“区块链”这一中文词最早的出现时间。
国家互联网信息办公室2019年1月10日发布《区块链信息服务管理规定》,自2019年2月15日起施行。
狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构, 并以密码学方式保证的不可篡改和不可伪造的分布式账本。
所以终上所述,这无疑是一个改变生活的新技术,未来的整个社会的生产活动都会以区块链作为底层逻辑展开进行,很多事情我们都可以触手可及,加上人工智能和大数据的融入,能让我们轻松搞定现在看来貌似比较繁琐的事情,比如一些证券市场的交易,和理财活动的智能化匹配。
通俗易懂的说区块链是将人财物,人机物、人场货一体化,打包做成一个整体;把它放在一个基础设施上来运行的网络计算中心。
Ⅳ 潜藏在货币流转特性中的秘密,DCEP如何优雅地解决“双花问题”
上一篇文章我们已经谈过,账户体系可以完美地解决数据作为货币会产生的双花问题,但由于这种账户机制,会使得货币的流转丧失并行的特征,很难在一个独立的系统当中容纳大量的交易同时进行。
那么,我们如何才能让这些账户可以实现数据的并行化处理呢?
换一个思路来思考账户结构。
我们之前的账户体系当中,不同的用户账户所记录的是一个数字,我们利用一个数字来表示一个用户手中所持有的货币的数量。但现在我们不再使用一个数字来表示账户的货币数额了,而是将每个货币都变为一个独立的数据段记录在账本当中。
当用户要进行交易的时候,只需要选择一部分货币,并将这这些货币复制给新的用户,同时将原本用户手里的货币标记为作废即可。
假设张三的账户中存在着100张代表着一元的货币,每一个一元货币都有着独一无二的编号,那么当张三向李四转移50块钱的时候,张三只需要在自己的账户当中选择出这50张货币,告诉账户的管理者,我要把这50张货币转移给李四。而账户的管理者在收到这样的一个信息请求之后,他就会把这50张货币在账户当中标记为作废。与此同时,在李四的账户当中产生50张新的一元货币。
这种处理方法也就是现在所谓比特币UTXO结构所采用的一种方式。它的优点在于可以允许货币同时由多个账户转向多个账户。交易过程中系统会自动加上时间戳,如果用户用同一笔UTXO付给两个人,系统中的节点只确认先接收到的那一笔。
然而,实际上比特币的交易实现,并没有采用 50 张一元这种做法,而是让每一个货币都有自己的面额。
这也很好理解,因为既然货币是可以被生成和销毁的,那么为什么不直接生成一张50元呢,更加简单便捷。
在比特币账户账本中,货币是以一个字符串的形式来进行记录的。每一个货币都有自己的独立ID。这个ID是由UTXO交易哈希值与UTXO中的位置索引决定。
这种记账方式的优势在于交易逻辑清晰。它可以通过算法分析出交易之间的依赖关系,并将可以实现一定程度上的交易并行化处理。
尽管并行化的问题得以解决,系统中也存在了真实货币的概念,然而用户并没有真实拥有这些货币,它们被存储在区块链上。
既然如此,为什么我们不让用户 “拿着” 这些货币呢?
听起来这似乎只是一个简单的操作,只要将这个货币的数据记录从我们的账本上拿到用户手中即可。
但这一个小小的变化,却能使我们整个系统实现了质的飞跃。
实际上,这就是 DCEP 的设计逻辑。
让用户手中真实持有代表货币的字符串。这些字符串数据通过数字签名技术进行签名,保证货币确实由央行发行。
如此,整个DCEP体系摆脱了原有的账本。体系中流转的不仅仅是价值,而是现金。用户的所有交易行为都会被表达为加密字符串的交换过程。通过这样的方式,真正的实现了货币的流转流程与现金的等价关系。
这种方式可以真正让数字货币的流转方式模拟了真实货币的流转方式,与现有的任何一种账本记录的方式有着本质的区别。
在原本的账本形式中,用户所拥有的只是一个证明你身份的字符串,并不是现金。现金是被放在账本管理机构手中的。换言之,用户拥有的仅仅是货币的价值,而不是货币的物理属性。用户永远不知道管理机构利用自己的现金做了什么。
另外,生活中用户也并不关注储存在银行中的货币的编号。他们只需要在使用时,考虑货币的面额即可。而这样的设计会使得货币展现出与真实现金的不同特征。
例如,账户中记录的货币是可以被分割的,理论上这种划分是可以无限进行下去的。账户系统中两个相同的一元并无区别,他们都只是一个在系统中记录的数字。
说到这里,不得不提及一个来自于区块链行业的概念——NFT。
这个概念与银行账户的价值记录方式有所不同。它的全称是非同质化代币。
简单来说,就是每一张货币都不一样。如同现金,虽然两张一百元货币的价值都是一百元,但是他们在物理上却是不相同的。
现实中,每张真实的货币都是可以被任何人真实拿在手中的。钱的物理属性与价值被统一管理。每张货币也都拥有一个唯一的编号,这个编号可以用于追踪货币,同时也保证了货币本身的独立性。每一张货币都是不可分的。我们不能把一样百元大钞撕成两半,把其中的一半当作五十元来用。那么,如果我们需要调整货币的面额,就要把手中的货币进行兑换。
以上这两种系统的区别,本质上是现金与账户的区别。
从这个角度来讲,DCEP的设计模式,说明了它就是一种真实的现金。
它的任何属性,包括流通特性都与真实的现金是一模一样的。
而在此基础上,由于数据可以被远程传输和管理,DCEP又比现金有了更大的优势。
DCEP作为现金的一种表现形式,它的技术设计当然不可能是账户机制完成的。
尽管数字货币在到达用户的手中后,可以实现货币流通的并行化,但是考虑到由于数据本身是可以被复制的,而用于保证DCEP真实性的数字签名即使是在被复制之后,也能被正确的验证,我们仍然需要解决数字货币“双花问题”。
解决这种问题的方法就潜藏在现金货币的流转特性中。
之前已经说过,每一张现金上都是存在一个唯一的编号。
事实上,这个编号就是解决DCEP双花问题的关键。通过编号,我们就能很优雅地解决“双花问题”。
“双花问题”问题简单来说就是,支付方已经将一笔钱付给接收方,但却依旧拥有被转移货币的支配权。换言之,这笔钱同时被两个人所拥有了。
从这个角度上来讲,避免货币“双花”的核心点,就是保证同一时间,一个货币只能被一个人拥有。
在DCEP场景下,通过DCEP本身所具有的编号,我们就可以成功实现追踪每一张货币的所有者。
因此,在 DCEP 体系下,解决问题的方式就是构造一个登记中心,记录 DCEP 字符串编号与所有者身份编号的映射关系。
正如图中所述的流程,当Alice向Bob发送一笔数字货币时,Alice先向Bob发送自己所拥有的数字货币字符串。同时 Alice 也会向数字货币登记中心通知,告知数字货币登记中心自己的这张货币0x001的所有权已经发生了转移。数字货币登记中心会根据Alice所发送的数字签名信息验证Alice的身份,确保Alice真实确实是货币0x001的所有者的情况下,把这张货币的所有权记录修改为Bob。
虽然我们使用了一个登记中心用于记录所有货币转移过程的身份变化,但是这个中心并不会限制整个数字货币的性能。因为数字货币的登记中心所管理的每一张货币都是相互独立的,天然满足成为 Stateless 的特性。在这个基础上,整个系统是可以无限并行化扩展的,这也就意味着DCEP的核心系统理论上是可以对外提供无限扩展的高性能支持的。
至于Stateless,这是一个计算机术语。
Stateless的设计可以保证整个系统中不存在性能瓶颈。任何一个系统的设计只要满足Stateless的特性,那么这个系统的性能便可以被无限的扩展。
在整个数字货币登记中心系统中,每一张货币的所有权记录都是独立的,正如同真实的现金在社会中流转的过程。
某种意义上,DCEP的设计目标是为了全国乃至全世界的货币流转过程提供支持。这对整个系统的性能有很高的要求。
而DCEP所采用模拟真实现金流转过程的技术方案,既能巧妙地解决数字货币可能产生的双花问题,同时又借助于货币流转的并行化特征,保证货币的流转结算过程可以被完美地并行化处理。
无论从区块链上加密货币的形态上来看,还是从实现的技术特性上来看,DCEP 的设计模式可以说是与区块链完全不相同的设计模式。
本质上,区块链无论采取什么样的形式,它都是一种账本的形态,而 DCEP 的实现则是一种真实的现金。
显然,DCEP 的设计更加符合数字货币这个场景的需求。
Ⅳ 双花理论是什么概念
在学习区块链的过程中,大家一定对会听到“双花”这个词,意思就是双重支付,或者更直白点就是一笔资金被花费了两次。这篇文章我们来简单的分析一下为什么会有双花,比特币是如何避免双花的。
在传统的交易中,因为有银行这样的中心化机构,所以是不会存在双花问题的:每一笔支付都将从你的银行账户中扣除相应的资金,所有的明细在银行都有记录。但是在比特币中,因为没有账户的概念,而是引入了UTXO即未花费交易输出。因为没有银行这样的中心化机构的保证,当发生一笔交易时就可能存在着双花的危险:比方说A有一个比特币,然后他同时构造两笔交易T1和T2来花费这1个比特币,其中一个给了B,从B那里买件衣服,一个给了C,从C那里买双鞋。如果不引入某种机制来避免这种情况,那作为数字货币的比特币将没有任何存在的意义。接下来就来分析一下比特币是如何做到防止这种“双花”攻击的。
(1) 正常情况
首先我们来看看正常情况,说白了就是绝大多数时候,区块链的共识机制就能将双花消灭在萌芽状态。我们还是以上面提到的例子来做说明:
假设A构造了两笔交易T1和T2,将自己价值1btc的UTXO分别转给了B和C,妄图同时从B和C那里获得好处。然后A几乎在同一时间将构造好的这两笔交易广播至网络。
假设网络中的矿工节点先收到了交易T1,发现这笔交易的资金来源确实没有被花费过,于是将T1加入到自己的内存交易池中等待打包进区块。
大部分情况下,这个矿工节点会在不久后又收到交易T2,此时因为T2所指向的交易输入与已经加入交易池的T1相同,于是矿工节点会拒绝处理该交易。网络中其他的矿工节点都类似,因此A试图双花的尝试胎死腹中。
(2) 分叉情况
上面说的是正常的情况,但是也有非正常的情况要考虑:假设矿工节点M1和M2几乎在同一时间挖出了区块,并且很不幸M1挖到区块时只收到了交易T1,而M2挖到的区块时只收到了交易T2,这样交易T1和T2被分别打包进两个区块。因为这两个区块是差不多同一时间被挖出,于是造成了区块链的分叉:
网络中某些节点(可能是离M1近的)先收到了M1打包的区块BLK1,于是用该区块延长自己的区块链,而另外一些节点(邻近M2的)则先收到M2打包的区块BLK2,用该区块延长自己的区块链,于是整个区块链网络
Ⅵ 区块链鼻祖比特币之8:分叉带来的双花支付、51%攻击与解决办法
分叉
前面讲到了比特币通过区块链+工作量证明的独特设计来解决了时间顺序,但是不能保证在同一时刻有两个节点算出了正确的解,虽然这种可能性很低很低。这就带来了区块的分叉。
虽然说几乎同时有两个节点计算出这一数学问题的可能性微乎其微,但是仍然存在这样的可能性,所以分叉就以为着同一个区块的后面可能会跟上两个不同的区块。
规则的打破一直要到下一个区块被人解开。则会立即转向最长的区块,而那些短的区块则会被抛弃。数学问题使得区块很难被同时拆解。要连续发生多次更是困难。最终区块链会稳定下来。也就是说所有人对最后几个区块顺序达成共识。分叉意味着,譬如,若你的交易出现在较短的支链,它就会失去进入区块链的位置。一般而言,只代表他会回到未确认交易池。然后被纳入到下一个区块。
比特币网络如何解决分叉带来的双花支付
可惜,交易失去区块位置的潜在可能,给了本来定序系统防范的重复支付攻击机会。考虑下面的一个攻击者A,其首先用自己的比特币交换B节点的货物,其立即又支付给自己。然后其通过努力的制造更长的链条来让自己的支付替代掉B节点的支付,从而实现了双重支付,B节点既得不到钱,还失去了货物。
这时交易会退回到未确认池中,因为A节点已经利用参照同样的input交易取而代之。节点就会认为Bob的交易无效。因为已使用掉。
你可能会猜测A节点会预先的计算出一支区块链,然后抓住时机发布到网络。但是每个区块的数学谜题阻挡了这个可能性。如前面所诉,解开区块是猜测出一个随机数的过程。一旦得出答案,解出的哈希值就会成为指纹一样的区块识别。只要区块内容有一丁点变化,下一个区块的参考值就会完全不同。此机制的结果就是无法在区块链中置换区块。在得到前一个区块之前,下位区块无法被解开。前一个区块的指纹也是杂凑函数的引数之一。
同时,该工作量证明机制还解决了在集体投票表决时,谁是大多数的问题。如果决定大多数的方式是基于IP地址的,一IP地址一票,那么如果有人拥有分配大量IP地址的权力,则该机制就被破坏了。而工作量证明机制的本质则是一CPU一票。“大多数”的决定表达为最长的链,因为最长的链包含了最大的工作量。如果大多数的CPU为诚实的节点控制,那么诚实的链条将以最快的速度延长,并超越其他的竞争链条。如果想要对业已出现的区块进行修改,攻击者必须重新完成该区块的工作量外加该区块之后所有区块的工作量,并最终赶上和超越诚实节点的工作量。我们将证明,设想一个较慢的攻击者试图赶上随后的区块,那么其成功概率将呈指数化递减。另一个问题是,硬件的运算速度在高速增长,而节点参与网络的程度则会有所起伏。为了解决这个问题,工作量证明的难度(the proof-of-work difficulty)将采用移动平均目标的方法来确定,即令难度指向令每小时生成区块的速度为某一个预定的平均数。如果区块生成的速度过快,那么难度就会提高。
如果有一台超级电脑,能够在区块解题中获胜?
即便是一台超级电脑,或者时几百上千台电脑也很难赢得解一个区块的胜利,因为竞争对手不是任一台电脑,而是整个比特币网络。你可以用买彩票来比拟。操作千百台电脑,如同买了千百张彩票一样。
51%攻击是指的什么
根据前面的例子,我们知道,要想有50%的概率领先其他人解题得到胜利,就需要掌握全网50%以上的算力。要连续领先他人解出区块,掌握的运算能力还需要高得多。所以区块链中的交易是受到数学竞赛所保护。恶意用户必须和整个网络较量。区块连接建立的结果,使得在支链越前方的交易越安全。恶意的用户必须在更长的时间赢过全网络,来达成重复支付,替换前面的区块链。所以,系统只有支端末尾易受到重复支付攻击。这也是为什么系统建议多等几个区块,才能确认收款成功。
个人博客:https://dreamerjonson.com/
Ⅶ 女巫攻击与双花攻击
女巫攻击 的名字源于1973年由小说《Sybil》改编的同名电影。电影中的女主人公Sybil Dorsett患有分离性身份认同障碍,本身兼有16种人格。
区块链底层是 P2P网络 。网络中各个节点可以随时加入或退出,为了维持网络的有效性,一般一份数据常常需要部署在若干个分布式节点上。如果一个恶意节点伪装有多个身份就存在可获得全部数据的几率,下面我打个比方:
假设神龙造出了七颗龙珠,并且要将它们分别投放到地球的各个角落。于是神龙昭告天下,让每个洲来一个人领取龙珠。此时,精通乔装易容术的我分别假扮出七个不同地域的人来神龙这拿到了龙珠。本来神龙将龙珠放到世界不同的地方基配圆就是为了平衡各地方力量,但是由于我伪造了身份,成功地拿到了全部龙珠,控制了地球。
以上比喻就是女巫攻击的本质体现。
双花攻击是大多区块链加密数字货币都要面对的一种攻击手段。顾名思义,双花攻击就是一笔有效的钱被先后花了两次。
双花攻击的可行性完全是由于区块链的共识机制导致。拿比特币举例,由于比特币的POW共识机制属于最终一致性共识,一笔交易从发布到全网所有节点都达成统一确认需要一定时间,而攻击者就是利用这个时间间隙进行攻击。举个生活中的例子:
假如银行A有两个支行B和C。但是,这个银行的账目系统比较低效,支行B和C每过1个小时才会去主行A那里同步账本。我在主行A中存了100块钱,过了一个小时后支行B和C同步了账本,于是我在B和C中都可以查到我拥有100块钱。之后,我通过支行B用我的账户买了100块钱的好吃的,随即又通过支行C用我的账户卖唯买了100块钱好玩的。由于支行B和C之间做不到账目的随时同步,所以支行C在我去买好玩的时候依然认为我拥搏塌有100块钱。
以上就是双花攻击,并且“双花”永远是一种 流通货币 所要解决的首要问题。