公钥密码学
概览
一般来说,我们生成一个非对称秘钥对,就可以用其中一个加密,然后用另外一个解密。但是不能只用其中一个进行加密和解密,那样的话就变成对称加密了。
公钥和私钥主要是用途上有区别,公钥是分发出去的,而私钥是只留给自己持有,这样就能做好两个关键的事情:
- 公钥加密,私钥解密,是为了做加密传输或者数据完整性验证(确保数据没有被篡改)
- 私钥加密,公钥解密,是为了做认证,因为消息只有我(持有私钥)才能加密
主要应用
- 数字签名:
- 使用发送方的私钥对消息进行签名,接收方可以使用发送方的公钥验证签名的真实性和完整性。
- 对称密钥分发:
- 用公钥加密生成的对称密钥,只有私钥持有者能解密获取该对称密钥。
- 用于安全地交换对称密钥。
- 加密密钥的加密:
- 使用接收方的公钥加密敏感的密钥信息,只有接收方使用其私钥可以解密。
关键应用场景
- 公钥的安全分发(The secure distribution of public keys)
- 利用公钥加密分发对称密钥(The use of public-key encryption to distribute secret keys)
- 利用公钥加密生成临时密钥进行消息加密(The use of public-key encryption to create temporary keys for message encryption)
效率和安全性
- RSA:尽管功能全面,但其效率较低(尤其是密钥生成和大数据加密)。它通常用于小数据量的加密(如密钥加密)。
- 椭圆曲线:在提供相同安全性前提下,密钥长度更短,效率更高,逐渐取代RSA。
- Diffie-Hellman:简单高效,适合快速协商对称密钥,但缺少签名或加密功能。
数字签名
仅保证数据不被篡改,但数据是公开的
公钥证书(数字证书)
- 用户的软件(客户端)生成一对密钥:一个公钥和一个私钥。
- 客户端准备一个未签名的证书,其中包含用户 ID 和用户的公钥。
- 用户通过某种安全方式将未签名的证书提供给证书颁发机构(CA)。这可能需要面对面的会面、使用注册电子邮件,或者通过带有电子邮件验证的网页表单进行提交。
- CA 创建签名的步骤如下:
- CA 使用哈希函数计算未签名证书的哈希值。
- CA 使用 CA 的私钥和签名生成算法生成数字签名。
- CA 将数字签名附加到未签名的证书上,从而创建一个已签名的证书。
- CA 将已签名的证书返回给客户端。
- 客户端可以将已签名的证书提供给任何其他用户。
- 任何用户可以通过以下步骤验证证书的有效性:
- 用户计算证书的哈希值(不包括签名部分)。
- 用户使用 CA 的公钥和签名验证算法验证数字签名。算法返回的结果将是“签名有效”或“签名无效”。
使用公钥加密进行对称密钥交换
- 发送方生成对称密钥:
- 发送方(例如 Alice)生成一个随机的对称密钥(例如用于 AES 加密),该密钥将用于加密实际数据。
- 加密对称密钥:
- Alice 使用接收方(例如 Bob)的公钥加密对称密钥。
- 这样可以确保只有 Bob(拥有对应的私钥)能够解密该密钥。
- 发送加密的对称密钥:
- Alice 将加密后的对称密钥通过不安全的通信信道发送给 Bob。
- 接收方解密对称密钥:
- Bob 接收到加密的对称密钥后,使用他的私钥对其解密。
- 至此,Bob 获得了与 Alice 相同的对称密钥。
- 使用对称密钥进行通信:
- Alice 和 Bob 使用共享的对称密钥,通过对称加密算法(例如 AES)加密和解密数据,实现高效的通信。
- 对称加密在处理大量数据时,比公钥加密更高效。
GPG加密邮件的流程
- 首先要导入对方的公钥,同理对方也持有你的公钥并信任
- 用自己的私钥签名正文,并用对方的公钥加密
- 对方收到邮件后,用自己的私钥解密,并验证你的签名(对方也持有你的公钥)