想象一下,Alice 想给 Bob 发送一条加密的消息,并且Bob需要能证明这条消息确实来自Alice,且在传输途中没有被篡改。
一、核心角色(类比)
- 私钥 (Private Key):就像Alice的独一无二的印章。这个印章只有Alice自己拥有,她可以用它在任何文件上盖章。
- 公钥 (Public Key):就像Alice印章的官方验章器。Bob(以及任何人)都可以拿到这个验章器。它不能用来盖章,但可以用来检查一个章是不是Alice的那个独一无二的印章盖出来的。
- 消息 (Message):就是Alice要发送的那条交易信息,比如“我从地址A转1个BTC到地址B”。
二、签名过程 (Alice做的事)
Alice想要发送消息 “我从地址A转1个BTC到地址B”。
-
制作文件摘要:Alice不是直接对整条冗长的消息盖章,而是先让消息通过一个魔法碎纸机(哈希函数)。这个碎纸机会把任何长度的文件都粉碎成一串长度固定、且独一无二的“摘要”(就像指纹一样)。哪怕消息只改了一个标点符号,出来的摘要也会完全不同。
- 输入: “我从地址A转1个BTC到地址B”
- 输出(示例):
x12aF...8c3d
(这个就是哈希值)
-
用私钥盖章:Alice然后拿出她的私钥印章,在这个摘要 (
x12aF...8c3d
) 上盖了一个章。这个盖章的动作(签名算法)会产生一个独特的、基于这份摘要和她的私钥的签名。 -
发送:Alice把原始消息(“我从地址A转1个BTC到地址B”)和生成的签名一起发送给网络。她不需要发送她的私钥,也不需要发送摘要。
三、验证过程 (网络上的每个人做的事)
Bob和其他网络节点收到了Alice的消息和签名。他们需要验证这是真的。
-
使用相同的魔法碎纸机:Bob将收到的原始消息(“我从地址A转1个BTC到地址B”)放入同一个魔法碎纸机(哈希函数)。他自己计算出了一份摘要。我们称这个为
摘要_B
。- 输入: “我从地址A转1个BTC到地址B”
- 输出:
x12aF...8c3d
(如果消息没被改过,这个值应该和Alice当初计算的一样)
-
使用验章器:Bob现在拿出Alice公开的验章器(公钥)。他把这个验章器、收到的签名、以及他自己算出的摘要_B (
x12aF...8c3d
) 放在一起验证。 -
得出验证结果:
- 验证通过 (✅):如果验章器显示“匹配”,那就意味着:
a. 这条消息的摘要 (
摘要_B
) 确实和Alice当初签名时用的摘要一致 -> 消息未被篡改。 b. 这个签名确实是由Alice的私钥印章盖的 -> 身份真实有效。 - 验证失败 (❌):如果验章器显示“不匹配”,则说明要么消息被篡改了,要么签名是伪造的,整个交易会被网络拒绝。
- 验证通过 (✅):如果验章器显示“匹配”,那就意味着:
a. 这条消息的摘要 (
图示
sequenceDiagram
participant A as Alice
participant N as 网络/验证者(Bob等)
Note over A: 签名过程
A ->> A: 对原始消息进行哈希运算<br/>生成消息摘要
A ->> A: 使用私钥对摘要进行签名<br/>生成数字签名
A ->> N: 发送【原始消息 + 数字签名】
Note over N: 验证过程
N ->> N: 对收到的【原始消息】<br/>进行同样的哈希运算,<br/>得到【摘要_B】
N ->> N: 使用Alice的公钥<br/>对【数字签名】进行验证,<br/>并对比【摘要_B】
alt 验证成功
N -->> N: ✅ 验证通过<br/>消息完整且身份真实
else 验证失败
N -->> N: ❌ 验证失败<br/>消息被篡改或签名伪造
end
总结与关键点
步骤 | Alice(签名者) | 网络(验证者) |
---|---|---|
1. 哈希 | 用哈希函数处理原始消息,得到摘要。 | 用相同的哈希函数处理收到的原始消息,得到自己的摘要_B。 |
2. 加密/验证 | 用私钥对摘要进行“盖章”(签名),得到签名。 | 用Alice的公钥去验证收到的签名和摘要_B是否匹配。 |
3. 发送/接收 | 发送原始消息 + 签名。 | 接收并验证。根据结果接受或拒绝交易。 |
为什么这个过程安全?
- 私钥永不泄露:Alice的私钥(印章)从未被发送或暴露。签名只是证明她拥有私钥,而不透露私钥本身。
- 完整性:任何对消息的修改,哪怕只有一个字符,都会导致哈希值(摘要)彻底改变,从而使验证失败。
- 身份认证:只有私钥的持有者才能产生出能被对应公钥验证的签名。
- 不可否认:既然只有Alice能生成这个有效的签名,她就无法事后否认自己发过这条消息。
这就是数字签名的工作原理——它巧妙地利用了哈希函数的敏感性和非对称加密的身份绑定能力,共同构成了区块链信任的基石。
学习交流请添加vx: gh313061