原文:http://8btc.com/forum.php?mod=viewthread&tid=23878&page=1#pid270878

1. 什么是延展性(Malleability,可鍛性):“延展性”指的是“在材质本身无损的前提下,可以通过外力改变为特定形状”的性质。
<ignore_js_op>

显而易见,黄金是具有延展性的。由于真实性比较容易验证,因而无论形状如何改变,只要验证了含金量相同,那么可以认为其价值相同。

比特币的交易(TXID)也具有延展性:比特币系统通过数字签名来认证所有者的权益,从而模拟了黄金的某些特性(几乎无法伪造)。只要保护好私钥,签名了交易后,其他人无法伪造或篡改交易的实质内容(比如,收款地址和收款金额)。但是,交易的标识(TXID)——含有数字签名脚本的交易的哈希值——有方法可以改变。

严格来说,并不是比特币的交易具有延展性,而是模拟黄金属性的”数字签名“具有延展性——可以改变”数字签名“的外观,而不影响数字签名的效力。这是如何实现的呢?

”数字签名“实质上是一个比较复杂数学计算——有限域下的加法和数乘运算。输入和输出实际上都是一些非常大的整数。在数学计算中,整数最高位前面的”0“是可以忽略的,比如 “100” 和 “0100”等价,然而这两种表示形式的哈希值不一样。另外,有限域下涉及到模运算,不如模为7的有限域下,4和11是等价的,但显然这两个数的哈希值也不同。
也就是说,具有在数学运算上等价的数字签名,可以存在多种输出格式,这就使得“数字签名”具有了延展性。

由于生成比特币的交易标识(TXID)的哈希运算中包含了数字签名脚本,所以比特币的交易也同样就具有了延展性。

2. 交易延展性攻击:
交易延展性攻击的对象一般是交易所(有人工客服)。因为延展性攻击无法篡改交易的实质内容,只要交易广播出去了,因为签名有效,最终还是会被确认的,因而黑客无法直接靠交易延展性攻击来获利。但是通过策划,可以有这样一种方式:
先了解某一交易所外联的节点主要有那些,DDOS瘫痪掉它们并伪造出一些节点和交易所的节点进行通讯。同时向交易所发起提币请求。当自己的节点侦测到交易所转给自己的交易(此时拿到了交易所的数字签名了)时,先扣留这些交易不对外广播,或是利用交易可锻性修改TXID,然后向人工客服投诉,声称款项未到帐。如果交易所在技术实现上存在漏洞,仅根据TXID来检索对应交易,此时可能会误以为发送失败,可能通过人工方式又重发一遍(很可能使用了其他UTXO)。黑客在受到第二份交易数据后,把两笔交易向全网广播,这样就收到两份钱。

3. 防范:
一是当使用TXID查找不到对应的交易时,需要用TXIN_OUTPOINT再查一下;
二是如果确实需要重发,引用的UTXO一定要与原来保持一致,把这种麻烦事儿交给比特币网络来处,系统规则确保了最终只会确认其中的一个(不会出现双花)。

什么是延展性(Malleability,可鍛性)的更多相关文章

  1. .Net微服务实战之DevOps篇

    技术只是基础 该系列的两篇文章<.Net微服务实战之技术选型篇>和<.Net微服务实战之技术架构分层篇>都是以技术角度出发描述微服务架构的实施. 如果技术选型篇叙述的是工具,那 ...

  2. Ctrip Mydream

    --我不知道以后如何,我不知道我做的事情能否持续,我只是希望有一天我真的在这条路上走下去了,我只希望去一次这里检验一下自己,我希望自己努力争取这个机会. .Net技术专家 岗位职责: 1.主导本领域的 ...

  3. .NET高端职位招聘要求

    系统架构师: 1.硕士及以上学历,博士有项目成果者优先: 2.五年以上工作经验,三年以上互联网经验,一年以上大型软件项目总体设计.分析.架构经验,有移动互联网或云计算虚拟化系统设计开发经验者优先: 3 ...

  4. mootools vs jquery

    大部分最近才剛接觸JavaScript的人會面臨到的困難是該選擇哪個套件(library)或是該先學哪個套件.如果你在一間公司裡上班,那麼可能公司已經有一套固定使用的套件,若是在這種情況下,問題就沒那 ...

  5. 代码的坏味道(17)——夸夸其谈未来性(Speculative Generality)

    坏味道--夸夸其谈未来性(Speculative Generality) 特征 存在未被使用的类.函数.字段或参数. 问题原因 有时,代码仅仅为了支持未来的特性而产生,然而却一直未实现.结果,代码变得 ...

  6. 2000条你应知的WPF小姿势 基础篇<78-81 Dialog/Location/WPF设备无关性>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...

  7. 浅谈 linux 例行性工作 crontab (linux定时任务)

    定时任务大家都挺说过,就好比你手机上的闹钟,到了指定的时候就会响起. 今天在对redis缓存进行定时储存时又操作了一把,发现一些细节,写的不好.大家就将就看吧, 首先 简单介绍一下linux 例行性工 ...

  8. 分享一实战性开源MVC框架<Linux、Windows跨平台开发so easy>

    一.引子   开源地址 https://github.com/564064202/Moon.Mvc 欢迎加入开发 .NET Core微软还在发力,但作为商用还有一段距离,很多开发库尚不能用于.NET ...

  9. 关系数据库SQL之可编程性触发器

    前言 前面关系数据库SQL之可编程性函数(用户自定义函数)一文提到关系型数据库提供了可编程性的函数.存储过程.事务.触发器及游标,前文已介绍了函数.存储过程.事务,本文来介绍一下触发器的使用.(还是以 ...

随机推荐

  1. flutter 导入 http 库 import 'package:http/http.dart' as http;

    1,查看最新 http 版本 https://pub.dartlang.org/packages/http#-installing-tab- 1. Depend on it 在项目中找到 pubspe ...

  2. python web开发小结

    书籍 <python基础教程> <流畅的python> web框架 flask django tornado ORM sqlalchemy orator 消息队列 celery ...

  3. Docker 镜像加速

    通过 Docker 官方镜像加速,中国区用户能够快速访问最流行的 Docker 镜像.该镜像托管于中国大陆,本地用户现在将会享受到更快的下载速度和更强的稳定性,从而能够更敏捷地开发和交付 Docker ...

  4. 练习 DOUBLE INSERT

      练习 DOUBLE INSERT 目标:从一张表取数据插入到另一张表中,此外需要为插入的目标表做一个应用级的日志表,也就是说在插入目标表的同时,还需要将相同的数据插入到日志表中. 在案例一中,我们 ...

  5. Github提交PullRequest

    Github提交PullRequest工作流程: 以Kubernetes为例 1.   Fork Kubernetes到自己的Github目录 访问:https://github.com/kubern ...

  6. validate表单校验插件笔记

    1validation知识点 1 validation基础 validation插件下载http://bassistance.de/jquery-plugins/jquery-plugin-valid ...

  7. 关于重绘and重排

    在研究CSS3动画性能的时候,看到了重排两个字. 突然想到自己虽然听说过这么个东东,但一直也没深入研究之. 趁着当下正好有研究的劲头,所以一不做二不休,把这个point也给学习了. 同样是一番查找资料 ...

  8. css用hover制作下拉菜单

    首先我们的需求就是 制作一个鼠标移动到某个区域就会有下拉菜单的弹出,这样会有更多的子类内容,示例代码如下: <!DOCTYPE html> <html lang="en&q ...

  9. Hadoop实战之二~ hadoop作业调度详解(1)

    对Hadoop的最感兴趣的地方,也就在于Hadoop的作业调度了,在正式介绍如何搭建Hadoop之前,深入理解一下Hadoop的作业调度很有必要.我们不一定能用得上Hadoop,但是如果理通顺Hado ...

  10. ASP.NET MVC4 新手入门教程之一 ---1.介绍ASP.NET MVC4

    你会建造 您将实现一个简单的电影清单应用程序支持创建. 编辑. 搜索和清单数据库中的电影.下面是您将构建的应用程序的两个屏幕截图.它包括显示来自数据库的电影列表的网页: 应用程序还允许您添加. 编辑和 ...