在数学和密码学中,数字签名算法保证:

  1. 当数据从发送者传给接受者时,数据不会被篡改
  2. 数据被某个发送者创建
  3. 该发送者不能拒绝发送数据

通过签名算法对数据进行处理后得到一个签名,该签名用于后续验证数据使用。数字签名使用私钥签名,公钥验证。

数据签名需要以下信息:

  1. 要签名的数据
  2. 私钥

数据签名过程生成一个签名,签名存储于TXI中。为了校验签名,需要如下信息:

  1. 已经被签名的数据
  2. 签名信息
  3. 公钥

认证过程简而言之就是:核查用私钥加密数据后生成的签名,是否可以用来生成公钥。

数字签名并不是加密,因此无法从签名中重构或者说解密出原始数据。与hash类似:通过hash算法生成表示数据的唯一hash值。签名和哈希是密钥对:正因为有密钥对,使得签名认证成为可能。

但是,密钥对也可以用于加密数据:私钥加密,公钥解密。但是比特币中并不使用该特性。

在比特币中,交易的创建者会对每个交易进行签名。交易在放到block之前,需要对每个交易进行验证。验证意味着:

  1. 检查TXI是否有权限使用与之关联的TXO
  2. 检查该交易的签名是否正确

形象来说,数据签名和签名校验的过程如下:
让我们回顾一个交易的整个声明周期:

  1. 伊始,仅仅有genesis block,该block包含一个coinbase交易。Coinbase交易不包含真是的TXI,因此不需要签名。Coinbase交易中的TXO包含哈希后的公钥(使用RIPEMD16(SHA256(PubKey)算法)。
  2. 当有人消费时,新的交易被创建。该交易的TXI引用之前交易的TXO。每个TXI存储一个未哈希的公钥,和整个交易的签名。
  3. 比特币中收到此交易的其他节点将进行验证,将核查:TXI中公钥的hash值是否和其引用的TXO的公钥匹配(这保证发送者只能使用属于其拥有的货币);签名是否正确(这保证该交易是被一个真实的货币所有者创建的)。
  4. 当一个矿工准备好要挖一个新block时,该交易将放入到block中并开始挖矿。
  5. 当挖到一个新block后,网络中的其它节点会收到一个消息:该block被挖到了,同时将该block添加到blockchain中。
  6. 在block被添加到blockchain之后,交易完成,其TXO可以被新的交易所引用了。

results matching ""

    No results matching ""