在DDS系统中,我们在以数据为中心的发布-订阅模型中有一组发布者和订阅者。例如,让我们分析下图所示的系统,其中我们有以下节点:
因为AliceBob和Trent是合法的应用程序,所以它们应该能够按照设计的方式进行通信。而对于非法程序Eve和Trudy,他们是不能执行任何操作的。但是这里面的Mallory是系统内部人士,只有有限权限,那么他就不能做未经授权的操作。
未授权订阅者
未经授权的订阅(又称窃听)意味着能够在未经授权的情况下读取敏感数据。
首先以Eve为原型,解释未经授权的窃听者,说明Eve能够在未经授权的情况下读取到敏感数据。假设Eve是系统之外的一个节点,他本不应该出现,也不应该获取到系统中的任何数据,但是在一个不安全的网络中,Eve和Alice可以实现发布订阅。由于DDS和RTPS标准没有专门解决安全性问题,所以没有定义任何机制来验证Eve是否被授权订阅Topic-T。
窃听有时候并不会造成严重的后果,但是当Topic-T携带非常敏感的数据时,就必须对他进行保护,防止窃听。
未授权发布者
未经授权发布是指未经授权将数据发布到DDS系统中。
以Trudy为原型,一个可以发布Topic-T数据的发布节点。在一个不安全的场景中,Trudy和Bob会互相发现对方,然后Trudy会开始向Bob发送数据。因此Bob会收到Alice的数据,也会收到Trudy的数据,这样的系统存在很大的安全隐患。
截胡篡改
篡改包括在将数据发送给合法订阅者之前拦截和修改数据。
当系统中存在敏感信息时,Mallory可以截胡消息,并对其进行修改,然后再发不出去,由于Bob分不清消息的来源是否可靠,造成严重的问题。
当Mallory订阅系统中的主题Topic-T,那么他就可以将消息以高频率发不出去,造成Bob严重的资源消耗,甚至是宕机。
跨域攻击
如果监控服务加入一个被恶意domainparticipant攻击的域,上述所有威胁都可能跨越DDS域。
引入安全插件:
为了解决DDS安全的问题,OMG定义了DDS安全规范标准,该规范为符合DDS的实现定义了安全模型和服务插件接口(Service Plugin Interface)服务体系框架。DDS安全模型是通过DDS实现调用服务插件接口来实现的。
规范中服务插件接口,支持即插即用的安全性,并且能够实现DDS应用程序之间互操作。
服务插件接口允许用户自定义DDS框架中用于信息保证的行为和技术,例如,自定义身份验证、访问控制、加密、消息身份验证、数字签名、日志记录和数据标记等。
DDS安全插件主要实现两个方面的保护。其一是域级安全防护,保护DDS域免受外来者的攻击。其二是域内安全防护。
域级安全是一个相当简单的模型,将安全范围控制在域内,由开发者或维护者决定域的成员,被包含在域内的成员在域内允许执行任何被授权的操作。域内成员对topic的访问权限也由其域身份所决定。但是站在域的内部看,域内就像是一个没有经过安全防护的网络。此安全协议的目标是防止出现未经授权的域参与者的出现(在不考虑域内访问控制规则的情况下)。
基于域的安全防护可以达到如下效果:
1)检测针对消息的篡改和注入,即完整性保护;
2)保护消息内容,及加密性保护;
关于域级别的安全防护需要明确的一点是,域级别的安全防护一般通过TLS 或 DTLS来实现,即通过传输层的安全特性来实现安全域。
域内安全遵循最小权限原则(Principle of Least Privilege),提供了更高级的保护类型,这意味着参与者为了完成任务,不能做未经授权的事情。最小权限原则基于每个主题和分区的读写访问规则。在定义这些访问规则之后,安全插件将约束对每个topic和partition的读、写权限。
上面图,其中三个参与者(P1、P2和P3)拥有发布和订阅蓝色主题的权限,而只有P1对红色Topic有发布和订阅权限——P2对蓝色主题有订阅权限,但P3没有访问它的权限。这个场景表明,域内部的保护适用于特定的主题和分区,并不是每个DomainParticipant都被允许发布或订阅每个主题或分区。可以分别为每个主题或者分区设置访问规则,进而实现机密性和完整性的要求。因此,对于每个域,都可以根据需要在每个主题或每个分区上配置不同的防护规则。
为了防止在域中出现未经授权的操作,DDS安全规范对RTPS协议进行了安全增强。由于开放的网络,任何人都可以加入其中并开始接收数据,因此惟一可用的保护机制是保护RTPS消息本身。
安全插件将添加信息并修改RTPS消息以保护它们。在RTPS级别应用的所有保护都基于对称加密,这是一次性加密一对多分发所必需的。因此,发送方和接收方都需要知道密钥。身份验证过程结束后,参与者交换密钥,使用Diffie-Hellman(一种确保共享KEY安全 穿越 不安全网络的方法,它是OAKLEY的一个组成部分。)建立共享秘密。对于身份验证,参与者使用非对称密码学。
完整性保护
通过向原始消息追加消息验证码(MAC)来保护消息的完整性。默认情况下,该代码的长度为16字节。MAC的内容取决于原始消息的内容以及密钥。您需要密钥来创建和验证MAC。因此,发送方和接收方都需要知道密钥。发送方和所有接收方都使用相同的密钥。如果在接收端验证MAC失败,就意味着数据完整性遭到了破坏。
机密性保护
MAC提供完整性保护,因此攻击者将无法篡改数据,因为对数据的修改将被检测为未能通过MAC验证。然而,MAC本身不保护机密性。如果需要保密,则必须在数据通过网络发送之前对其进行加密。加密字节由消息和密钥生成。因此,发送方和接收方都需要知道相同的密钥。
加密本身并不能保证数据的完整性。因此,安全插件计算经过加密的数据的MAC,并将其包含在结果消息中。在实践中,DDS安全规范定义了完整性保护和机密性以及完整性保护。
遵循OMG数据分发服务(DDS)标准的理念,DDS安全规范遵循以数据为中心的模型,其中所有内容都是分布式的。这意味着所有加入DDS域的合法参与者都将执行所需的保护。这就是它们彼此之间可以进行通信的方式(它们执行相同类型的保护),同时阻止外部人员参与(因为这种保护)。换句话说,如果一个参与者不执行所需的保护,它将无法与安全域中的其他参与者通信。
来源认证保护
还可以强制数据源身份验证。例如,如果您有一个与多个datareader匹配的DataWriter,那么所有的读取器都从同一个写入器接收数据。因此,所有的读取器都需要知道用于加密和解密数据以及计算和验证MAC的相同的秘密密钥。如果这个秘密密钥在数百个读取器之间共享,那么所有这些读取器都拥有重现MAC的加密和计算的知识,因为该密钥与写入器使用的密钥相同。换句话说,读取器可以冒充写入器,从而破坏访问控制机制。如果读者之间互不信任,您可以设置来源身份验证保护。
这种类型的保护需要在系统中使用额外的密钥。更具体地说,除了发送方密钥之外,每个发送方-接收方对还将有一个特定于接收方的密钥。注意,datawriter和datareader都可以充当发送方和接收方。此外,RTPS消息和子消息将附加额外的mac(每个接收器一个)。
在前面的例子中,DataWriter将附加一个包含额外的特定于接收器的MAC的列表到通用MAC。然后,在常规的通用MAC验证之后,每个DataReader必须在该列表中找到它的特定于接收器的MAC,并验证特定于接收器的MAC是用它专门为自己和DataWriter之间使用而创建的秘密密钥计算的。通过验证公共MAC, DataReader可以相信数据没有被任何没有发送方密钥的人篡改过,因为生成公共MAC需要这个密钥。通过验证接收方特定MAC, DataReader可以验证发送数据的匹配DataWriter,因为它是与接收方特定密钥共享的唯一实体。
RTI DDS通过安全插件的机制实现诸如认证、加密等安全功能。安全插件支持可插拔的方式满足数据总线安全要求,每个安全插件覆盖不同的安全范围,主要包含以下几个方面:
RTI安全插件实现了多种加解密算法,包括OMG DDS安全规范中定义的所有加解密算法,以满足安全的多方面要求。下面介绍所有支持的加解密算法。