Fast DDS Security--两方秘钥存在的问题
上篇中介绍了Fast DDS Security中秘钥交换算法--DH算法。但是DH算法在实际应用中却存在一个问题:算力浪费以及带宽浪费。
原因是:DH算法是一个两方秘钥算法,即每两个Participant之间必须协商一个秘钥。假设现在有一个Participant A 作为Publisher, 有三个Participant(分别为B C D)作为Subscriber。那么根据DH算法,A必须与B C D分别协商秘钥,记分SAB, SAC, SAD。 如下所示:
那么假设现在A正在发布某个Topic的数据,发给Subscriber B的数据将用SAB进行加密。因为DDS实际上是通过广播的方式发送,那么在网络上,Subscriber C以及Subscriber D也都将收到用SAB加密的数据(带宽浪费!)。但是对于Subscriber C以及Subscriber D来说,它们会尝试着去解密这个数据包,但是解密失败(算力浪费!)。同理,对于Publisher往Subscriber C, Subscriber D发送时,也各自会有两份数据的浪费。如下图所示(实线代表真正有用的数据包,虚线代表浪费的数据包):
那么,出于对算力的节约以及带宽的解决角度,期望的应该是所有Participant之间共享一个通信秘钥。秘钥只用协商一次,如下所示:
如果是这样,数据总共也只需要发3份,而不是9份,不存在带宽和算力的浪费。如下图所示:
那么具体应该如何实现呢?下一篇介绍。