深入浅出比特币签名(2)

之前这个贴说过,签名就是拿私章盖在一串数12345上,那这是串什么数?

了解这点之前,先看一下原来的交易乙,这里汇款信息一侧是由签名和公钥B组成,但实际上在比特币里,这部分信息虽是主要的,但并不是全部,有些附加信息我一开始略掉了,这里加上,可以看到有数字13524, 47,41,88,ac 等等。。。13524是前一个交易的总笔画数(哈希值),用于验证花的币所在的前一个交易是正确的,而47,41之类数字可称为会计操作流程,比特币中叫做脚本(script)

会计操作流程是怎么回事?

从安全角度考虑,我们假设审核这些交易的会计(全节点)都是些小学文化的只懂按计算器和验证的人。所以具体如何验证这些交易,我不把任务交给会计,而是要求她们全部照章办事,这个章程就是会计操作流程。她们每个人都有一本小册子,里面有80条会计操作流程,有些很简单就是一步的操作(比如说47),有些较复杂,有多步的操作(比如说ac)。但无论如何,她们只需按汇款单上写的操作流程来做就行了

这样做的好处在于,我在汇款单上可自定义操作流程来实现一些扩展的功能,而不需要每次一想实现新功能都要重新给会计培训(升级全节点),比如实现多重签名(会计必须验证3个签名中的2个才判定交易合格),比如实现智能合约(会计必须收到其他传真才能判定交易合格),等等。。。

顺便提一下以太坊(Ethereum)。以太坊和比特币的根本区别,就在于这些操作流程上。中本聪设计比特币的时候,特意让这些操作流程极为简单,不能实现很复杂的功能,他认为一个货币体系的主要功能就是转账,这些会计不该什么事都做。但以太坊则不同,就是把这套操作流程编的非常繁复,功能非常强大,形成了一整套计算机语言。也就是说以太坊主要是利用区块链来实现非转账的其他功能,那种情况下,就不是汇款单,可能是合同,条款等等,让职员来根据以太坊的操作流程判断合同是否可以执行

当然了,虽说操作流程可随便组合,但在比特币中绝大多数情况下都是只有一种操作流程即P2PKH,也就是验证私钥签名,即本例中的内容

会计拿到汇款单(交易乙)后,具体操作流程如下:

第一步,先从付款信息取出要处理的部分:

  1. 取那串数字和上面的签名部分
  2. 取公章B

这两个操作(比特币中代码47和41)是写在付款信息里的,47是指取签名总长47位,而41是指取公钥的总长41位。会计一看到47就知道是取数字加签名,一看到41就知道是取公钥

第二步麻烦一些,从前一个交易(交易甲)的收款信息里找到如何验证交易(按照交易甲的兑现条件来操作,但可以参考交易乙的收款信息,操作代码是一样的)

1.数公章B的总笔画数 (a9)
2.取地址B (14 地址B)
3.验证公章B的总笔画数是否等于地址B,不相等则交易无效 (88)
4.验证那串数字12345上的私章是否和公章B的裂缝吻合,不吻合则交易无效 (ac)

这里的第四步,那串数字12345已跟私章混在一起无法辨认了,会计需要重新构造这串数字,然后用公章盖上去,再和原来私章盖上去的图像对比,以验证私章的有效性

这串数字12345怎么构造呢?是根据数交易乙里所有字的总笔画数来构造的

这就出现了一个逻辑问题:要数交易乙的总笔画数(算哈希),我必须连付款信息中的这串数字和盖在上面的私章都一起数,那在还没有这串数字和私章的时候,我怎么知道交易乙里的总笔画数呢?

因此,中本聪是这样设计的:交易乙的付款信息中先用铅笔填上前一个交易的收款信息(也就是交易甲里的金额,地址B,兑现条件),然后来数交易乙的总笔画数(假设得到12345)

对乙来说,他要盖私章的时候也是用同样方法获得这串数字12345。在他得到了这个总笔画数以后,把付款信息中的铅笔填的内容擦掉,把这个总笔画数写回去并盖上私章,后面紧跟着附上公章

逻辑较好的人会看到这里的一个问题,即:既然在付款信息一栏里已经有了前一个交易甲的总笔画数(哈希值)13524,那再把交易甲的收款信息部分填在这里再数这部分的笔画数就是不必要的,因为我已经数过了交易甲的总笔画数了,能够证明本笔交易和交易甲一一对应

对此,Talk论坛上2012年也有人质疑过
https://bitcointalk.org/index.php?topic=102487.msg1123257#msg1123257
Pieter的回答是:去问中本聪(我怀疑是他主观的基于一些不成文的理由,这让他感觉更安全)
Mike的回答是:我猜这是早期版本中实现时的脚本的一种很糟糕的实现方式,后来遗留下来了

可以看到,Pieter向来就对中本聪的设计有意见,所以他现在提出完全修改比特币的架构,这个想法也是由来已久的了

最后这里是一张完整的交易单的所有16进制码,有兴趣的可以自己找找对应的那些操作码大致都在什么地方

 

 

11 回复
一冲即食 medium avatar
1

一冲即食 Yellow v    一天前   via Android

谢谢科普,赞。

比特币感谢地址: 13a7yGEEQbqkC8y7AJCZ2MHrSQPjojFgFf
Trueiron medium avatar
2

Trueiron Yellow v    一天前   via Android

大神不设感谢地址,只能以赞代替了!

比特币感谢地址: 1ronNBrnGoAmfTQ9L5mXcSJUL3moNzoz2
BitThink medium avatar
3

BitThink Yellow v    一天前   via iPhone

支持原创科普

比特币感谢地址: 1Aug9NQPT1Hotn6BGhc14YeRHszMduhU79
oldfox126 medium avatar
4

oldfox126 Yellow v    一天前

支持原创科普

比特币感谢地址: 19aU214jC3L3RtUpp8b3vYrTtndQFibs3o
Eric83 medium avatar
5

Eric83 Yellow v    一天前

笔画数这个比喻很准啊

比特币感谢地址: 17sJZCctrh8wiVy18CYRu8o6jKjBiXb28F
vatten medium avatar
6

vatten Yellow v    一天前

多谢各位捧场,不过还是想问一句,都看的懂吗?

cndx medium avatar
7

cndx Yellow v    一天前   via Android

赞楼主

以太坊则不同,就是把这套操作流程编的非常繁复,功能非常强大,形成了一整套计算机语言。也就是说以太坊主要是利用区块链来实现非转账的其他功能,那种情况下,就不是汇款单,可能是合同,条款等等,让职员来根据以太坊的操作流程判断合同是否可以执行

并不是比特币就放弃了智能合同,智能条款。而是将这些放到币应用层面,或者放到比特币侧链中。

理论上以太坊能实现的,在比特币上都可以结合币应用实现。

以太坊并不是第一个有这种规划的,早期BTS就有各种各样的规划,不过其多是画饼,而以太坊好像是有点脚踏实地而已。
智能合约也不是以太坊的专有,很多山寨币都是打智能合约的概念。

让以太坊尽量努力吧,电子币都是开源的其努力编程的结果是要开源的。将来要么直接以太坊加盟成为比特币侧链币,要么则把其代码都fork过来,开发个比特币侧链,实现全部以太坊功能。

他们不是完全竞争关系。整个电子币圈是个整体。

比特币感谢地址: 1DogeKd9JrUNzFaLEyWAVxCVXSvWxe6sAm
nodouble medium avatar
8

nodouble    一天前

感谢科普,还在努力看懂中。。。

vatten medium avatar
9

vatten Yellow v    15 小时前

@nodouble 我担心的就是这点,我已尽量把最关键的东西简化成任何没有计算机学位的人都能理解的东西比如汇款单和私章了,但如果这样也不能让人懂,那就说明科普是没有意义的。想说服一些人接受某个方案是好的就只能用其他方式,比如说宣传,社交,诱骗,贿赂等等。这就是说任何事物凡复杂度一旦上升到一定程度,政治就开始取代理性了,所以政治似乎是永远不可避免的,有关技术的讨论在这个阶段已经没有太多意义了

其实这个事情在科学界也是很常见的,前些天就看到篇文章说有个科大的少年班学生在美国因为他从师的那个教授恰恰是另外一个流派的,所以无论如何不能发表他的文章

nodouble medium avatar
10

nodouble    14 小时前

@vatten 你的解釋很好啊,只是我學得慢點兒而已:)

vatten medium avatar
11

vatten Yellow v    12 小时前

@nodouble 有什么不明白的地方尽管问,我也要了解哪里还需要进一步简化

Advertisements
深入浅出比特币签名(2)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s