说说为什么一个比特币私钥可以对应多个地址

2021-04-22 03:13:27 +08:00
 acess
楼主来半桶水瞎掰扯一下这个蛋疼的问题……


(1)光是公钥就分两种:压缩和非压缩。现在一般用压缩的。

于是,光是 1 开头的 P2PKH 地址,就有两个,因为压缩公钥和非压缩公钥哈希出来也不一样。


(2)锁定脚本,或者叫输出脚本,这方面的写法几乎无穷无尽……虽然典型 /常见的也就那么几种。

这个说来话长。

不过到这里已经可以看到:

2 种公钥×N 种输出脚本=……
额,有点画美不看……

而且,未来激活了 taproot,公钥可以和脚本哈希合体,里面还可以藏入……额……嵌套多层的脚本哈希……
额……

(又不知道哪里触发 V 站的和谐了,哎,跟贴吧一样难用,楼下继续)
1192 次点击
所在节点    Bitcoin
30 条回复
acess
2021-04-22 04:00:41 +08:00
19 楼提到的陷阱,是不是在 taproot 里能避免,这个老实说我还不是非常确定,毕竟楼主我是半桶水;但是 taproot 能干啥,我应该还是知道的。


首先复读一下,P2SH 是啥样的?

先登记合同的哈希值(脚本哈希),未来要按照合同内容执行时(把币花出去),再提供完整的合同全文(赎回脚本)。


然后,taproot 又是什么情况?

前文不是提到,公钥里可以藏一个哈希么,很显然,这个哈希可以是脚本哈希啊,于是就可以把 P2SH 的功能包括进来了。

然后,即便是把哈希藏到公钥里,只要交易打包进链,那“合同全文内容”还是固定了,改不了了。

但是,没关系。重点来了——
taproot 的这个公钥,不仅可以藏哈希;归功于 Schnorr 数字签名的神奇数学性质,这个公钥本身,还可以是多个公钥“合体”变成的。

然后,只要合体前的多把私钥全部都签名了,那么就可以无视(作废)掉当初藏进去的那个脚本哈希。

欸,作废了?那还藏这个脚本哈希进去有啥用?
有用啊。
如果多把私钥的主人们并没有全部达成一致意见,出现了争议,那就可以把当初订立的合同(赎回脚本)重新拿出来,对外出示,还是可以按照当初订立的合同来执行。

(这里也存在不少遗憾,比如这个神奇的 Schnorr 签名只能在所有人一个不落下全部都达成一致的情况下才好用;光靠 schnorr 签名本身,并不能实现“少数服从多数”的多重签名;(理论上)顶多只能实现反过来的“多数服从少数”。想要“少数服从多数”,还是得靠脚本)
acess
2021-04-22 04:09:31 +08:00
到了这里,其实“嵌套多层的脚本哈希”是啥,也许即便我不说,可能你大概也明白了。

因为有神奇的 schnorr 签名加持,在[所有人一个不落下全部都达成一致意见的情况下],就可以无视当初藏进公钥的那个脚本哈希,不用出示完整的赎回脚本。

如果碰到了需要出示完整赎回脚本的情况呢?

脚本里,其实还可以包含一个公钥,这个公钥乍一看,怎么看都只是个公钥,实际上,它里面藏了一个脚本哈希……

这个脚本哈希呢,在需要出示脚本原文的时候,里面其实还可以包括一个公钥,这个公钥乍一看,怎么看都只是个公钥,实际上,它里面藏了一个脚本哈希……

……

嗯,就是这样,套娃了。
据我所知,(与 Schnorr 签名结合使用的) MAST 就是这么一回事。

而且,很容易想到:
就像代码里的 if then else,两个分支里只有一个会执行,不同条件执行不同的分支;
MAST 也是类似的,而且,你只需要出示被执行的那部分代码,没执行的那部分,你不用出示,然后大家就都只能看到哈希,看不到原文。
acess
2021-04-22 04:21:16 +08:00
最后,很多时候 taproot 被宣传成“比特币的隐私功能”

如果我没理解错,这其实和很多人预想的不太一样。
acess
2021-04-22 04:21:32 +08:00
taproot 的隐私性,据我所知只体现在两个方面:

(1)公钥里是不是藏了脚本哈希,外界看不出来,公钥和公钥看上去长得都很像,分不清彼此。所以,存在“可互换性”方面的好处。

(2)MAST 里只需要披露被执行的那部分脚本原文,不被执行的就可以不披露,外界只能看到哈希值,看不到原文。
acess
2021-04-22 04:22:01 +08:00
额,怎么说呢,和绝大多数人脑补的匿名性、不可追踪性什么的,好像不怎么能挂得上边(虽然第(1)点涉及“可互换性”,勉强挂得上边吧)……不知道是不是我了解不到位。而且 taproot 未来还是要通过软分叉实现,换句话说,taproot 本身,相对之前已经存在的 P2PKH 、P2SH 、P2WPKH……这些,就已经是又一个截然不同的、新的地址类型——不同的地址类型其实是对“隐私”/“可互换性”不利的,这恰恰就是 taproot 想要缓解的问题。
acess
2021-04-22 04:22:16 +08:00
换句话说,只有未来所有人都用上 taproot 了,taproot 的第(1)点好处才能完全体现;然而哪怕是现在,还有相当比例的人很守旧,连隔离见证都不愿意用(或者说,不知道怎么才能启用)。
acess
2021-04-22 04:23:17 +08:00
本来 schnorr 签名理论上还可以实现 CISA ( cross-input signature aggregation,跨输出签名聚·合),看上去对 coinjoin 很有用
acess
2021-04-22 04:23:24 +08:00
(可以大幅节省字节数,N 个人一起混币,交易里只占一份数字签名的字节数,而不是 N 份),但 CISA 貌似也还是没有实现……
yqrm
2021-04-22 15:48:58 +08:00
10 年老 BTCer 来挽尊😂
zealic
2021-04-23 01:00:21 +08:00
楼主对 BIP39/44/49/84 理解的很深入。

Taproot 这里描述的很好,可以进一步理解其工作方式。

从另一个角度上考虑,Schnorr 的所有人签名并且不暴露赎回脚本这个功能也是非常有用的,更多的可能性不会在于钱包方面,而且和其他链如以太、波卡进行跨链交互,甚至多链交互。
这种跨链合约通过代码保证,所有人的全签名又可以保证不同的跨链智能合约进行合约嵌套组合(比如 AAVE 的闪电贷),可以实现非常复杂有趣的玩法,当然可能产生天量 GAS 费,因此这个设想还是需要 ETH 2.0 的支持。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/772332

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX