维护一个动态可访问的公钥目录可以获得更大程度的安全性,某可信的实体或者组织负责公开目录的维护和分配,如图所示
- 管理员通过位每一个通信方建立一个目录项来维护
- 每个通信方通过目录管理员来注册一个公钥
- 通信方在任何时候可以用新的密钥替代当前密钥
- 通信方可以访问该目录,为了实现这一目标,必须有从管理员到通信方的安全的认证通信
这些方法比个人公开发布公钥要安全,但是如果攻击者得到了管理员的密钥,就可以假冒任何通信方,窃取发送给通信方的消息。攻击者可以通过修改目录管理员保存的记录。
公钥授权
通过更加严格的控制目录中的公钥分配,可使公钥分配更加安全。一个典型的公钥分配方案如图所示
前面四个交互不会很频繁,A和B可以存储彼此的公钥(暂时存储),但用户需要周期性的请求当前公钥信息来确保通信中的公钥是当前的公钥。
公钥证书
上图描述的公钥方案有缺陷,用户与其他用户通信,就要向目录管理员申请对方公钥,公钥管理员成为系统的瓶颈。
通信双方可以使用证书来交换密钥而不是通过公钥管理员,这种方案与直接从公钥管理员处获取密钥的可靠性相同,证书包含公钥和公钥拥有者的标志,整个数据块由可信的第三方进行签名,第三方为证书管理员(政府等)。一个用户以安全的方式将公钥交给管理员,从而获得证书,接着公开证书。这种方案应该满足:
- 任何通信方可以读取证书并确定证书拥有者的姓名和公钥
- 任何通信方可以验证证书出自证书管理员,而不是伪造
- 只有证书管理员可以生成并更新证书
- 任何通信方可以验证证书的时效性
证书的使用方法如图所示
通信方向证书管理员提供一个公钥并申请证书,管理员提供证书
接收方使用证书管理员的公钥解密证书,只有证书管理员的公钥财迷解密,可以验证证书来自证书管理员。
实例:X.509认证服务
ITU-T建议书中的X.509是X.500系列中定义目录服务的一部分,目录是一个服务器或者管理用户信息的分布式的服务器集合。X.509是关于证书结构和认证协议的一种重要标准,并广泛应用,它基于公钥密码体制和数字签名服务。
一个公钥证书的生成过程如图所示
X.509的核心是与每个用户相关的公钥证书,这些证书由一些可信的签证几个(CA)创建并被CA或者用户放入目录服务器中。目录服务器本身不创建公钥和证书,仅为用户获得证书提供一个简单的存取方式。
CA生成的用户证书的特点:
- 任何可以访问CA公钥的用户都可以获得证书中的用户公钥
- 只有CA可以修改证书
由于证书不可伪造,因此证书可以存放在目录中,不需要对目录进行保护。但是每个用户都需要一个CA的公钥用于验证签名,该公钥必须以绝对安全的方式提供给每个用户。
证书的常用格式:
每个证书都有一个有效期,证书撤销的原因有:
- 用户私钥被认为是不安全的
- 用户不再信任CA
- CA证书被认为是不安全的
每个CA必须保留一张表,其中包含所有被CA撤销且未到期的证书,包括发给用户和其他CA的证书。每个放在目录中的证书撤销表(CRL)均被发行者签名,并包含发行者的名字、表创建时间、下一张表发放时间以及每个撤销证书的入口。当一个用户在一个消息中接收一个证书时,必须确定该证书的是否已经被撤销。
简单看一下公钥基础设施(PKI)系统的结构图(PKIX):由硬件、软件、人、策略和程序构成的一整套体系,包括用户注册、初始化、认证、密钥对的恢复、密钥对更新、证书撤销请求和交叉认证等一系列事务处理。