美文网首页
区块链基础原理:如何证明你的钱是你的?

区块链基础原理:如何证明你的钱是你的?

作者: 傅越驰Ameeya | 来源:发表于2018-08-20 20:38 被阅读56次

什么是不对称加密?

在不对称加密的方法里面,我有两串互相对应的字符(数字),一者为私钥,一者为公钥。

1.私钥只有你自己知道,从来不进行网络传输;公钥要预先发给和你联络的人。

2.拿着私钥通过一定的数学方法可以计算出公钥。通过公钥无法计算出来私钥。

3.A将信息通过私钥加密后发给B,B通过手中的公钥就可以解密成明文。这意味着除非拿到A手中的私钥,否则没有人可以假冒A向B发送信息。

4.B将信息通过公钥加密后发给A,A通过手中的私钥就可以解密成明文。这意味着除非拿到A手中的私钥,否则没有人可以偷看到B向A发送的信息。

比特币种使用的ECC椭圆曲线加密算法,就是这样的一种不对称加密算法。

一个比特币区块里除了区块头之外,包含了多个交易记录。

一条交易记录被称为一个UXTO(未花费余额)。比特币没有一般意义上的账户和余额的概念。

一个实际的使用者可以只拥有一个钱包地址,也可以拥有成千上万个钱包地址(使用程序批量生产的话这不是什么难事)。区块中没有一个位置直接显示某个钱包地址的所有存款。你只能在区块链中找到许多打款到你的钱包地址的UXTO,并对它们求和以获得你的存款余额。

一条交易记录包含了输入和输出两部分。输入部分有一条或多条输入,描述的是这笔交易的资金来源,包含多个UXTO,也就是过去的多条交易记录(这些交易记录的输出部分未曾被使用过);输出部分有一条或多条输出,描述这笔交易的资金去向,也就是流入哪些钱包地址,各流入了多少。

一条输入中值得我们关心的有这么几部分:

1.UXTO序号;2.数字签名;3.钱包公钥。

对于钱,我们最关心的就是我的钱别人不能拿去用。在比特币系统里,打到我的钱包地址上的UXTO必须只能够我来解锁,别人不能够使用,不然就完全乱了套。这一点是通过私钥和数字签名来确保的。在这个输入里头,我们注意到1和3都是公开的。(UXTO在区块链上可以查到,钱包公钥也会显示出来),只有建立一套机制,在这个机制里头你可以生成无法伪造的数字签名,这个时候才能够确保你的钱是你的,不会被其他人撬走。

比特币一条输入的数字签名是这样生成的:

[if !supportLists]1.      [endif]对该输入除了数字签名之外的所有信息写入一个串字符。

[if !supportLists]2.      [endif]对该串字符进行两次SHA256哈希运算得到一串新的字符。

[if !supportLists]3.      [endif]根据你提供的私钥,对这串新的字符进行一次椭圆曲线加密,获得一串最终的字符,作为数字签名。

用计算机语言可以这么写

Sig = ECDSASig ( SHA256 ( SHA256 ( Transaction-scriptSig

) ) , Private Key )

Sig=最终生成的签名

ECDSASig=椭圆曲线加密算法

SHA256=SHA256哈希运算

Transaction-scriptSig=除了数字签名以外这个输入的其他信息

Private Key=付款钱包对应的私钥

这个数字签名上传到比特币的节点,节点的应用程序会根据你在这个输入中提供的公钥解码这一条信息(得到经过两次SHA256运算后的……这条输入除签名外的其余部分信息)。只要把这条输入除签名外的其余部分进行两次SHA256运算,并验证是否一致,就可以确定这个数字签名是否是真的(使用正确的私钥生成的)。

这样就保证了,除非夺走你的私钥,否则你的钱包地址上的钱没有任何人可以动用。由于比特币和其他区块链货币的可靠性建立在这套非对称加密体系在人类的历史时间之内无法被破解的条件下,因此区块链上的货币被称为【加密货币】。(根据公钥推导私钥只能用穷举法,计算时间比宇宙破灭的时间更长)

参考内容

精通比特币·第五章   http://t.cn/R97AMci

比特币背后的密码学原理    http://t.cn/RB3Zkbs

比特币与密码学之数字签名    http://t.cn/R08tfQe

百度百科:非对称加密算法    http://t.cn/RB3wL3H

相关文章

网友评论

      本文标题:区块链基础原理:如何证明你的钱是你的?

      本文链接:https://www.haomeiwen.com/subject/fthriftx.html