安全模式
OPC UA 的安全模式定义了客户端和服务器之间的通信安全级别,主要有三种模式:
- None: 无安全模式,通信不进行加密、签名或身份验证。这种模式适合对安全性要求不高的场景,但不推荐在生产环境中使用。
- Sign: 在这种模式下,消息被数字签名,以确保数据的完整性和发送者的身份验证。消息不进行加密。
- Sign & Encrypt: 此模式不仅对消息进行签名,还对数据进行加密,确保数据在传输过程中的机密性、完整性和身份验证。
安全策略
OPC UA 的安全策略定义了安全模式中使用的算法和密钥管理方法。open62541 支持的安全策略包括:
- Basic256: 使用 256 位的 AES 加密算法进行加密,并使用 RSA-OAEP 进行密钥交换。SHA-1 用于消息签名。虽然它提供了强大的安全性,但由于使用了 SHA-1,可能不再被认为是最安全的选择。
- Basic256Sha256: 与 Basic256 类似,但使用了更强的 SHA-256 进行消息签名,提供更高的安全性。
- Aes128Sha256RsaOaep: 这是一种新的安全策略,使用 AES-128 进行加密,SHA-256 进行签名,以及 RSA-OAEP 进行密钥交换。适用于对资源有限的嵌入式系统。
证书管理
open62541 支持使用 X.509 证书进行客户端和服务器的身份验证。X.509 证书可以通过自签名的方式生成,也可以由受信任的证书颁发机构(CA)签发。
- 信任列表(Trust List) : 服务器和客户端可以维护一个受信任的证书列表,只有列表中的证书才会被接受。
- 证书撤销列表(CRL) : 如果某个证书被发现不再安全或已被泄露,可以将其加入证书撤销列表中,阻止其被继续使用。
用户身份验证
除了通过证书进行设备级的身份验证,open62541 还支持多种用户身份验证方式:
- 匿名访问: 不需要用户身份验证,适合公共数据的访问。
- 用户名/密码: 通过用户名和密码进行身份验证。
- X.509 证书: 用户也可以通过 X.509 证书进行身份验证。
加密
对称加密
在对称加密中,加密和解密使用的是同一个密钥。这种方法速度快,但安全性依赖于密钥的保密性。如果密钥被泄露,任何人都可以解密信息或伪造信息。常见的对称加密算法包括AES、DES等
非对称加密
在非对称加密中,有一对密钥,一个公钥和一个私钥。公钥用于加密数据,私钥用于解密。因为公钥可以公开,所以非对称加密通常用于在不安全的网络上安全地传输数据。常见的非对称加密算法包括RSA、ECC等。
open62541中的数字签名
对称签名并不是一个标准的术语, 是在open62541 特定的上下文中。
数字签名是一种验证信息完整性和发送者身份的方法。发送者使用他们的私钥生成签名,接收者可以使用发送者的公钥验证签名。如果数据被篡改,签名将不匹配,因此接收者可以检测到篡改。常见的数字签名算法包括RSA、DSA等。
open62541 中的对称签名与非对称签名
以Basic256安全策略为例
非对称签名
RSA PKCS1 V15 SHA1
非对称签名在这里的作用是在建立安全通道时验证通信双方的身份。这是通过使用私钥对一些数据(通常是一个随机数)进行签名,然后使用公钥验证签名来实现的。在这个过程中,私钥必须保密,而公钥可以公开。这样,任何人都可以验证签名,但只有私钥的持有者才能生成签名。
对称签名
算法: HMAC, SHA1
对称签名在这里的作用是在已经建立的安全通道上验证消息的完整性和来源。这是通过使用对称密钥对消息进行签名,然后使用同一个密钥验证签名来实现的。在这个过程中,对称密钥必须在通信双方之间保密。这样,只有知道密钥的人才能验证和生成签名。
open62541中的对称加密与非对称加密
非对称加密
算法:RSA OAEP
在这里的作用是在建立安全通道时保护通信双方交换的对称密钥。这是通过使用接收方的公钥对对称密钥进行加密,然后接收方使用自己的私钥解密得到对称密钥来实现的。在这个过程中,公钥可以公开,而私钥必须保密。这样,任何人都可以加密数据,但只有私钥的持有者才能解密数据。
对称加密
算法:AES 256 CBC
对称加密在这里的作用是在已经建立的安全通道上保护消息的机密性。这是通过使用对称密钥对消息进行加密,然后使用同一个密钥解密消息来实现的。在这个过程中,对称密钥必须在通信双方之间保密。这样,只有知道密钥的人才能解密和加密消息。
Discussion
对于信创项目,需要使用国密进行签名或者加密,如果要使得open62541支持国密加密,有两种方式
TCP 代理
这种方式实现简单,但是存在安全隐患
实现国密的安全策略
这种方式需要对open62541源码十分清楚,实现难度也较大,根据之前项目经验,大概需要3周左右开发时间。