H.235建议中,重点推荐使用Diffie-Hellman密钥交换方案,它是由W.Diffie和M.Hellman于1976年提出的算法,可用于网络环境下用户双方安全地交换一个密钥,时至今日该算法仍然是最为有效和安全的密钥交换算法。Diffie-Hellman算法描述如下:
设P是一个大素数,a∈Zp是有限循环群的生成元,即p和a互质,p和a公开,所有用户均可获取,并将为所有用户所共用。
- 用户A随机选取一个大数rA,0≤rA≤p-2:并计算SA=a^rA(mod P),然后将结果SA,a,p传送给用户B。
- 用户B随机选取一个大数rB,0≤rB≤p-2:并计算SB=a^rB(mod p),然后将结果SB传送给用户A。
- 用户A计算:K=SB^rA(mod P):用户B计算:K=SA^rB(mod P)。因为有K=SB^rA(mod P)=(a^rB(mod P))^rA(mod P)=a^rArB(mod P)=SA^rB(mod P)=K,所以,得到用户A和用户B通信双方共同的会话密钥K,以进行加/解密保障安全通信。
rA和rB是不容易被破解的。
Diffie-Hellman算法在H.235建议中被作为一个重要算法被反复提及,许多安全框架的构造都用到了它。Diffie-Hellman密钥交换算法存在的缺点是容易遭受中间人攻击,因为上述过程没有身份验证。
H.235的密钥管理如下:
- 密钥的产生:密钥一般是由主控方(MCU)产生并进行分配的,集中式多点会议中主控方为MCU。
- 密钥的分发:如果逻辑媒体通道是由主控方打开的,密钥的分发可通过在OpenLogicalChannel消息中dataTypefield字段设置来实现的;如果打开媒体通道的终端不是主控方(MCU),那么密钥的分发可通过在OpenLogicalChannelAck消息的encryptionSyncfield字段中设置来实现的。这一部分的安全是通过将H.245信道用作私用信道或通过交换证书对密钥材料实施特定保护来实现的。
- 密钥的更新:当系统已使用很长时间,怀疑某个逻辑信道已泄密的情况下,任何终端均可通过EncryptionUpdateRequest命令请求使用新的密钥。接收加密更新请求消息后,主控方会发送加密更新消息EncryptionUpdate,该消息中包含了新的H.235密钥。接收该消息后,逻辑信道上请求密钥更新的终端应尽早采用新的密钥。对其他终端公钥证书的获取通过ConferenceRequest和ConferenceResponse两个消息进行交互。发送端采用新的密码和算法后,要通过RTP对头部相关标识位的重新设置来通知接收端。