文章目录
概要
数字签名是Bitcoin的基本加密构建块,用于验证交易的有效性。当用户向Bitcoin主网提交交易时,数字签名用于满足以下三个关键功能:
- 真实性:数字签名验证用户的身份和交易中包含的资金来源,以确保只有相应私钥的所有者才能授权使用相关资金。
- 完整性:数字签名是根据交易数据生成的,因此对交易数据的任何更改交易数据在签名之后将失效。
- 不可否认性:数字签名一旦生成,并与交易一起记录在区块链上,将成为永久的、不可改变的记录,确保发起者事后无法否认交易。
Schnorr聚合签名
Bitcoin采用Schnorr签名算法对交易信息进行签名以防止信息在传输过程中遭到攻击者的恶意篡改。Schnorr签名的数学特性具有相对于ECDSA的显著优势:线性性。该特性允许Schnorr签名将多个签名聚合为一个签名,在开发加密协议时提供了显著的效率和灵活性优势。Schnorr签名聚合算法中使用的参数如下:
n
n
n: 参与聚合的参与者数量。
s
k
i
sk_i
ski: 参与者的私钥,每个私钥从椭圆曲线secp256k1定义的有限域中随机选择。
P
i
P_i
Pi: 参与者的公钥,计算方式为
P
i
=
s
k
i
∗
G
P_i\ =\ sk_i\ \ast\ G
Pi = ski ∗ G,其中$$G是生成点。
P
c
P_c
Pc: Schnorr聚合公钥,是各个公钥
P
i
P_i
Pi 的总和。
s
i
s_i
si : 每个参与者使用其私钥计算的个人签名。
S
S
S: 聚合签名,是各个签名分量
s
i
s_i
si 的总和。
Schnorr签名聚合算法由三个算法组件组成:
这三个算法组件分别在算法1-3中进行了详细说明。