密码学入门概念
现代密码学有三个代表事件:
1976年:由 Diffie 和 Hellman 在《 密码学的新方向》(《New Directions in Cryptography》)提出了公钥密码学体制的思想
1977年:美国国家标准局颁布数据加密标准 DES(Data Encryption Standard)
1978年:第一个公钥算法 RSA 算法(由 Ron Rivest、Adi Shamir 和 Leonard Adleman 的姓氏首字母组成)
# 公开密钥体系
目前,公钥密码领域具备实用性的三个怀疑难解问题为:质数分解 (opens new window)、离散对数 (opens new window) 和 椭圆曲线 (opens new window) 问题
基于大整数的因数分解可以生成一对公钥和私钥。
公钥和私钥是一一对应关系,一把私钥有着和它唯一对应的公钥,反之亦然。
用公钥加密的数据,只能用和它对应的私钥解密,用私钥加密也只能用与之对应的公钥解密。
密钥对的生成很快速,但根据公钥反推私钥是极其困难的事。
根据公开密钥密码体系,我们有了非对称加密。常见的非对称加密是 RSA 加密
如果用「公钥」对数据加密,用「私钥」去解密,这是「加密」
反之用「私钥」对数据加密,用「公钥」去解密,这是「签名」
# 消息摘要
# 定义
对一份数据,进行一个单向的 Hash 函数,生成一个固定长度的 Hash 值,这个值就是这份数据的摘要,也称为指纹
# 摘要算法
在线工具
目前常见的摘要算法有以下两大类
MD家族
MD2
MD5
SHA家族
SHA1
SHA256
SHA512
# 数字签名
使用非对称加密算法
公钥进行加密,私钥进行解密 ---> 「加密」
私钥进行加密,公钥进行解密 ---> 「签名」
# 数字签名算法
DSA 全称 Digital Signature Algorithm,该算法主要分为以下四步
密钥对生成:生成公钥和私钥
密钥分发:发布公钥
签名:使用私钥进行消息的签名(加密)
验证:使用公钥进行签名的验证(解密)
# 签名与验证过程
# 更高效的数字签名方案
摘要算法(SHA)+非对称加密算法(RSA)
签名:先用摘要算法计算明文数据的摘要值,再对这个摘要值用私钥加密,这样就能较快速地得到了原始信息的签名
验证:先用相同的摘要算法计算原始信息的摘要值,再用公钥对签名解密,得到收到的摘要值,最后对比这两个摘要值是否相等,如果不相等说明数据不可信
# 数字证书
这里就将前面所涉及到的技术点串联起来的
非对称加密
消息摘要
数字签名
根证书预先安装在操作系统内,并且我们认为根证书一定是正确的
# 基本概念
CA
全称为 Certificate Authority,翻译为证书授权中心,它是负责管理和签发证书的第三方机构,作用是检查证书持有者身份的合法性,并签发证书,以防证书被伪造或篡改。
就像是负责颁发身份证的公安局与负责发放行驶证、驾驶证的交通管理局一样,CA 负责颁发数字证书
数字证书
数字证书是 确保公钥不被篡改 的一种方案
它是一种信息的集合
证书信任链
# 数字证书内容
证书所有人的公钥
证书发行机构、证书有效期、证书所有者信息等证书相关信息
证书所用的签名算法
证书发行者对证书的数字签名
# 数字证书的生成流程
根证书生成步骤
权威机构(CA)利用 RSA 等算法,生成一对 公钥 PK1 和 私钥 SK1
将 公钥 PK1 和 证书发行机构、证书有效期、证书所有者等信息 组成一份原始的证书内容,设为 C1
利用某种摘要算法,计算原始内容 C1 的数字摘要,设为 H1,作为一种中间结果
用第一步生成的私钥 SK1,对摘要 H1 签名,得到签名内容 S1
将原始内容 C1 和 签名内容 S1 合在一起,就得到了证书(C1 + S1)
业务相关证书生成步骤
企业利用 RSA 等算法,生成一对公钥 PK2 和 私钥 SK2
将 公钥 PK2 和 证书发行机构、证书有效期、证书所有者等信息 组成一份原始的证书内容,设为 C2,给到权威机构
权威机构拿到 C2 后,利用摘要算法,生成摘要信息 H2,作为一种中间结果
权威机构用自己的 私钥 SK1 (这是关键点),对摘要信息 H2 签名,得到签名内容 S2
将原始内容 C2 和 签名内容 S2 合并到一起(C2 + S2),得到证书,交给企业
业务证书与根证书的区别
根据上述根证书与业务证书的申请流程可知,这两种证书申请流程在一些细节方面还是有一些区别的
业务申请的证书,在签名时使用的私钥是 CA 机构的私钥,而这个私钥是和根证书中的公钥对应的,又因为根证书早已预先内置到操作系统中,所以我们可以通过根证书的公钥来验证业务证书的正确性
# 数字证书的校验流程
用根证书的公钥,可以验证其他证书的签名是否正确。如果签名正确,则证书是可信的、没有被篡改的。后续就可以使用这个被信任证中中包含的公钥,去验证收到的消息是否可信了。
用 CA 证书去证明另外一个证书是否可信,我们可以称之为 证书的递归验证。类似地,我们也可以用一个受信任的证书,去验证其它证书是否可信。
# PKI
全称 Public Key Infrastructure,公开密钥基础设施,主要的构成元素有三个:证书、认证机关和证书库
# 组成
证书
类似于身份证
确定身份的信息集合,其中包含着用于加密的公开密钥
也就是上文中的数字证书
认证机关
类似于公安局
用于颁发证书的机构
也就是上文中的证书权威机构 CA
证书库
类似于档案库
用于存储证书的数据库