什么是延展性(Malleability,可鍛性)
原文: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,可鍛性)的更多相关文章
- .Net微服务实战之DevOps篇
技术只是基础 该系列的两篇文章<.Net微服务实战之技术选型篇>和<.Net微服务实战之技术架构分层篇>都是以技术角度出发描述微服务架构的实施. 如果技术选型篇叙述的是工具,那 ...
- Ctrip Mydream
--我不知道以后如何,我不知道我做的事情能否持续,我只是希望有一天我真的在这条路上走下去了,我只希望去一次这里检验一下自己,我希望自己努力争取这个机会. .Net技术专家 岗位职责: 1.主导本领域的 ...
- .NET高端职位招聘要求
系统架构师: 1.硕士及以上学历,博士有项目成果者优先: 2.五年以上工作经验,三年以上互联网经验,一年以上大型软件项目总体设计.分析.架构经验,有移动互联网或云计算虚拟化系统设计开发经验者优先: 3 ...
- mootools vs jquery
大部分最近才剛接觸JavaScript的人會面臨到的困難是該選擇哪個套件(library)或是該先學哪個套件.如果你在一間公司裡上班,那麼可能公司已經有一套固定使用的套件,若是在這種情況下,問題就沒那 ...
- 代码的坏味道(17)——夸夸其谈未来性(Speculative Generality)
坏味道--夸夸其谈未来性(Speculative Generality) 特征 存在未被使用的类.函数.字段或参数. 问题原因 有时,代码仅仅为了支持未来的特性而产生,然而却一直未实现.结果,代码变得 ...
- 2000条你应知的WPF小姿势 基础篇<78-81 Dialog/Location/WPF设备无关性>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...
- 浅谈 linux 例行性工作 crontab (linux定时任务)
定时任务大家都挺说过,就好比你手机上的闹钟,到了指定的时候就会响起. 今天在对redis缓存进行定时储存时又操作了一把,发现一些细节,写的不好.大家就将就看吧, 首先 简单介绍一下linux 例行性工 ...
- 分享一实战性开源MVC框架<Linux、Windows跨平台开发so easy>
一.引子 开源地址 https://github.com/564064202/Moon.Mvc 欢迎加入开发 .NET Core微软还在发力,但作为商用还有一段距离,很多开发库尚不能用于.NET ...
- 关系数据库SQL之可编程性触发器
前言 前面关系数据库SQL之可编程性函数(用户自定义函数)一文提到关系型数据库提供了可编程性的函数.存储过程.事务.触发器及游标,前文已介绍了函数.存储过程.事务,本文来介绍一下触发器的使用.(还是以 ...
随机推荐
- ACM-素数专题(持续更新)
埃拉托斯特尼筛法,或者叫埃氏筛法(听上去似乎很高大上的样子) #include<bits/stdc++.h> using namespace std; typedef long long ...
- x86/x64/AnyCPU之间的区别
原文链接 http://blog.csdn.net/lordwish/article/details/52312015 x86操作系统 目标平台 程序类型 运行结果 x86 应用程序exe 在32位C ...
- 实现接口必须要加注解@Override吗
不一定的,但是我们的编译器在查询我们重写的方法,方法名,参数,返回类型的时候,是能够根据注解来帮助我们判断方法重写的正确与否 所以我们有必要在编写过程中加上@Override,虽然我们的eclipse ...
- 【测试的艺术】+测试分析&测试计划+模板
一.项目概述 1.1.项目背景 #就是说一下为什么要做这个项目 1.2.项目目标 #这个项目最终要达到的目标是什么 二.项目整体分析 #项目分为哪些部分?各部分之间的关联是什么?各部分的目标是什么? ...
- js中this那些事儿
前几天写东西由于恶趣味作祟将所有的函数全部封装在json中,起初好好的,函数B也可以调用函数A的内容,不过在写一个点击事件时出现了意外, 代码如下: var $ ={ "A":fu ...
- Django开发步骤
Django开发步骤 Django框架每次开发的初始化的套路都基本一样,这里记录一下. 安装Django 首先安装Python软件,上python官网下载对应的安装包.接下来就是安装Django: p ...
- C 标准库 - string.h之strncpy使用
strncpy 把 src 所指向的字符串复制到 dest,最多复制 n 个字符.当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充. char *strncpy(char *dest ...
- WPF的ProgressBar进度条
1. ProgressBar常用属性 1.1. Minimum:进度条的最小值,一般为 0 1.2. Maximum:进度条的最大值,一般为100 或者是 某一个数, 如复制文件时,总文件数等 1. ...
- solr linux配置
一.先在官网下载solr的最新版本或者你需求的版本1 目前我使用的是4.10.3(http://archive.apache.org/dist/lucene/solr/4.10.3/)2 复制到你的云 ...
- 【JSON.parse()和JSON.stringify()】
var str = '{"name":"huangxiaojian","age":"23"}' 结果: JSON.par ...