公钥体系(PKI)等密码学技术基础

公钥体系(Public Key Infrastructure, PKI)的一些概念

对称密码算法, 典型算法:DES, AES

  1. 加解密方共用一个密钥
  2. 加/解密速度快,但密钥在网络上分发比较困难,因为密钥在分发过程中可能被别人获取

哈希或散列函数(Hash), 典型算法 SHA, MD5

  1. 如果两个散列值是不相同的,那么这两个散列值的原始输入
    也是不相同的
  2. 用于信息压缩,并发现信息是否发生变化
  3. 计算速度快,特定算法其结果长度统一
  4. 目前至少使用SHA256

非对称密码算法(公钥体系),典型算法:RSA, ECC

  1. 加解密时,通讯一方有一对密钥(公钥和私钥)
  2. 公钥可以公开,分发给任何人
  3. 私钥不可以公开,严格持有
  4. 公钥加密,只能用私钥解密,私钥加密, 只能用公钥解密
  5. 加/解密速度较慢,但无密钥分发问题

公钥体系与对称密钥相结合的加密方式

  1. 公钥体系通常运算性能低,做大量数据加解密力不从心
  2. 通常利用公钥体系实现对称密钥的安全交换

下面看一下利用公钥体系实现对称密钥的安全交换,如下图:

通常利用公钥体系实现对称密钥的安全交换

A 要把原文传给 B

  1. A 把原文用密钥加密(对称加密)
  2. A 用 B 的公钥把密钥加密。最后得到了密文(加密后的原文, 加密后的密钥)
  3. 密文传到 B, B 用 B 的私钥解密传过来的加密密钥,得到密钥
  4. B 用密钥解密加密的原文,得到原文

通过利用公钥体系实现对称密钥的安全交换,既避免了用非对称加密原文的性能低下缺点,又避免了对称加密不能在网络上安全分发的缺点,简而言之,充分利用了对称加密和非对称加密的优点,避免了它们的缺点。

基于公钥体系的签名和验签机制

数字签名的目的:检测数据未经授权的修改,签名者的身份识别和抗抵赖。

我们通过下图解释这个过程:

基于公钥体系的签名和验签机制

  1. A 把原文用散列算法进行 Hash 运算,得到的结果称为摘要
  2. A 用 A 的私钥加密摘要信息,得到的结果称为数字签名
  3. A 把原文并附带 A 的数字签名一起发送给 B
  4. B 用 A 的公钥对发送过来的数字签名解密得到原文摘要
  5. B 对发送过来的原文用同样的散列算法进行 Hash 运算,得到新摘要
  6. B 比对原文摘要与这个新摘要
  7. 如果相同则证明(1)原文没有被篡改; (2)信息是 A 发送的

通过以上的步骤就完成了签名与验签的过程。后面的数字证书体系也是以此为核心。

一些问题
  1. 为什么要用 Hash 对原文进行运算生成摘要呢?
      1. 缩小存储或传输的数据量
      2. 减轻公钥体系加解密性能低下的问题
  1. 第 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 需要数字证书

  1. 服务器 example.com 将从 CA(例如 Digicert) 请求证书;
  2. Digicert 将为 example.com 创建数字证书,数字证书将包含必要的数据,例如服务器名称,服务器的公钥等;
  3. Digicert 将创建数据(数字证书)的哈希值,并使用自己的私钥对其进行加密(即生成了 Digicert(CA) 的数字签名);
  4. 浏览器和操作系统自带 Digicert 等权威机构的公钥;
  5. 当浏览器收到数字签名和数字证书时,它将使用公钥从数字签名解密生成哈希值,它还将使用数字证书中指定的散列算法生成数据(数字证书)的哈希值,如果两个哈希值匹配,则签名验证成功并且证书是可信的。

参考链接:
http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
https://xz.aliyun.com/t/2530

版权声明:本文为flythinking原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/flythinking/p/12540565.html