1、数字签名
数字签名的核心目标是验证信息的完整性(Integrity)、认证发送方身份(Authentication)和不可否认性(Non-Repudiation)。它并不为了加密信息内容本身。
其基本原理是:发送方用只有自己才有的私钥对信息的“摘要”进行加密,生成签名;接收方用发送方公开的公钥解密这个签名,得到摘要A,再对接收到的信息计算得出摘要B,最后对比摘要A和摘要B是否一致。
整个流程可以分为两大步:发送方签名 和 接收方验签。
第一步:发送方签名流程
假设发送方是 Alice,要发送一份重要合同给 Bob,并需要签名。
-
原始信息(Message)
- Alice 拥有她想要发送的原始信息 M(例如:"我同意以100万元购买此设备。Alice")。
-
哈希运算(Hash Function)
- Alice 的电脑使用一个公开的密码学哈希函数(如 SHA-256)对原始信息 M 进行计算。
- 生成一个固定长度、唯一的“信息摘要”(Digest),也称为哈希值(Hash Value)。
- 特点:任何对信息 M 的微小改动,都会产生一个完全不同的摘要。这是一个不可逆的过程。
-
签名生成(Signing with Private Key)
- Alice 的电脑使用她自己的私钥(Private Key) 对这个信息摘要进行加密。
- 加密后的摘要,就是所谓的数字签名(Digital Signature)。
- 关键点:私钥是绝对保密且只有 Alice 自己拥有的。因此,能用Alice公钥解开的签名,必定是由Alice的私钥生成的。
-
发送(Transmission)
- Alice 将 原始信息 M 和 数字签名 一起发送给 Bob。
- 注意:原始信息 M 本身可以是明文的,也可以是加密的。数字签名不关心信息内容是否保密,只关心身份和完整性。如果需要保密,则需要再用Bob的公钥对“信息+签名”整体进行加密,这是另一个流程(数字信封)。
第二步:接收方验签流程
Bob 收到了来自 Alice 的信息和签名。
-
接收信息
- Bob 收到了两份东西:原始信息 M' 和 数字签名。(这里用 M' 表示Bob收到的信息,因为它可能在传输中被篡改过)
-
解密签名(Decrypting the Signature with Public Key)
- Bob 使用 Alice 公钥(Public Key) 解密收到的数字签名。
- 如果解密成功,就能得到一个摘要A。
- 意义:能成功用Alice的公钥解密,证明这个签名最初一定是用Alice的私钥加密的。这就完成了身份认证。
-
计算信息摘要(Recomputing the Hash)
- 同时,Bob 使用与 Alice 相同的哈希函数(如 SHA-256),对他收到的原始信息 M' 进行计算,生成一个新的摘要B。
-
对比验证(Comparison)
- Bob 将第 2 步解密得到的 摘要A 与第 3 步计算出的 摘要B 进行比对。
- 若相等,说明信息传输过程没有篡改,是由Alice发出,Alice 事后无法否。
- 若不想等,说明信息在传输中被篡改,或者这个签名根本不是用Alice的私钥生成的。
流程总结图
[发送方:Alice]
原始信息 M --> [哈希函数] --> 信息摘要 --> [用Alice的私钥加密] --> 数字签名
|
↓
将 [M] 和 [签名] 一起发送
[接收方:Bob]
收到 [M'] 和 [签名] --> 两条路径:
|
|--> [用Alice的公钥解密签名] --> 得到摘要A
|
|--> [对M'进行哈希计算] --> 得到摘要B
|
↓
[对比摘要A和摘要B] --> 相同则验证成功,不同则失败
简单来说:
- 数字签名是一种技术,用于验证数据的完整性和签名者的身份。
- 数字证书是一种数字文件,它像一本护照,用来安全地绑定一个公钥和其所有者的身份,而这个绑定关系本身又由一个受信任的第三方(CA)进行了数字签名。
2、数字证书
数字证书,也称为公钥证书或身份证书,其核心作用是解决公钥的信任问题。
回想一下数字签名流程:接收方(Bob)需要用发送方(Alice)的公钥来验证签名。但这里存在一个关键问题:Bob 如何确信他拿到的公钥真的属于 Alice,而不是一个冒充者提供的?
数字证书就是为了回答这个问题而诞生的。
数字证书可以理解为一本由官方认证机构颁发的“数字护照”,它包含以下关键信息:
- 证书所有者的身份信息:如姓名、组织、电子邮件地址等。
- 证书所有者的公钥:这是证书最核心的内容之一。
- 证书颁发者(CA)的信息:是哪个机构颁发的这个证书。
- 有效期:证书的生效日期和过期日期。
- 数字签名:由证书颁发机构(CA)对上述所有信息进行哈希并用CA的私钥加密后生成的签名。这是整个证书可信的根源。
证书颁发机构(CA) 是一个受信任的第三方组织,它的核心职责就是核实实体(个人、网站、公司)的身份,然后为其签发数字证书。操作系统和浏览器都预装了大量受信任的根CA的证书(包含它们的公钥)。
3、数字签名 与 数字证书 的关联
两者的关系可以概括为:数字证书利用数字签名技术来建立其自身的可信度,从而为数字签名流程中的公钥分发提供信任基础。
这是一个层层嵌套的信任链:
-
CA使用数字签名来签署证书
- CA在颁发证书给Alice时,会将Alice的身份信息和她的公钥等数据打包,并计算哈希值。
- CA然后用它自己的私钥对这个哈希值进行加密,生成一个数字签名,并将这个签名附加到证书文件中。
- 现在,Alice拥有了一个包含她公钥和CA签名的数字证书。
-
用户使用数字签名来验证证书
- 当Bob收到Alice的数字证书时,他需要验证这个证书是否可信。
- Bob的电脑(浏览器/操作系统)里预存了受信任的根CA的公钥。
- Bob的电脑会:
- 用CA的公钥去解密证书中的CA签名,得到摘要A。
- 对证书中Alice的身份信息、公钥等数据重新计算哈希,得到摘要B。
- 对比摘要A和摘要B。如果匹配,则证明:
- 这个证书的内容是完整的,未被篡改。
- 这个证书确实是由那个受信任的CA颁发的。
- 至此,Bob就可以信任这本“数字护照”,进而信任里面包含的Alice的公钥。
-
使用可信的公钥进行数字签名验证
- 现在Bob确信了证书里的公钥属于Alice,他就可以用这个公钥去验证Alice发送来的信息的数字签名了。
总结与类比
| 特性 | 数字签名 | 数字证书 |
|---|---|---|
| 是什么 | 一种技术和流程 | 一种数字文件和凭证 |
| 目的 | 验证数据/信息的完整性、身份和不可否认性 | 验证公钥所属者的真实身份,建立公钥信任 |
| 核心操作 | 用发送方私钥加密信息的摘要 | 用CA私钥加密证书内容的摘要 |
| 验证方式 | 用发送方公钥解密签名并对比摘要 | 用CA公钥解密签名并对比摘要 |
| 依赖关系 | 依赖数字证书来安全地获取可信的公钥 | 依赖数字签名技术来保证自身内容的可信度 |
一个简单的比喻:
- 数字签名 就像一个人在合同上的亲笔签名。
- 数字证书 就像这个人的护照,由官方机构(CA)签发。护照上包含了他的照片(身份)、签名样本(公钥),并且护照本身有官方的防伪印章(CA的数字签名)。
- 验证过程:你首先检查他的护照(数字证书)是不是真的(用官方印章的样本来核对防伪印章),确保证件本身是真的。确认后,你相信护照里的信息(包括签名样本)是真实的。最后,你拿出护照里的签名样本(公钥)去核对合同上的亲笔签名(数字签名)是否一致。
所以,数字证书是数字签名能够大规模安全应用的基础设施。没有数字证书,公钥分发环节就存在巨大风险,数字签名的身份认证功能也就无从谈起。