虽然公钥密码体制中使用的公钥可以公开,但必须保证公钥的真实性。公钥的发布一般有以下几种方法。
1.公开发布
用户A将自己的公钥分发给其他用户,这种方法没有认证性,如果某个用户以A的名义将自己的公钥向其他用户发送或广播,则在A发现假冒者以前,这一假冒者可解密所有发给A的加密消息。
2.公钥目录表
由可信的实体或组织负责可访问的动态公钥目录表的建立、维护以及公钥的发布。目录管理员为每个用户在目录表里建立包括用户名和用户的公开密钥两数据项。每个用户在管理员处以某安全的认证通信为自己的公开密钥注册,用户可以随时替换自己的密钥,管理员定期公布或定期更新目录。其他用户可以通过公开的途径访问该公钥目录来获取公钥。
这种方法比个人公开发布公钥要安全,但它也存在缺点:一是一旦攻击者窃取了管理员的秘密钥,他就可以修改公钥目录表,传递伪造的公钥;二是用户必须知道这个公钥目录表的位置且信任该目录。
3.公钥管理机构(在线服务器方式)
每个用户都清楚管理机构的公钥,私钥仅有管理机构自己知道。步骤如下:
(1)A发送一条带有时间戳的消息给公钥目录管理员,以请求B的公钥。
(2)管理员M给A发送一条用其私钥SKM签名的包括B的公钥PKB在内的消息,A用管理员公钥PKM解密得到B的公钥PKB。
(3)A用B的公钥加密IDA‖N1发送给B表示请求和B通信,B用其私钥SKB解密成功,就同意通信,然后B以同样的方法从管理员处检索到A的公钥。
该方案安全性很高,但也有缺点:只要用户与其他用户通信,就必须向公钥管理机构申请对方的公钥,故公钥分发服务器必须在线,这导致公钥分发器可能成为性能的瓶颈。
4.公钥证书(离线服务器方式)
为解决公钥管理机构瓶颈的问题,可以通过公钥证书来实现。即使用公钥证书来进行公钥分配,这样就不要求求与公钥管理机构直接通信。公钥证书由认证机构CA为用户颁发。这样,用户能安全地获得其他用户的公钥的前提是只要得到CA的公钥。
由于只有CA的公钥才能解读证书,接收方如果使用CA的公钥解密成功,就能确信证书是由CA颁发的,同时表明证书中的内容没有被篡改过,由于证书将A的身份标识和A的公钥绑定在一起,因此接收方可确信PKA就是用户A的公钥。时间戳T主要用来表明证书没有过期,防止攻击者重放旧证书。