主页 > 华为安装不了imtoken > 【区块链】数字签名在比特币系统中的作用

【区块链】数字签名在比特币系统中的作用

华为安装不了imtoken 2023-09-25 05:07:37

在日常生活中,在文件的签名上写上自己的名字,或者盖章,或者按指纹来证明这些文件的真实性。

在计算机网络中,一个文件通过网络传输后,很难保证其内容与原文件相同。 有没有办法保证文件的真实性和完整性? 是的,使用数字签名来解决。

维基百科将数字签名定义为:

数字签名(也称为公钥数字签名,英文:Digital Signature)是一种类似于普通的纸上物理签名的方法,但它是利用公钥加密领域的技术实现的,以识别数字信息。

简单来说,数字签名类似于在纸质文件的背面签名,不是附加发送者的姓名,而是使用非对称加密算法和哈希算法生成一串签名信息。 前面章节提到,如果想深入了解非对称加密算法和哈希算法,请参考《浅谈对称加密和非对称加密》和《哈希算法在比特币体系中有什么用?》 “

整个数字签名流程如下(图1):

比特币私钥推算公钥_比特币 私钥丢失_比特币私钥验证

比特币 私钥丢失_比特币私钥验证_比特币私钥推算公钥

图1

使用散列函数(hash function)从数据中生成散列值,称为摘要。

发送方使用私钥对哈希值进行加密,生成数字签名(Signature)。 (注意:私钥是保密的,只有发送者才能拥有。公钥是公开的,任何人都可以获得。)

在数据末尾附加数字签名,发送带有数字签名的数据。

接收器接收数字签名的数据。 去掉数字签名,用公钥解密,得到数据的哈希值。

接收方对原始数据使用哈希函数(hash function)得到一个哈希值。

比特币私钥验证_比特币 私钥丢失_比特币私钥推算公钥

判断两个哈希值是否相等。 如果一致,则证明数据没有被篡改。 否则,数据被认为已被篡改。

数字签名的主要作用:接收方验证发送方发送的数据或文件是否完整,在传输过程中是否被篡改。 接收方可以信任发送方发送的数据和文件,同时发送方也不能否认发送的内容。

在比特币网络中,每个节点对收到的交易进行验证,即确认交易发起者是否拥有交易的比特币所有权。 使用什么方法来验证交易是否有效?

电子签名

如果您了解比特币验证数字签名的过程比特币私钥验证,您首先需要了解比特币交易。 一笔比特币交易由交易输入和交易输出组成。 如下图(图二),请在btc.com区块浏览器查看详情。

比特币私钥推算公钥_比特币 私钥丢失_比特币私钥验证

比特币私钥推算公钥_比特币 私钥丢失_比特币私钥验证

图 2

在比特币系统中,既没有账户也没有余额,只有UTXO(Unspent Transaction Outputs,未使用的交易输出)分散到区块链中。 每笔交易的输入实际上是指上一笔交易的输出。 如下图(图3)所示:

比特币私钥推算公钥_比特币 私钥丢失_比特币私钥验证

图 3

交易输出包含一个锁定脚本,其中通常包含一个公钥或比特币地址(公钥哈希)。 交易输入包含解锁脚本,这是证明比特币所有权的数字签名和公钥。

在脚本验证之前连接解锁脚本和锁定脚本。

比特币私钥推算公钥_比特币私钥验证_比特币 私钥丢失

比特币私钥推算公钥_比特币 私钥丢失_比特币私钥验证

图 3

比特币交易脚本语言,一种基于逆波兰表示法的堆栈式执行语言。 只有栈顶才能出栈,决定是先进后出。 下面两张图展示了数据入栈的顺序和验证交易有效性的过程。

比特币私钥推算公钥_比特币 私钥丢失_比特币私钥验证

比特币私钥推算公钥_比特币 私钥丢失_比特币私钥验证

sig:数字签名

比特币私钥推算公钥_比特币 私钥丢失_比特币私钥验证

PubK:公钥

PubKHash:公钥哈希(比特币地址),使用 RIPEMD160 (SHA(256))

在比较两个PubKHash是否相等时,目的是比较上一笔交易的交易输出地址是否等于当前交易的交易输入地址。 如果不相等,则验证失败,无法继续验证。

在最后一步,CHECKSIG 验证数字签名。 使用ECDSA算法验证签名:

布尔 ecdsa_verify_signature(字节 [] 消息,字节 [] 签名,字节 [] 公钥)

以上对各个参数的说明比特币私钥验证,message:对原始交易数据使用哈希函数计算得到的哈希值。 签名:数字签名。 pubkey:公钥。 根据图1所示的数字签名流程,需要使用公钥对签名进行解密,得到摘要。 摘要等于消息,交易被认为是合法的。

数字签名还可以解决双花问题。 UTXO 永久记录在区块链上。 当满足 UTXO 条件时,UTXO 将被标记为“已使用”。 满足UTXO条件意味着解锁脚本成功满足锁定脚本的设置条件,即使用上述验证交易的合法性流程进行验证。 验证后的 UTXO 将从 UTXO 集合中移除。

这篇文章比较烧脑,涉及的概念也比较多。 先解释一下数字签名的过程。 比特币交易由输入交易和输出交易、解锁脚本和锁定脚本组成。 如果您看不懂本文,请记住数字签名的作用:它可以验证发送信息的完整性,以及在传输过程中是否被篡改。 接收方可以信任发送方发送信息,同时发送方不能否认发送的信息。