虾说区块链-48-《精通比特币》笔记三

一直在说区块链是一系列技术结合后的新的技术架构,那么这里分别介绍下这些相关技术,也涉及到一些扩展开去的相关内容。

区块链-《精通比特币》笔记三:

电子书阅读《精通比特币》第二版地址:

http://book.8btc.com/books/6/masterbitcoin2cn/_book/ch06.html

bitcoin脚本语言基于堆栈的语言:使用堆栈数据结构。

堆栈:一种数据结构,允许push、pop,push在堆栈顶添加一个项目,pop在堆栈顶删除一个项目,堆栈操作对象为堆栈最顶端的项目,理解为后进先出(last-in-first-out)。

脚本语言执行顺序:从左至右执行每个项目。操作码(operators)从堆栈中推送或者弹出一个项目,处理后,将结果推送到堆栈上。

条件操作码:conditional operators对一个条件进行评估,产生一个boolean结果。

脚本操作:op_add一个简单的加法操作,数字相加后结果推送到堆栈,op_equal验算操作结果。在验证bitcoin资金所有权的时候,验证解锁脚本和锁定脚本之间的bool值。举例:3 op_add 5 op_equal 那么2是一个正确答案,2 3 op_add 5 op_equal.脚本验证比例中子要复杂。

解锁脚本和锁定脚本的执行:现在bitcoin版本中,堆栈先执行解锁脚本,执行正常复制主堆栈,再执行锁定脚本,解锁脚本中执行的数据复制到堆栈中执行锁定脚本,结果生产一个bool值,满足条件则执行完成。理解交易上,对一个UTXO的有效授权。

P2PKH:pay-to-public-key-hash,在bitcoin网络中交易花费是P2PKH脚本锁定的输出,输入包括一个锁定脚本、将输入锁定为一个hash值,理解为bitcoin的地址,那么P2PKH脚本锁定的输出可以提供一个公钥和其对应私钥创建的数字签名来解锁。

解锁脚本和锁定脚本匹配:在交易中,执行组合验证脚本后bool值为true,说明公钥hash值和私钥匹配。

数字签名:bitcoin中使用ECDSA算法,bitcoin中数字签名三种用法:其阿明证明私钥资金所有者,授权证明不可否认,签名证明交易(保证不能被任何人修改)。

数字签名的工作模式:数字签名本质上是一种数学方案:一部分使用私钥在交易创建时创建签名,另一部分允许任何人来验证签名算法、公钥、给定的消息。数字签名通过ECDSA算法来实现,((Sig=F(F(m),dA))).dA签名私钥、m交易、F~hash~散列函数、F-sig~签名算法、Sig结果签名。

F~sig~:Sig=(R,S)通过计算R.S值,称为序列号的字节流。

签名序列化:DER:序列化格式包含9个元素:DER序列的开始、序列的长度、一个整数值、整数长度、R值、接下来的一个整数、整数的长度、S值、后缀值。

签名验证:验证一个签名必须要有签名的R,S值、序列化交易、公钥。理解为:只有生成改公钥的私钥所有者,才允许在交易上产生该签名。

签名hash类型:SIGHASH,在bitcoin中签名意味找承诺,sighash附加到签名的单个字节,每一个签名都有一个sighash标志。三个sighash标志:all、none、single。Sighash标志在签名和验证期间是在建立交易的副本和删除其中的某些字段,然后交易序列化,sighash标志添加到序列化交易的结尾,结果再hash,得到签名消息。交易的不同部分被删除,得到的hash值取决数据的不同子集,在hash前,sighash作为最为一部分,签名对其也进行签署,故无法更改。

ECDSA:签名算法想生成一对临时私钥公钥,涉及签名私钥和交易hash变换后,临时密钥用于计算R、S值。S=k-1(Hash(m)+dA*R)mod p。k临时私钥、R临时公钥x坐标、dA签名私钥、m交易数据、p椭圆曲线顺序。验证是签名生成函数的倒数,使用R\S值和公钥来计算一个P:P=s-1*Hash(m)G+s-1*R*Qa。R/S签名值、Qa公钥、m签署的交易数据、G椭圆曲线发生器点。计算点P的坐标等于R,则签名有效。(椭圆曲线算法可参考区块链解读-椭圆曲线算法)

多重签名:n个公钥记录在脚本中、并且需要至少m个提供签名才能解锁资金,称为m-n方案,n是密钥总数,m是验证所需签名的数量。锁定脚本格式:M

N CHECKMULTISIG,举例: 2

3 CHECKMULTISIG。

P2SH:pay-to-script-hash简化复杂脚本的交易。脚本中一班包含长公钥,最终交易脚本会比最初交易脚本长达数倍。简化监本,一笔交易支付UTXO,解锁支付脚本,必须含有和hash相匹配的脚本,P2SH向该hash匹配脚本支付,但输出支付时,脚本在后续呈现。锁定脚本由hash运算后20字节的散列值取代,叫赎回脚本。

P2SH地址:基于Base58编码含有20字节的hash的脚本。

P2SH优点:交易输出过程中,有简短电子指纹取代,交易代码变短。脚本编译为地址,支付指令的发出者和只负责的bitcoin钱包简化执行P2SH。P2SH将构建脚本重担转移给接收方。P2SH将长脚本数据存储的负担重输出方转移至输入方。P2SH将长脚本数据存储重担从支付时转移至未来。P2SH将长脚本的交易成本从发送方转移到接收方,接收方在使用该资金时候必须有赎回脚本。

本文由币乎社区(bihu.com)内容支持计划赞助。

之前写了点东西,随着对区块链的理解,发现有些理解的并不透彻,重新整理。如有理解不正确的地方,请及时指正,同时有兴趣一块交流的可以加笔者微信:

本文来自企鹅号 - 投河自尽的虾媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

51NOD 1185 威佐夫游戏 V2(威佐夫博弈)

1185 威佐夫游戏 V2 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 有2堆石子。A B两个人轮流拿,A先拿。每次可以从一...

3636
来自专栏ml

ijg库解码超大型jpeg图片

1. ijg库解码超大型jpeg图片(>100M)的时候,如何避免内存溢出。        采用边解码边压缩的策略,每次解码一行或者若干行图片数据,然后对于这些...

4048
来自专栏有趣的django

Django+Bootstrap+Mysql 搭建个人博客(一)

1.7K0
来自专栏小樱的经验随笔

简易版DES加密和解密详解

在DES密码里,是如何进行加密和解密的呢?这里采用DES的简易版来进行说明。 二进制数据的变换 由于不仅仅是DES密码,在其它的现代密码中也应用了二进制数据,所...

3606
来自专栏FreeBuf

如何“爆破检测”加密密码字段和存在验证码的Web系统

*本文原创作者:shystartree,本文属FreeBuf原创奖励计划,未经许可禁止转载

3032
来自专栏利炳根的专栏

学习笔记CB011:lucene搜索引擎库、IKAnalyzer中文切词工具、检索服务、word2vec

影视剧字幕聊天语料库特点,把影视剧说话内容一句一句以回车换行罗列三千多万条中国话,相邻第二句很可能是第一句最好回答。一个问句有很多种回答,可以根据相关程度以及历...

5088
来自专栏向治洪

Android 增量更新和升级

在年初的时候,尝试了一把热修复技术,当时选择的是阿里的andfix,使用起来也很简单,这里就不在多少,如果你对andfix有兴趣请链接:点击打开链接。虽然网上将...

6129
来自专栏叔叔的博客

遇到的java随机数引起的阻塞问题

最后通过使用jstack -[pid],发现 sun.security.provider.SecureRandom 这里锁住了,原来这是java产生随机数造成了...

964
来自专栏Golang语言社区

【golang】调优工具 pprof

Golang 提供了 pprof 包(runtime/pprof)用于输出运行时的 profiling 数据,这些数据可以被 pprof 工具(或者 go to...

1493
来自专栏高爽的专栏

登录之验证码

       产生验证码,MakeCertPic.java: public class MakeCertPic { // 验证码图片中可以出现的字符集,可...

2790

扫码关注云+社区

领取腾讯云代金券