Bitcoin: bip143

比特币脚本有4个验证签名 操作码:

CHECKSIGC
CHECKSIGVERIFY
CHECKMULTISIG
CHECKMULTISIGVERIFY

at least 2 weaknesses in the original SignatureHash transaction digest algorithm

在原来的hash数字摘要签名算法中, 至少有2个弱点:

For the verification of each signature, the amount of data hashing is proportional to the size of the transaction. Therefore, data hashing grows in O(n2) as the number of sigops in a transaction increases. While a 1 MB block would normally take 2 seconds to verify with an average computer in 2015, a 1MB transaction with 5569 sigops may take 25 seconds to verify. This could be fixed by optimizing the digest algorithm by introducing some reusable “midstate”, so the time complexity becomes O(n).

验证每笔交易, hash数据量跟交易数据成正比. 因此, hash数据的增长是 O(n2)级别, 相对于签名数据的增长.
1MB的 block 在一个2015年 平均水平的电脑上通常要花2 秒验证. 5569 sigops个 1MB的交易 要花25秒验证.
可以通过引入一些可重用的midstate 去优化摘要算法, 时间复杂度变成 O(n).

The algorithm does not involve the amount of Bitcoin being spent by the input. This is usually not a problem for online network nodes as they could request for the specified transaction to acquire the output value. For an offline transaction signing device ("cold wallet"), however, the unknowing of input amount makes it impossible to calculate the exact amount being spent and the transaction fee. To cope with this problem a cold wallet must also acquire the full transaction being spent, which could be a big obstacle in the implementation of lightweight, air-gapped wallet. By including the input value of part of the transaction digest, a cold wallet may safely sign a transaction by learning the value from an untrusted source. In the case that a wrong value is provided and signed, the signature would be invalid and no funding might be lost.

这个算法不涉及比通过特币输入被花费的数量. 这通常不是个问题对于线上网络节点, 他们能请求特殊的交易
获得输出的数量. 对于线下交易签名设备(冷钱包), 不知道输入的数量,无法计算花费的数量和交易费用.
为处理这个问题, 冷钱包必须获取花费的所有交易, 这将成为一个大障碍在实现 lightweight, air-gapped 钱包上. 包括输入值的交易的一部分digest, 一个冷钱包可能安全的签名一个交易, 通过学习 value从一个不受信任的源. 在这种情况下 一个错误的值被提供和签名, 这个签名将是无效的也没有资金, 可能会丢失.

Deploying the aforementioned fixes in the original script system is not a simple task. That would be either a hardfork, or a softfork for new sigops without the ability to remove or insert stack items. However, the introduction of segregated witness softfork offers an opportunity to define a different set of script semantics without disrupting the original system, as the unupgraded nodes would always consider such a transaction output is spendable by arbitrary signature or no signature at all.

部署上文中的修改在原始脚本系统中不是一个简单的任务. 这将硬分叉或软分叉对于新的 sigops,不能删除或插入栈内容的 sigops. 然而, 引入隔离见证软分叉 提供了一个机会, 去定义语义不同的脚本在不影响原系统的情况下, 随着unupgraded节点总是考虑这样一个由可使用的签名或没有签名构成的任意输出的交易.

Specification 规范

A new transaction digest algorithm is defined, but only applicable to sigops in version 0 witness program:

定义一个新的交易摘要算法,但只适用于 sigops in version 0 witness program:

  Double SHA256 of the serialization of:
     1. nVersion of the transaction (4-byte little endian)
     2. hashPrevouts (32-byte hash)
     3. hashSequence (32-byte hash)
     4. outpoint (32-byte hash + 4-byte little endian) 
     5. scriptCode of the input (serialized as scripts inside CTxOuts)
     6. value of the output spent by this input (8-byte little endian)
     7. nSequence of the input (4-byte little endian)
     8. hashOutputs (32-byte hash)
     9. nLocktime of the transaction (4-byte little endian)
    10. sighash type of the signature (4-byte little endian)

Semantics of the original sighash types remain unchanged, except the followings:

原sighash类型的语义保持不变,除了以下:

  1. The way of serialization is changed;
  1. All sighash types commit to the amount being spent by the signed input;
  1. FindAndDelete of the signature is not applied to the scriptCode;
  1. OP_CODESEPARATOR(s) after the last executed OP_CODESEPARATOR are not removed from the scriptCode (the last executed OP_CODESEPARATOR and any script before it are always removed);
  1. SINGLE does not commit to the input index. When ANYONECANPAY is not set, the semantics are unchanged since hashPrevouts and outpoint together implictly commit to the input index. When SINGLE is used with ANYONECANPAY, omission of the index commitment allows permutation of the input-output pairs, as long as each pair is located at an equivalent index.
  1. 序列化方式改变;

  2. 所有sighash类型提交 �被花费的(被签名的输入)总额 ;

  3. FindAndDelete 签名不在用于scriptCode;

  4. OP_CODESEPARATOR(s)后执行OP_CODESEPARATOR不删除scriptCode(最后执行 OP_CODESEPARATOR和任何脚本 在ta总是删除之前);

  5. SINGLE 不提交 input index. 当 ANYONECANPAY没有设置时,
    语义不改变, 自从 hashPrevoutsoutpoint 一起隐式提交到 input index.
    SINGLE ANYONECANPAY 一起使用, 缺失索引承诺允许置换输入-输出对,只要每个对 位于 一个等价的索引.

尼玛 会说人话么


参考:

https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki
https://en.bitcoin.it/wiki/Script
https://bitcoin.stackexchange.com/questions/50590/how-to-compute-double-sha256-shown-in-examples-of-bip-143

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容

  • 现在距我离家去车站还有一个小时。 寒假还没开始就给自己订了很多计划,可惜啊,一如从前,晚上熬夜早上懒床,浑浑噩噩又...
    教条猫阅读 145评论 0 1
  • 姝寒阅读 140评论 0 0