密码学学习 - 数字证书与 PKI
接上一篇杂凑函数,继续总结,这一篇主要是对数字签名、数字证书的介绍。主要是一些基本概念的介绍。
基本概念
数字签名
数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。通过非对称加密算法和 MD5、SHA256 等消息摘要算法对数据进行签名,用于表明身份以及防止篡改。
数字证书
数字证书是指在互联网通讯中标志通讯各方身份信息的一个数字认证,人们可以在网上用它来识别对方的身份。因此数字证书又称为数字标识。数字证书对网络用户在计算机网络交流中的信息和数据等以加密或解密的形式保证了信息和数据的完整性和安全性。数字证书是一种数字文档,其中包含公钥,有关与之关联的实体的一些信息以及来自证书颁发者的数字签名。
PKI
PKI(Public Key Infrastructure)是将公钥与实体(例如个人和组织)的各自身份绑定的一种安排。绑定是通过证书颁发机构(CA)处的证书注册和颁发过程来建立的。以下为 PKI 中的一些基本概念:
- 数字证书认证机构 CA: 负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
- 注册机构 RA: 注册机构(RA)RA 是 CA 的证书发放、管理的延伸。它负责证书申请者的信息录入、审核以及证书发放等工作;同时,对发放的证书完成相应的管理功能。发放的数字证书可以存放于 IC 卡、硬盘或软盘等介质中。RA 系统是整个 CA 中心得以正常运营不可缺少的一部分。在 RA 的下层还可以有多个业务受理点(RS)。
- 根证书: 属于根证书颁发机构(CA)的公钥证书,是在公开密钥基础建设中,信任链的起点
- 证书链: 一连串的数字证书,由根证书为起点,透过层层信任,使终端实体证书的持有者可以获得转授的信任,以证明身份。
- 自签名证书: 一个身份认证证书, 此证书由一个机构签发, 此机构的身份由其自身认证。
数字签名原理
数字签名一般使用了非对称加密算法和消息摘要算法结合来完成数据安全性的验证。由于数据在网络的传输途中有可能遭遇篡改,如何证明消息是发送方发给接收方,这是数字签名的主要作用之一。
发送方操作
发送方主要准备如下内容:
- 待发送的数据
- 使用某种消息摘要算法对待发送的数据进行运算获取的特定长度的消息摘要,可以理解为数字指纹,是对待发送数据的身份验证
- 准备一对非对称密钥:私钥必须发送方自行严格保管,这是安全的重中之重。公钥则可以公开的形式进行分享,需要注意的是这也是安全的原则之一,需要保证用户能够获取真正的公钥。
- 签名:使用私钥对数字指纹进行加密,加密后的指纹就是发送方的签名,使用公钥可以获取此数字指纹内容
- 然后,发送方就可以将数据和签名在网络上发送了
接收方操作
接收方从网络上获取传输的数据和签名,然后以安全的方式获取发送方的公钥。然后顺次做如下事情就可以确认数据是否被篡改了:
- 使用公钥对签名进行解密,获取数据的数字指纹
- 使用相同的摘要算法对数据进行运算,获取消息摘要
- 如果自行计算获取的消息摘要和通过使用公钥对签名解密获取的数字指纹一致,则能证明此内容未经其他人所篡改。
常见风险
即使使用上述操作,仍然有被其他人所篡改的风险,只要如下内容一旦攻破,所谓的安全也只是形同虚设。
- 接收方使用的公钥必须要和发送方进行严格确认,以保证此证书并非被别有居心的中间人所替换
- 发送者的私钥必须严格保护,绝对避免泄露,这是身份的标识。
比如一旦发送者的私钥被泄漏,中间人只需要以网络攻击的方式替换发给接收方的内容即可,基本可随意操作,因为拥有发送方私钥的他基本上就等同与发送方。
另外也可以从接收方下手,如果接收方使用的是中间人所替代的自己的公钥,辅以替换发给接收方的内容,使用自己的私钥和篡改的数据进行签名,自然一点问题都没有。
在实际的场景中,还是后一种的风险一般更大,所以从接收方而言,确认使用的证书的有效性和安全性非常重要,所以这也是 CA 机构存在的重要原因,而使用自签名证书的情况下,保证接收方使用的公钥的正确性则是实际使用中所需要注意的。
公钥基础设施 PKI
在密码学中,PKI 是一种机制,它将公钥与实体(如个人和组织)的各自身份绑定在一起。这种约束是通过在证书颁发机构登记和颁发证书的程序来确定的(CA)。
PKI/CA 架构
完整的 PKI/CA 系统如下部分:
- 安全服务器:安全服务器面向普通用户,用于提供证书申请、浏览、证书撤销列表、证书下载等安全服务;用户需要首先得到安全服务器的证书(该证书由 CA 颁发);
- 注册机构 RA:在 CA 体系结构中起承上启下的作用,一方面向 CA 转发安全服务器传输过来的证书申请请求,另一方面向 LDAP 服务器和安全服务器转发 CA 颁发的数字证书和证书撤销列表(CRL)。
- LDAP 服务器:Lightweight Directory Access Protocol(轻量目录访问协议),提供目录浏览服务,负责将注册机构服务器 RA 传输过来的用户信息以及数字证书加入到服务器上。用户通过访问 LDAP 服务器就能够得到其他用户的数字证书。
- CA 服务器:整个证书机构的核心,负责证书的签发。CA 首先产生自身的私钥和公钥,然后生成数字证书,并且将数字正常传输给安全服务器。CA 还负责为安全服务器、RA 服务器生成数字证书。
- 数据库服务器:CA 中的核心部分,用于 CA 中数据(如密钥和用户信息等)、日志、统计信息的存储和管理。
证书签发过程
- 用户申请:用户获取 CA 的数字证书(根证书),与安全服务器建立连接;生成自己的公钥和私钥,将公钥和自己的身份信息提交给安全服务器,安全服务器将用户的申请信息传送给 RA 服务器。
- RA 审核:RA 收到用户的申请,用户向 RA 证明自己的身份,RA 进行核对。如果 RA 同意用户申请证书的请求,则对证书申请信息做数字签名;否则拒绝用户的申请。
- CA 发行证书:RA 将用户申请和 RA 签名传输给 CA,CA 对 RA 数字签名做认证,如果验证通过,则同意用户请求,颁发证书,然后将证书输出。如果验证不通过,则拒绝证书申请。
- RA 转发证书:RA 从 CA 得到新的证书,首先将证书输出到 LDAP 服务器以提供目录浏览,再通知用户证书发行成功,告知证书序列号,到指定的网址去下载证书。
- 用户证书获取:用户使用证书序列号去指定网址下载自己的数字证书,只有持有与申请时提交的公钥配对的私钥才能下载成功。
证书域
- Version 版本:v1 只支持基本字段;v2 添加唯一标识符;v3 添加扩展
- Serial Number 序列号:非序列(不可预测),并包含至少 20 位熵,以防御选定的前缀攻击的证书签名。
- Signature Algorithm 签名算法
- Issuer 发行者
- Validity 有限期
- Subject 拥有者
- Public key 公钥
证书验证方法
- 域名验证(DV):基于对域名控制的证明。在大多数情况下,这意味着发送确认电子邮件到一个批准的电子邮件地址。证书颁发机构 CA 只需对申请者是否拥有域名所有权进行核实,审核流程简单,甚至有些 CA 会自动验证。DV 证书申请和下发的速度非常快,短则 10 分钟即可。基于对域的控制权证明。 在大多数情况下,这意味着向确认的电子邮件地址之一发送确认电子邮件。
- 组织验证(OV):要求身份和真实性验证。除了验证域名所有权外,还需要验证网站所有单位的真实身份,审核相对 DV 证书来说更严 格一些。企业或组织机构申请 OV 证书,需要提交相应的认证资料,由 CA 人工审核,一般 需要 5~7 天。需要身份和真实性验证。
- 扩展验证(EV):要求身份和真实性验证,但要求非常严格
证书撤销
当 PKI 中某实体的私钥被泄漏时,泄密私钥对应的公钥证书应被作废。或者如果证书中包含的证书持有者和某组织的关系已经中止,相应的公钥证书也应该被作废。
- 应尽快以电话或书面文件方式通知相应证书的签发 CA,在密钥泄漏的情况下,应由泄密私钥的持有者通知 CA
- 在关系中止的情况下,由原关系中组织方或相应的安全机构通知相应的 RA 或 CA
- 如果 RA 得到通知,RA 应通知相应的 CA
- 一旦请求得到认证,CA 在数据库中将该证书标记为已作废,并在下次发布 CRL 时加入该证书序列号及其作废时间
证书延期
每个扩展由唯一的对象标识符(OID)、临界度指示符和值组成。必须理解并成功处理标记为关键的扩展;否则必须拒绝整个证书。
基于身份的密码学(IBE)
基于身份标识的密码系统,是一种非对称的公钥密码体系。
对于传统的公钥密码体系,由于公钥是一串没有意义的随机数,所以为了确定公钥的拥有者,防止恶意用户欺骗加密者的行为,引入了一个可信第三方(有点类似于证书里面的 CA)。第三方维护一个大的表格,表格中存放各个用户的身份,以及其所对应的公钥信息。这种方法虽然很好的解决了公钥区分的问题,但是当用户数量过多,这个表格的维护就变得很困难。因此研究者提出,使用用户的身份作为公钥,从而研究出了基于身份的密码体系(IBE)。
如果我们用一个表格来描述的话,与一般的公钥体制相比,IBE 中各个参与方的能力具有一定的变化:
Public Key Encryption | Identity-Based Encryption | |
---|---|---|
私钥产生 | 接收者 | PKG |
公钥管理 | 可信第三方 | 无 |
IBE 相关概念
首先假设存在一个可信的密钥生成中心(trusted key generation center,KGG);用户选择他的名字(或者是,网络地址,所在街道地址门牌号,电话号码)作为公钥,相应的私钥由 KGG 计算出来分配给每个加入网络中的用户。IBE 有点类似于理想的邮件系统:如果你知道某个人的姓名和地址,你可以发给他只有他才能读的信,你可以认证他签的签名。
- Setup(k) —>PK,MSK:建立算法以安全参数 k 为输入,输出为公共参数 PK 和主密钥 MSK。该算法由 PKG 完成,公布公共参数 PK,保存主密钥 MSK。
- KeyGen(PK,MSK,ID)—>SK(ID):密钥提取算法以公共参数 PK,主密钥 MSK 和一个身份认证信息 ID 为输入,输出该身份信息对应的私钥 SK(ID)。该算法由 PKG 完成,并通过安全信道 SR(ID) 返回给对应用户。
- Encrypt(PK,M,SK(ID))—>CT:加密算法以公共参数 PK,明文消息 M,以及接受者的身份信息 ID 为输入,输出密文 CT。该算法由信息发送者(加密者)完成,并将密文通过公开信道发送给对应的接受者(解密者)
- Decrypt(PK,CT,SK(ID))—>M:解密算法以公共参数 PK,密文 CT,私钥 SK(ID) 为输入,在正确解密时输出明文 M,或在不能正确解密时返回符号 ⊥。该算法由接受者(解密者)完成。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论