密码学入门概念

7/13/2023 crypto

现代密码学有三个代表事件:

  1. 1976年:由 Diffie 和 Hellman 在《 密码学的新方向》(《New Directions in Cryptography》)提出了公钥密码学体制的思想

  2. 1977年:美国国家标准局颁布数据加密标准 DES(Data Encryption Standard)

  3. 1978年:第一个公钥算法 RSA 算法(由 Ron Rivest、Adi Shamir 和 Leonard Adleman 的姓氏首字母组成)

# 公开密钥体系

目前,公钥密码领域具备实用性的三个怀疑难解问题为:质数分解 (opens new window)离散对数 (opens new window)椭圆曲线 (opens new window) 问题

基于大整数的因数分解可以生成一对公钥和私钥。

公钥和私钥是一一对应关系,一把私钥有着和它唯一对应的公钥,反之亦然。

用公钥加密的数据,只能用和它对应的私钥解密,用私钥加密也只能用与之对应的公钥解密。

密钥对的生成很快速,但根据公钥反推私钥是极其困难的事。

根据公开密钥密码体系,我们有了非对称加密。常见的非对称加密是 RSA 加密

如果用「公钥」对数据加密,用「私钥」去解密,这是「加密」

反之用「私钥」对数据加密,用「公钥」去解密,这是「签名」

# 消息摘要

# 定义

对一份数据,进行一个单向的 Hash 函数,生成一个固定长度的 Hash 值,这个值就是这份数据的摘要,也称为指纹

# 摘要算法

在线工具

  1. MD2编码-在线免费MD2编码工具-即时工具 (opens new window)

  2. MD5编码-在线免费MD5编码工具-即时工具 (opens new window)

  3. SHA256编码-在线免费SHA256编码工具-即时工具 (opens new window)

  4. SHA512编码-在线免费SHA512编码工具-即时工具 (opens new window)

目前常见的摘要算法有以下两大类

  1. MD家族

    1. MD2

    2. MD5

  2. SHA家族

    1. SHA1

    2. SHA256

    3. SHA512

# 数字签名

使用非对称加密算法

  1. 公钥进行加密,私钥进行解密 ---> 「加密

  2. 私钥进行加密,公钥进行解密 ---> 「签名

# 数字签名算法

DSA 全称 Digital Signature Algorithm,该算法主要分为以下四步

  1. 密钥对生成:生成公钥和私钥

  2. 密钥分发:发布公钥

  3. 签名:使用私钥进行消息的签名(加密)

  4. 验证:使用公钥进行签名的验证(解密)

# 签名与验证过程

流程图-(1)

# 更高效的数字签名方案

  1. 摘要算法(SHA)+非对称加密算法(RSA)

    1. 签名:先用摘要算法计算明文数据的摘要值,再对这个摘要值用私钥加密,这样就能较快速地得到了原始信息的签名

    2. 验证:先用相同的摘要算法计算原始信息的摘要值,再用公钥对签名解密,得到收到的摘要值,最后对比这两个摘要值是否相等,如果不相等说明数据不可信

# 数字证书

这里就将前面所涉及到的技术点串联起来的

  1. 非对称加密

  2. 消息摘要

  3. 数字签名

根证书预先安装在操作系统内,并且我们认为根证书一定是正确的

# 基本概念

  1. CA

    全称为 Certificate Authority,翻译为证书授权中心,它是负责管理和签发证书的第三方机构,作用是检查证书持有者身份的合法性,并签发证书,以防证书被伪造或篡改。

    就像是负责颁发身份证的公安局与负责发放行驶证、驾驶证的交通管理局一样,CA 负责颁发数字证书

  2. 数字证书

    数字证书是 确保公钥不被篡改 的一种方案

    它是一种信息的集合

  3. 证书信任链

# 数字证书内容

  1. 证书所有人的公钥

  2. 证书发行机构、证书有效期、证书所有者信息等证书相关信息

  3. 证书所用的签名算法

  4. 证书发行者对证书的数字签名

# 数字证书的生成流程

  1. 根证书生成步骤

    1. 权威机构(CA)利用 RSA 等算法,生成一对 公钥 PK1 和 私钥 SK1

    2. 将 公钥 PK1 和 证书发行机构、证书有效期、证书所有者等信息 组成一份原始的证书内容,设为 C1

    3. 利用某种摘要算法,计算原始内容 C1 的数字摘要,设为 H1,作为一种中间结果

    4. 用第一步生成的私钥 SK1,对摘要 H1 签名,得到签名内容 S1

    5. 将原始内容 C1 和 签名内容 S1 合在一起,就得到了证书(C1 + S1)

  2. 业务相关证书生成步骤

    1. 企业利用 RSA 等算法,生成一对公钥 PK2 和 私钥 SK2

    2. 将 公钥 PK2 和 证书发行机构、证书有效期、证书所有者等信息 组成一份原始的证书内容,设为 C2,给到权威机构

    3. 权威机构拿到 C2 后,利用摘要算法,生成摘要信息 H2,作为一种中间结果

    4. 权威机构用自己的 私钥 SK1 (这是关键点),对摘要信息 H2 签名,得到签名内容 S2

    5. 将原始内容 C2 和 签名内容 S2 合并到一起(C2 + S2),得到证书,交给企业

  3. 业务证书与根证书的区别

    根据上述根证书与业务证书的申请流程可知,这两种证书申请流程在一些细节方面还是有一些区别的

    业务申请的证书,在签名时使用的私钥是 CA 机构的私钥,而这个私钥是和根证书中的公钥对应的,又因为根证书早已预先内置到操作系统中,所以我们可以通过根证书的公钥来验证业务证书的正确性

# 数字证书的校验流程

用根证书的公钥,可以验证其他证书的签名是否正确。如果签名正确,则证书是可信的、没有被篡改的。后续就可以使用这个被信任证中中包含的公钥,去验证收到的消息是否可信了。

用 CA 证书去证明另外一个证书是否可信,我们可以称之为 证书的递归验证。类似地,我们也可以用一个受信任的证书,去验证其它证书是否可信。

# PKI

全称 Public Key Infrastructure,公开密钥基础设施,主要的构成元素有三个:证书、认证机关和证书库

# 组成

  1. 证书

    1. 类似于身份证

    2. 确定身份的信息集合,其中包含着用于加密的公开密钥

    3. 也就是上文中的数字证书

  2. 认证机关

    1. 类似于公安局

    2. 用于颁发证书的机构

    3. 也就是上文中的证书权威机构 CA

  3. 证书库

    1. 类似于档案库

    2. 用于存储证书的数据库

# 参考资料

Last Updated: 7/14/2023, 4:58:23 PM