我们举个简单的例子,比如你在商场刷卡买东西。这个行为面临三种危险:

1. 首先,刷卡这个行为,验证的是你的信用卡信息,也就是说只要给刷卡机提供同样的信息,就能从你的账户里把钱刷走。没错,很多朋友都听说过,有犯罪组织专门从事复制卡信息的勾当,然后“盗刷”你的卡。在一些不发达国家的小店里刷卡就特别容易中招。

2. 其次,负责记账和结算的卡组织和银行的服务器可能被黑客攻破,造成数据泄露和伪造交易。回想这些年一波又一波某某大公司数据库被黑客攻入的新闻,这危险并非危言耸听。(好吧,认真的geek会说这里用词应该是cracker骇客而非hacker黑客,不过这年头认真的人越来越少了)

3. 最后,还有一种可能,就是用卡人自己可能利用系统网络延迟,在进行第一笔交易、用完所有额度后,趁系统还没记账把额度扣完,立刻进行第二笔交易,形成诈骗。当然目前的结算系统延迟极小,这情况不太可能,不过像在优惠券或者抢购资格这种另外搭建的相对脆弱的系统上还是有可能的。

区块链是怎么处理这些问题的呢?我们以比特币交易为例,逐条分析。

1. 首先,比特币拥有者想要完成某项交易,比如买手机吧,他会向全网广播:我小A向小B支付1个比特币(嗯,这金额大致可以买个iPhone X)。

与这条信息一起的,还有一条加密信息,这条信息是用Hash函数对上一条信息加密生成一个摘要后,再用A的私钥进行加密的(称为私钥“签名”)。

接收到这条信息的B和其他用户先用同样的Hash函数对明文信息生成摘要,再用A的公钥对加密信息进行解密,如果解密得到的摘要与明文生成的摘要相同,便认为信息确实是A发出的,且没有经过篡改。

A的公钥和Hash是公开的,私钥则无法算出,只有A知道,这样就既保证了交易的达成,又保证了A的信息无法被窃取。

2. 其次,由在POW(运算力证明)中胜出的矿工负责这段时间的记账,事先完全无法知道究竟哪个矿工来记账,黑客也就无从黑起,除非碰运气。

3. 最后,在传统系统中因为结算速度极快而不太可能的情况,在比特币网络中反而可能性比较大。如昨天所说,因为没有中心化的管理者,交易确认的时间要长很多,使得这种诈骗有可能实现,这就是比特币的double spending双重花费问题,简称“双花”。

对于双花问题,比特币网络,或者说区块链网络,是这么应对的:

-每笔交易都需要先确认对应比特币之前的状态,如果它之前已经被标记为花掉,那么新的交易会被拒绝。

-如果先发起一笔交易,在它被确认前,也就是这个时间段的交易还未被记账成区块block时,进行矛盾的第二笔交易,那么在记账时,这些交易会被拒绝。

-上面只是小伎俩,现在tricky的部分开始了。如果诈骗者刻意把第一笔交易向一半网络进行广播,把第二笔交易向另一半网络广播——这个诈骗者智商还挺高——然后两边正好有两个矿工几乎同时取得记账权,把各自记的block发布给大家的话(这个概率很低),网络是不是会混乱呢,区块链的规则是这样的:先选择任意一个账本都可以,这时候原来统一的账本出现了分叉:

但是在两个账本中各只有一笔交易,诈骗者不会有好处。接下来,下一个矿工选择在A基础上继续记账的话,A分支就会比B分支更长,根据区块链的规则,最长的分支会被认可,短的分支会被放弃,账本还是会回归为一个,交易也只有一笔有效:

-那么如果这个诈骗犯真的智商非常高,他会这么做:如果是A分支被认可(B也一样),相应交易确认,拿到商品之后,立刻自己变身矿工,争取到连续两次记账权,然后在B分支上连加两个block,就像这样:

于是B分支成为认可的分支,A被舍弃,A分支中的交易不再成立,但他已经拿到商品,诈骗成功。

在B分支落后的情况下要强行让它超过A分支,其实是挺难的,假设诈骗者掌握了全网1%的计算能力,那么他争取到记账权的概率就是1%,两次就是10的负4次方。但这个概率还没有太低。

应对办法呢?建议大家在一笔交易确认后,也就是一个block被记下来之后,再等5个block,也就是等6个block被确认后再把交易对应的商品交付。这样,诈骗者还能追上的概率就几乎为0了。除非……

如果诈骗者掌握了全网50%以上的计算力,那么,即使落后很多,他追上也只是时间问题,这就是比特币的“51%攻击”。

这就是区块链需要警惕的问题。虽然在比特币网络中,用户已经极多,全网算力总和非常大,如果真掌握50%以上,也不用靠这个诈骗了,挖矿的收益都更高。但是在小的区块链网络中呢?况且,没有50%以上的算力,还是有机会成功的,只是概率低而已。

区块链中的“双花”问题相关推荐

  1. 零知识证明应用到区块链中的技术挑战

    零知识证明应用到区块链中的技术挑战 李康1,2, 孙毅1,2, 张珺3, 李军4, 周继华5, 李忠诚1 1. 中国科学院计算技术研究所,北京 100190 2. 中国科学院大学,北京 100049 ...

  2. secp256k1 php,区块链中的数学-secp256k1 签名可锻性以及解决方案

    本文简记一下椭圆曲线算法中的另外一个小的话题:签名的可锻性. ## 写在前面 上一节说了[从凭证角度详细说明了Miller Rabin算法思路和实现](https://learnblockchain. ...

  3. VRF在区块链中的应用

    最近区块链领域流行了一种"怪病",许多区块链项目或者设计方案都加入了一个叫做VRFs的算法.那么, (1) 什么是VRFs? (2) VRFs在区块链中解决了什么问题? 本文旨在介 ...

  4. 【区块链与密码学】第9-7讲:群签名在区块链中的应用 I

    [本课堂内容全部选编自PlatON首席密码学家.武汉大学国家网络安全学院教授.博士生导师何德彪教授的<区块链与密码学>授课讲义.教材及互联网,版权归属其原作者所有,如有侵权请立即与我们联系 ...

  5. 区块链中utxo模型是什么意思_OK区块链60讲 | 第21集:什么是UTXO模型?

    哈喽大家好,我是小K君.今天我们要讲的内容是:"什么是UTXO账户模型"? 在上节课中,我们已经讲过了什么是双花问题,其中,双花问题的第一种情况,就是由于处理方在记账时因为同步存在 ...

  6. 独家| ChinaLedger白硕:区块链中的隐私保护

    隐私问题一直是区块链应用落地的障碍问题之一,如何既能满足监管,又能不侵害数据隐私,是行业都在攻克的问题.那么,到底隐私问题为何难?有什么解决思路,以及实践创新呢?零知识证明.同态加密等技术,又能否解决 ...

  7. 区块链中常用的跨链技术

    ​区块链所面临的诸多问题中,区块链之间互操作性极大程度的限制了区块链的应用空间.不论是公有链还是联盟链,跨链技术就是实现价值互联网的关键,是区块链向外拓展和连接的桥梁.目前主流的跨链技术包括: 公证人 ...

  8. 区块链中的智能合约是什么?

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. "智能合约是一套以数字形式定义的承诺,承诺控制着数字资产并包含了合约参与者约定的权利和义务,由计算机系统自动执 ...

  9. 在公共区块链中通过加密保护数据

    链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载. 隐私限制 在处理或交换业务文件时,贸易伙伴可能需要某些隐私因素. (1)交易数据的隐私性: 交易数据仅供交易双方 ...

最新文章

  1. linux下用C语言实现TCP/IP服务器与客户端互相发送数据的socket编程
  2. HDU2665 求区间第K大 主席树
  3. 查询时注意 查询字段传值参数类型,尽量和数据库字段类型一致
  4. Android开发之git命令创建tag提交远程仓库的方法(图文教程)
  5. 随机森林原理_机器学习(29):随机森林调参实战(信用卡欺诈预测)
  6. 前端学习(1164):剩余参数02
  7. compress()方法
  8. WebBrowser中html元素如何触发winform事件
  9. 织梦cms生成首页html的php文件,织梦DedeCMS定时自动生成首页HTML的实现方法
  10. 0基础学python做什么工作好-写给0基础小白:Python能干什么?就业前景好不好?怎么开始学?...
  11. 【Android】-- adb shell 命令探索
  12. MAC环境配置SDK
  13. 一个关于数组数据检查的问题,有没有更好的方法。
  14. js拼接json对象_JS实现合并json对象的方法
  15. 欧瑞变频器800参数设置_(完整版)ACS800变频器参数设定
  16. 迈向云原生开发,我眼中的云原生
  17. 微信小游戏 腾讯课堂《白鹭教育 - 成语大挑战小游戏开发》学习笔记
  18. IP协议以及IP地址分类
  19. 微信小程序支付以及退款功能(超详细)
  20. 【Java】Callable 接口

热门文章

  1. 06-作业练习盒子模型
  2. 多功能Python键盘记录工具Radium
  3. VM设置Ubuntu窗口自适应大小
  4. Obsidian好用的Markdown工具
  5. 如何卸载--奇安信安全终端管理系统
  6. alook浏览器_Alook浏览器app下载|Alook浏览器安卓版下载 v3.4.1 - 跑跑车安卓网
  7. HP 惠普笔记本电脑 禁用触摸板 在插入鼠标后
  8. mysql 核对_mysql数据库核对
  9. 用矩阵解方程式的运算-高斯消元法
  10. json和jsonb类型——PostgreSQL