对称密钥分发
使用的是KDC(密钥分发中心)
过程如下:
有一个第三方密钥分配中心KDC,所有需要通过对称密钥进行通信的用户,都需要在KDC上注册一个只有自己和KDC知道的对称密钥,我们称为主密钥(可以用物理方式传递),主密钥持有时间较长,但也需要不断更换
- A想和B发起通信,A使用自己和KDC间的密钥对下列信息加密后传给KDC
- A的身份信息,一般为IP地址等
- B的身份信息,一般为IP地址等
- 一个临时随机串,用作该次传输的唯一标识,防止重放攻击
KDC用与A的密钥解密信息,获取到通信双方信息后,生成用于A、B间通信的会话密钥Ks,构造信息串E(KA(Ks,IDA,IDB,N1,E(KB(Ks,IDA))))
返回给AA接收到信息后,利用自己和KDC间的密钥KA解密完信息后,检查N1,发现是没问题的后,将消息中包含利用KB加密的信息串E(KB(Ks,IDA))传给B
B利用与KDC间的密钥KB解密获取到信息,可以用来判断是A想和我通信,没有出现消息发送方和通信方不一致的情况
为了进一步验证,没被重放攻击,B使用会话密钥Ks加密一个临时随机串N2发送给A
A接收到信息串,使用会话密钥解开,确认无误后,再发送给B验证消息,比如N2+1,这里需要发送给B不同于N2的消息,为啥呢?
了解一下重放攻击
重放攻击
盗取认证凭证后,重新发送给认证方,把以前窃听到的数据原封不动地重新发送给接收方,网络上传输的数据是加密过的,此时窃听者无法得到数据的准确意义。但如果他知道这些数据的作用,就可以在不知道数据内容的情况下通过再次发送这些数据达到愚弄接收端的目的
了解了重放攻击后,我们便可以推测发送不同随机串的目的了,假设此时B发送给A验证消息,A被允许回复相同的随机串,那么监听方也可以回复给B相同的随机串,所以不应该允许A回复相同的随机串,此时若再有人回复给B相同的随机串,证明,是有监听人在重放信息,如下图所示,C是监听者,因为消息被加密,所以C并不懂A、B之间发的是啥,只能单纯重放
上述方式是集中式的
还有一种分布式的方案
即没有集中式的KDC,每个终端用户都作为KDC,这就增加了用户和用户间的密钥对的数量,因为之前用户和KDC间都有密钥对,适用于对KDC安全性要求高的中小系统,过程如1下图所示:
Km为A与B间共享的主密钥
非对称密钥分发
非对称密钥分发其实仅涉及公钥的分发,私钥都是驻留在本地的
使用的是CA机制,如下图所示:
可能会有疑问的地方在于B在向CA注册自己的公钥时如何证明自己的身份,其实B可以将自己的公钥和身份信息用私钥进行签名,然后发给CA,CA用B给的公钥再进行解密进行验证即可。