分布式系统中的信任机制解析
客户端与服务器通信的密钥生成与认证
在客户端与服务器的通信过程中,起初客户端并不能确保其实际通信的对象就是预期的服务器。双方最初交换的仅仅是生成的公钥,利用这些公钥可以计算出共享密钥 (SK_{DH_{C,S}} = g^{xy} \mod p)。
接下来,客户端和服务器各自计算如下哈希值:
[MAC = H([PK_{DH_{C}}, R_{C}, G, PK_{DH_{S}}, R_{S}])]
其中 (H) 是 SHA256 哈希函数。也就是说,(MAC) 是通过连接客户端问候消息和服务器问候消息得到的 256 位哈希值。然后,利用 (MAC) 和 (SK_{DH_{C,S}}) 生成最终的共享秘密会话密钥 (SK_{C,S}^ = f (MAC, SK_{DH_{C,S}})),这里的 (f) 是所谓的密钥派生函数。从此时起,客户端与服务器之间的通信就使用共享秘密密钥 (SK_{C,S}^ ) 进行加密,保证了通信的私密性。
随后,服务器进行自我认证。假设服务器能够提供一个包含由认证机构 (CA) 签名的公钥 (PK_{S}) 的证书。服务器使用 (SK_{C,S}^ ) 对与客户端的所有通信进行加密:
[Server\ sends\ SK_{C,S}^ ([PK_{S}, sig_{CA}])\ with\ sig_{CA} = SK_{CA}(PK_{S})]
此时,客户端就可以对服务器进行认证。运行在 TLS 之上的应用程序原则上可以完全依赖共享秘密密钥 (SK_{C,S}^ ) 来保证通信的私密性。不过,更好的做法是生成应用层协议可以使用的密钥
超级会员免费看
订阅专栏 解锁全文

431

被折叠的 条评论
为什么被折叠?



