密码学签名是区块链的关键技术之一,可以在不暴露私钥的前提下证明地址的所有权。该技术主要用来签署交易(当然也可以用来签署其他任意消息)。本文会讲解数字签名技术在以太坊协议中的用法。 免责声明:密码学很难。请不要将本文的任何内容作为参考,来实现您自己的密码学函数。虽然我们已经进行了广泛的研究,但是文本所提供的信息可能仍有不准确之处。本文仅用作教育用途。 什么是密码学签名? 当我们讨论密码学中的签名时,我们其实是在讨论所有权、有效性和完整性证明。举例来说,这些签名可以用来:
密码学签名是基于数学公式的。我们拥有一个输入消息、一个私钥和一个(通常情况下是秘密的)随机数,就可以得到一串数字作为输出值,也就是签名。使用另一个数学公式可以进行反向计算,在不知道私钥和随机数的情况下进行验证(译者注:即验证该签名是否出自跟某个公钥对应的私钥)。这类算法有很多,如 RSA 和 AES,但是以太坊(和比特币)采用的都是椭圆曲线数字签名算法(ECDSA)。请注意,ECDSA 只是签名算法。与 RSA 和 AES 不同,这种算法不能用于加密。 - 椭圆曲线的例子之一。以太坊采用的是 SECP256k1 曲线。 - 通过椭圆曲线点乘算法(elliptic curve point manipulation),我们可以使用私钥计算出一个不可逆向计算的值(译者注:即 “公钥”,公钥无法逆向计算出私钥)。这样一来,我们就可以创建出安全且不可篡改的签名。能够生成不可逆向计算的值的函数叫做 “陷门函数(trapdoor function)”: 陷门函数指的是在一个方向上易于计算,但是在缺少特殊信息(即,陷门)的情况下很难反向计算的函数。 使用 ECDSA 签名并验证 ECDSA 签名由两个数字(整数)组成:r 和 s。以太坊还引入了额外的变量 v(恢复标识符)。签名可以表示成 {r, s, v}。 在创建签名时,你要先准备好一条待签署的消息,和用来签署该消息的私钥(d?)。简化后的签名流程如下: (责任编辑:admin) |