首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

你知道如何验证一笔交易中的比特币所有权吗?

在上篇文章【一起入门区块链三】一文带你看懂去中心化的比特币交易中我们初步了解了去中心化的比特币的交易过程,简单回顾一下:以Alice向Bob支付10个BTC为例,首先需要交易的用户把交易传到网络中,也就是说Alice在向Bob支付10个BTC后需要把这笔交易全网传播,当这笔交易在比特币网络中传播开来后,这个时候矿工们开始通过比拼算力的方法挖矿来竞争记账权利,直到第一个矿工胜出然后把交易打包再次全网广播,那么其他收到消息的记账包的节点会对其进行验证,验证通过后加入自己的区块。

那这里有个问题,各个节点如何验证Alice想Bob发送的这笔交易是有效的呢?如何确保Alice在发生这笔交易的时候拥有这10个BTC的所有权?同样,如何确保接收方一定是Bob并且在这笔交易之后把BTC所有权归为Bob呢?

这时候我们就需要知道,比特币协议规定,在支付比特币时,比特币的当前所有者需要在交易中提交其公钥和签名(每次交易的签名都不同,但均从同一个私钥生成)。比特币网络中的所有人都可以通过所提交的公钥和签名进行验证,并且确认交易是否有效,即确认支付者在该时刻对所交易的比特币拥有所有权。

也就是说,比特币的所有权通过数字密钥、比特币地址和数字签名来确立的。每个比特币交易都需要一个有效的签名才会最终被存储在区块链。

事实上,也只有有效的数字密钥才能产生有效的数字签名。这里要说明,数字密钥并不是存储在网络中,而是存储在钱包中完全独立于比特币协议。而密钥是成对出现的,由一个私钥和一个公钥所组成。公钥就像银行的账号,而私钥就像控制账户的PIN码或支票的签名。

这里出现了区块链话题中经常听到的词汇——公钥和私钥。

公钥⽤于接收⽐特币,⽽私钥⽤于⽐特币⽀付时的交易签名。

公钥和私钥之间的数学关系,使得私钥可⽤于⽣成特定消息的签名。此签名可以在不泄露私钥的同时对公钥进⾏验证。

简单来说,就是公钥是公开的,可以在网络中被任何人所看到,用来加密/验章,而私钥是自己的,必须非常小心保存,用来解密/签章。

还是以Alice向Bob支付10BTC为例,Alice为了证明这个比特币是自己发送的,只需要使用私钥对文件进行签名然后广播交易,Bob或者网络上的其他节点在收到广播后用Alice的公钥对文件进行签名验证,如果验证成功,就证明该笔交易的比特币一定是来自于Alice。

那同样,如何判断该笔交易的比特币就一定是发送给Bob并最终归Bob所有呢,很简单,Alice在发起这笔交易的时候用Bob的公钥对信息进行加密,因为只有Bob的私钥才能解开其公钥加密后的信息,于是也就证明了这笔交易中的BTC确实是发送给Bob的,那么之后Bob就可以自由使用这笔交易中的比特币。

这个就是密码学中的非对称加密,简单来说,就是由公钥加密,必须由私钥进行解密,反之,如果由私钥加密,那么就必须使用公钥才能解密。

刚才提到,数字秘钥是存储在钱包当中的,一个比特币钱包中包含一系列的密钥对,每个密钥对包括一个私钥和一个公钥。私钥(k)是一个数字,通常是随机选出的。有了私钥,我们就可以使用椭圆曲线乘法这个单向加密函数产生一个公钥(K)。有了公钥(K),我们就可以使用一个单向加密哈希函数生成比特币地址(A),如图:

注意,这里由私钥生成公钥,再由公钥生成比特币地址都是单向的,反之无法获取,这样就保证了比特币的安全性。

接下来我们简单了解一下私钥、公钥、地址的相关原理知识。

私钥:

是一个随机选出的数字,以256位二进制数或者64位十六进制数显示,私钥用于生成支付比特币所必需的签名以证明资金的所有权,所以私钥必须妥善保管,一旦丢失就相当于丢失了该私钥保护下的比特币。

公钥:

通过椭圆曲线算法可以从私钥计算得到公钥,这是不可逆转的过程: K = k * G 。其中 k 是私钥, G 是被称为⽣成点的常数点,⽽ K 是所得公钥。其反向运算,被称为“寻找离散对数”——已知公钥 K 来求出私钥 k ——是⾮常困难的,就像去试验所有可能的 k 值,即暴⼒搜索。

地址:

比特币地址是一个由数字和字母组成的字符串,可以与任何想给你比特币的人分享。比特币地址与公钥不同。比特币地址是由公钥(一个同样由数字和字母组成的字符串)经过单向的哈希函数生成的,以数字“1”开头。

我们只需要知道:哈希算法是⼀种单向函数,接收任意⻓度的输⼊产⽣指纹摘要。

如果把比特币交易比作一张支票,比特币地址就是收款人,也就是我们要写入收款人一栏的内容。

OK,以上就是比特币所有权的确定问题,你懂了吗?

感谢您的阅读,欢迎你的关注,希望我们一起深耕,一起收获!

娜美岁月

区块链学习

程序媛

待产宝妈

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180506G164ZO00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券