公钥体系(PKI)等密码学技术基础
公钥体系(PKI)等密码学技术基础
公钥体系(Public Key Infrastructure, PKI)的一些概念
对称密码算法, 典型算法:DES, AES
- 加解密方共用一个密钥
- 加/解密速度快,但密钥在网络上分发比较困难,因为密钥在分发过程中可能被别人获取
哈希或散列函数(Hash), 典型算法 SHA, MD5
- 如果两个散列值是不相同的,那么这两个散列值的原始输入
也是不相同的 - 用于信息压缩,并发现信息是否发生变化
- 计算速度快,特定算法其结果长度统一
- 目前至少使用SHA256
非对称密码算法(公钥体系),典型算法:RSA, ECC
- 加解密时,通讯一方有一对密钥(公钥和私钥)
- 公钥可以公开,分发给任何人
- 私钥不可以公开,严格持有
- 公钥加密,只能用私钥解密,私钥加密, 只能用公钥解密
- 加/解密速度较慢,但无密钥分发问题
公钥体系与对称密钥相结合的加密方式
- 公钥体系通常运算性能低,做大量数据加解密力不从心
- 通常利用公钥体系实现对称密钥的安全交换
下面看一下利用公钥体系实现对称密钥的安全交换,如下图:
A 要把原文传给 B
- A 把原文用密钥加密(对称加密)
- A 用 B 的公钥把密钥加密。最后得到了密文(加密后的原文, 加密后的密钥)
- 密文传到 B, B 用 B 的私钥解密传过来的加密密钥,得到密钥
- B 用密钥解密加密的原文,得到原文
通过利用公钥体系实现对称密钥的安全交换,既避免了用非对称加密原文的性能低下缺点,又避免了对称加密不能在网络上安全分发的缺点,简而言之,充分利用了对称加密和非对称加密的优点,避免了它们的缺点。
基于公钥体系的签名和验签机制
数字签名的目的:检测数据未经授权的修改,签名者的身份识别和抗抵赖。
我们通过下图解释这个过程:
- A 把原文用散列算法进行 Hash 运算,得到的结果称为摘要
- A 用 A 的私钥加密摘要信息,得到的结果称为数字签名
- A 把原文并附带 A 的数字签名一起发送给 B
- B 用 A 的公钥对发送过来的数字签名解密得到原文摘要
- B 对发送过来的原文用同样的散列算法进行 Hash 运算,得到新摘要
- B 比对原文摘要与这个新摘要
- 如果相同则证明(1)原文没有被篡改; (2)信息是 A 发送的
通过以上的步骤就完成了签名与验签的过程。后面的数字证书体系也是以此为核心。
一些问题
- 为什么要用 Hash 对原文进行运算生成摘要呢?
1. 缩小存储或传输的数据量
2. 减轻公钥体系加解密性能低下的问题
- 第 7 步的解释
1. 如果发送的信息没有篡改,那么 也只有使用A的公钥才可以通过 相应的验签
2. 此验签过程,若通过,则表示信息一定是“公钥 A”的持有者制作
数字证书(Certificate) 和 CA(认证中心,数字证书发证系统)
前面我们了解了基于公钥体系的签名和验签机制,但还有一个问题,A 与 B 发送信息前是要把 A 的公钥发送给 B 的,想像一下,如果 A 与 B 的通信过程中被攻击者 C 截取了,然后 C 用自己的公钥冒充 A 的公钥发送给 B。并且在后续通信中 C 修改了原文,然后用自己的私钥生成自己的签名,冒充 A 的身份给 B 发送信息,而 A, B 对此全然不知,这是非常危险的。那么如何解决这个问题呢?这就用到数字证书和 CA。什么是数字证书与 CA ?想想现实世界中我们向别人证明自己的身份是用身份证,而这个身份证是政府机关颁发的,网络世界也类似,数字证书就相当于身份证,CA 相当于权威的政府机关。
数字证书(Digital Certificate),又叫“数字身份证”、“网络身份证”,是由认证中心发放并经认证中心数字签名的,包含公开密钥拥有者以及公开密钥相关信息的一种电子文件,可以用来证明数字证书持有者的真实身份。
数字证书采用公钥体制:
- 数字证书是”公钥+证书名称信息+签发机构对证书的数字签名”、匹配的私钥
- 数字证书遵从X.509国际标准
如果“ A 有数字身份”,则:
A 有自己的一对公钥和私钥;
数字身份的发证机关(CA),证明了这个公钥对应的持有人是 A。
我们来看个例子:
假设服务器 https://example.com 需要数字证书
- 服务器 example.com 将从 CA(例如 Digicert) 请求证书;
- Digicert 将为 example.com 创建数字证书,数字证书将包含必要的数据,例如服务器名称,服务器的公钥等;
- Digicert 将创建数据(数字证书)的哈希值,并使用自己的私钥对其进行加密(即生成了 Digicert(CA) 的数字签名);
- 浏览器和操作系统自带 Digicert 等权威机构的公钥;
- 当浏览器收到数字签名和数字证书时,它将使用公钥从数字签名解密生成哈希值,它还将使用数字证书中指定的散列算法生成数据(数字证书)的哈希值,如果两个哈希值匹配,则签名验证成功并且证书是可信的。
参考链接:
http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
https://xz.aliyun.com/t/2530