| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 区块链 -> 比特币中的地址们 -> 正文阅读 |
|
[区块链]比特币中的地址们 |
先决条件一些必要的密码学知识,在非对称加密体系中,公钥和私钥的作用主要有两个,一个是加解密,一个是产生验证数字签名,要了解比特币地址的相关知识,就务必具备这些基础常识
在比特币网络中,非对称加密采用的是椭圆曲线加密算法,其具体的算法内容参考这个链接 关于散列函数(哈希函数,Hash,hash,H)是一种单向函数,也就是说给定一个输入,会得到一个输出,但是从输出无法逆向得到输入,这个类比藏头诗,从一个完整的诗,可以推出藏头的信息,但是只有藏头的信息无法推出完整的诗。 此外关于隔离见证部分的介绍中,常常出现可锻性一词,这个词的意思如下:指金属材料在压力加工时,能改变形状而不产生裂纹的性能。隔离见证中借用了这个概念,即改变区块链的结构但不改变其性能(理论上)。 P2PKH(Pay to Public Key Hash)比特币中,绝大多数交易都是支付到一个公钥的输出。由 P2PKH 脚本锁定的输出,通过出示公钥和相应的私钥产生的数字签名来进行解锁,从而可以花费这笔费用。 我们以一个例子来说明。A 向 B 支付一笔 P2PKH 的费用,其交易输出的格式如下: 上述锁定脚本的解锁脚本的格式如下: 在验证的时候执行如下的操作:
这段脚本的具体含义可以参考这个链接,它用图示的方式很清楚的作出了解答。 P2SH(Pay to Script Hash)P2SH 相比于 P2PKH 它支持了多重签名,这就让 P2SH 的支付逻辑更加的丰富,因为 P2PKH 是只能支持一个公钥匹配一个签名。 从多重签名开始所谓多重签名其含义非常简单,有时候我们会在电影里看到这样的一个场景,有一个金库,金库的所有者有好三个人,为了使三个人形成相互的掣肘,三个人都不能单独打开这个金库,只有当三个人中的至少两个人在场时才能打开这个金库。在这个 2-of-3 的关系中,就是一个多重签名的逻辑。 所谓多重签名,即当存在 n 的公钥的时候,需要有 m 个签名与之匹配(n>m)。 因此上面的脚本要被解锁,其格式应该如下, P2SH可以看到前面的多重签名丰富了解锁脚本的场景,原来的 P2PKH 只能是一对一的场景,而多重签名支持将交易支付给一个 n-of-m 下的验证情景。 但是多重签名也有一个问题,请看下面, 于是 P2SH 地址出现了,它的作用很简单,就是将那个很长的公钥的部分进行 hash 加密,得到的脚本称为赎回脚本(redeem script),之所以称为赎回脚本是因为这个脚本不是锁定脚本的部分(锁定脚本是在上一个交易的输出部分,赎回脚本是在下一个交易的输入部分)。 我们以《精通比特币》中的例子为例,来构造一个 P2SH 地址 而其得到的结果如下, 总结一下吧,可以看到 P2SH 地址好处主要是两点,一个是更低的交易费,同时用户的公钥并没有被暴露出来(虽然公钥是可以被别人获取的,但是如无必要也不要随意散播你的公钥)。但 P2SH 不无缺点,那就是因为 P2SH 的地址总是以 3 开头,很容易在透明的区块链网络上被人知晓你这是一个支付给脚本的哈希。这就带来了安全性的问题,因为区块链交易网络中,最好的方式就是不要在任何时候暴露你的地址,因为通常每次使用不同的地址交易才符合安全性。 隔离见证见证一次在比特币的语境中表示能够作为输入的解锁条件,验证 UTXO 的输出。其中数字签名就是一种“见证”,但是“见证”本身的范围更加宽泛,只要是能够证明你能使用这笔费用的方式都可以作为见证。见证说白了就是证明你可以使用这笔数据。 在隔离见证之前,交易的见证数据都是跟在每一个输入的交易脚本之中的,比如前面提到的用于验证的数字签名。而隔离见证将将用于解锁的字段单例出来,不和交易数据本身混在一起。为什么这么做呢? 我们知道比特币网络中,其实要解决的本质的问题无非就是不可能三角:去中心化,安全和性能(每一次升级只能最多满足其中的两点),隔离见证也是解决其中关于安全(匿名性)和性能的问题。不管是隔离见证的升级还是最近的 taproot 升级,其本质就是解决两个问题,一是让地址更加的匿名,无法从地址区分哪个是脚本支付,哪个是公钥支付。而是让交易数据尽可能的小,以便减少交易费。 所以回到刚才的问题,每一笔比特币的交易最核心的应该是交易本身的数据,而任何用于证明的数据,只是为了提供安全而附加上去的,把见证数据和交易本身分离开来,这是符合逻辑的,因为比特币的交易费是根据交易的数据的大小来确定的,而在把见证数据和交易数据隔离开之前,有时候见证数据(用于证明你可以使用这笔交易的证明)占了整个传输数据的 75%,这显示是主客颠倒的。 此外,隔离见证优化了签名算法的复杂度,将算法复杂度降低到常数级
P2WPKH(Pay-to-Witness-Public-Key-Hash)我们先来看看采用了隔离见证的 P2PKH(采用后称作 P2WPKH,W 就是 Witness,见证的意思)是怎么工作的。 同样这里借用《精通比特币》里面的数据,下面是原始的 P2PKH 接下来看看解锁的条件,在原始的 P2PKH 中,解锁脚本是这样的,
交易输入中包含了鲍勃的签名,用于验证确实这笔钱只有鲍勃能用。 而对于隔离见证的 P2PKH,输入脚本(解锁脚本)如下所示,
可以看到, 对于隔离见证的 P2SH 来说,效果和上面类似,这里就不再赘述了。 隔离见证的问题首先隔离见证在一定程度上并没有解决面临的安全问题,它只不过是补了一个坑而开启了一个新坑,因为从地址上观察,依旧可以轻易看出隔离见证的地址和普通地址长度的区别,同时地址开头的字母也“出卖了”地址的类别。 其次,隔离见证是软分叉,这导致很多社区成员并不赞同,甚至强烈反对隔离见证,他们认为隔离见证违背了中本聪的初心,于是最终导致了 btc 分裂出一部分为 bch。 参考《精通比特币》 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 23:03:07- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |