3. 安全策略算法套件:Basic128Rsa15、Basic256、Basic256Sha256 的算法组成与强度对比

聊完了安全策略的基础概念,咱们得把袖子撸起来,看看具体的算法套件了。OPC UA 里定义了三种经典的安全策略:Basic128Rsa15、Basic256 和 Basic256Sha256。

说实话,我刚接触那会儿,光看名字就有点晕。什么 128、256,后面还跟着 Rsa15、Sha256,到底谁强谁弱?别急,我带你一个一个拆开看。

3.1 算法组成:每个套件里到底有什么?

每个安全策略,说白了就是一套固定的“算法组合拳”。它规定了三件事:

  • 对称加密算法:用来加密通信数据,保证机密性。
  • 签名算法:用来验证数据有没有被篡改,保证完整性。
  • 密钥协商算法:客户端和服务器怎么安全地交换会话密钥。

我习惯把这三种策略的组成列成一张表,一目了然。

安全策略 对称加密 签名 / 哈希 密钥协商 (RSA)
Basic128Rsa15 AES-128 (CBC 模式) HMAC-SHA1 RSA-PKCS15 (密钥长度 ≥ 1024 位)
Basic256 AES-256 (CBC 模式) HMAC-SHA1 RSA-OAEP (密钥长度 ≥ 2048 位)
Basic256Sha256 AES-256 (CBC 模式) HMAC-SHA256 RSA-OAEP (密钥长度 ≥ 2048 位)

嗯,这里要注意。Basic128Rsa15 用的是 SHA1 做签名哈希,而 Basic256 虽然加密升级到了 256 位,但签名哈希还是 SHA1。只有 Basic256Sha256 才把签名也换成了 SHA256。这是很多人容易忽略的细节。

我的小习惯: 看名字记重点。Basic128Rsa15 里的 "128" 指对称密钥长度,"Rsa15" 指 RSA-PKCS#1 v1.5 填充。Basic256Sha256 里的 "Sha256" 指签名哈希算法。这样记不容易混。

3.2 强度对比:谁更安全?谁更快?

你想想看,安全性和性能往往是跷跷板的两头。咱们从三个维度来比比看。

3.2.1 加密强度

  • Basic128Rsa15:AES-128,密钥 128 位。目前来看,破解 128 位 AES 在可预见的未来几乎不可能。但它的短板不在加密,而在签名和密钥协商。
  • Basic256:AES-256,密钥 256 位。强度更高,能抵御量子计算对对称加密的 Grover 算法攻击(虽然还早)。
  • Basic256Sha256:加密强度和 Basic256 一样,但签名哈希从 SHA1 升级到了 SHA256。SHA1 已经被证明存在碰撞攻击风险,所以这一步升级很关键。

3.2.2 签名与哈希强度

  • Basic128Rsa15 和 Basic256:都使用 HMAC-SHA1。SHA1 的碰撞攻击在 2017 年已经被 Google 和 CWI 研究所实际演示过(SHAttered 攻击)。虽然 HMAC 结构能缓解一部分风险,但原则上,SHA1 已经不被推荐用于安全敏感场景。
  • Basic256Sha256:使用 HMAC-SHA256。SHA256 目前没有已知的实际碰撞攻击,是业界公认的安全哈希算法。

3.2.3 密钥协商强度

  • Basic128Rsa15:使用 RSA-PKCS#1 v1.5 填充。这个方案存在一些已知的侧信道攻击风险(如 Bleichenbacher 攻击),虽然 OPC UA 的实现通常会做缓解,但底子不如 OAEP 硬。
  • Basic256 和 Basic256Sha256:使用 RSA-OAEP 填充。OAEP 有严格的安全证明,能有效防止选择密文攻击。我个人更推荐 OAEP。
一句话总结强度: Basic128Rsa15 < Basic256 < Basic256Sha256。Basic256Sha256 是目前 OPC UA 规范里最强的安全策略。

3.3 性能对比:别光看安全,还得看跑不跑得动

我在一个老旧 PLC 项目上就踩过坑。当时图省事,直接配了 Basic256Sha256,结果 CPU 负载直接飙到 90%,通讯都卡顿了。后来换成了 Basic256,问题才解决。

性能差异主要来自两点:

  • 对称加密:AES-256 比 AES-128 慢约 30%-40%(取决于硬件是否支持 AES-NI 指令集)。
  • 签名哈希:SHA256 比 SHA1 慢约 20%-30%。
  • 密钥协商:RSA-OAEP 比 RSA-PKCS#1 v1.5 计算量稍大,但只在握手阶段执行一次,影响不大。

所以,如果你的设备是嵌入式系统、老旧 PLC 或者资源受限的网关,我建议你从 Basic256 开始测试。如果性能有余量,再升级到 Basic256Sha256。

避坑指南: 我曾经见过一个项目,所有设备都强制配置 Basic256Sha256,结果一批老款 RTU 直接握手失败。后来查手册才发现,那批 RTU 的固件只支持 Basic128Rsa15。所以,安全策略的选择必须与设备能力对齐,不是越强越好。

3.4 核心逻辑关系图

下面这张图,我帮你把三种策略的算法组成和强度关系梳理清楚了。你可以把它当作一个快速参考。

OPC UA 安全策略算法组成与强度对比图 OPC UA 安全策略算法组成与强度对比 Basic128Rsa15 Basic256 Basic256Sha256 强度递增 → 强度递增 → 对称加密算法 AES-128 (CBC) AES-256 (CBC) AES-256 (CBC) 签名 / 哈希算法 HMAC-SHA1 HMAC-SHA1 HMAC-SHA256 密钥协商算法 (RSA) RSA-PKCS#1 v1.5 RSA-OAEP RSA-OAEP 说明: Basic128Rsa15 使用 SHA1 和 PKCS#1 v1.5,安全性最低。Basic256 加密升级但签名仍用 SHA1。 Basic256Sha256 在加密和签名上都用了最强算法,是目前推荐的安全策略。

3.5 实际选型建议

说了这么多,到底该怎么选?我根据项目经验,给你几个参考原则:

  1. 新项目、新设备:直接上 Basic256Sha256。别犹豫,这是面向未来的选择。
  2. 存量设备升级:先查设备手册,看它支持哪些策略。如果只支持 Basic128Rsa15,也别硬上,至少比不加密强。
  3. 性能敏感场景:比如高频数据采集、运动控制,优先测试 Basic256。如果 CPU 扛得住,再考虑升级。
  4. 混合网络:服务器可以同时启用多种安全策略,让客户端自己协商。我习惯的做法是:服务器同时开启 Basic256Sha256 和 Basic256,客户端优先尝试前者,失败后降级。
我的经验: 在配置 OPC UA 服务器时,我通常会先列出所有客户端设备型号,查清它们各自支持的最高安全策略,然后取一个“最大公约数”。这样既能保证兼容性,又能最大化安全性。