JZGKCHINA
工控技术分享平台
尊重原创 勿抄袭
勿私放其他平台
提到OPC UA,大家都会说它在安全方面做得很好。
可是如果量化分析的话,到底有多好啊?
01
概述
信息安全包含CIA三要素:保密性(confidentiality), 完成性(integrity)和可用性(availability)。
这三项是信息安全的目标,那么实现这些目标的手段是什么呢?
“
拿保密性来说,实现的手段可以是对原始数据进行加密。
这篇帖子我们就来聊一聊数据加密的一种方法:对称加密。
这里我们只聊加密技术的大局观,不会涉及那些天马行空(枯燥乏味)的算法细节。
02
对称加密的算法
加密有很多种方式,这里举一个小白的例子:
如果想把数据 ‘00110101’(原文)发送给对方,在发送前用原文与‘11100011’(密钥)完成一个异或运算,然后将结果‘11010110’(密文)发送过去。对方在收到后,再用密文与密钥进行一次异或运算,即可得到原文。
“
这就是一个很简单的加密过程,加密和解密共用一个密钥,所以叫对称加密。可以把这个异或算法当成一个对称加密里的‘hello world!’。
当然,实际在行业中应用的算法要比异或算法复杂特别多。如果不是相关专业的朋友,一般很难理解那些天马行空(枯燥乏味)的算法。这里我也不做过多介绍,只是甩出几个高大上的算法名字,DES,3DES,AES。道高一尺魔高一丈,一般加密算法都会有个有效期,过上几十年,一旦被破解,曾经的王者就会变成青铜。
另外除了算法本身,还有一个影响算法安全的因素就是密钥长度。上面的异或算法中就是用了一个长度为8bit的密钥。
下表列出一些算法与不同长度密钥的组合,破解他们的耗时是明显不一样的。如下图所示,DES一个小时就可以破解了。当然,天下没有免费的午餐,越安全的组合就需要越多的资源(内存,CPU)。
03
对称加密流程
其次是流程的问题。以最简单的异或算法为例,如果密钥长度为256位,则每次只能对256位数据加密。那么如果需要对1M的数据进行加密时,流程上应该怎么操作呢。
“
最常用的方式是流加密和块加密。以块加密为例,将1M的数据分成若干块,每块256位,然后分别进行加密。解密的时候也是类似。这种方式叫ECB (Electronic Codebook Mode)。
采用这种简单的ECB模式是有风险的。
比如:
老王
去撸串吗?
老张
“
老张
怕回复被老婆
截获。用加密算法将图片中的每一个像素加密,把所有的黄色加密成红色,黑色变为白色。
信息加密
信息被老婆截获
“
老张的老婆看着回复,虽然并不知道红色和白色的原始色彩是什么,但是她依然知道老张给老王回复的是一个笑脸。
因此,这里面就需要一些使密文变得混淆的办法。
比如这种CBC(Cipher Block Chaining)模式,可以看到这种模式将上一组加密得到的密文与和本组的原文进行异或运算,然后再对结果进行加密。解密的时候也是如此。这样就能将有规律的原文通过加密后生成毫无规律的密文。
除了上面介绍的ECB和CBC模式之外,还有很CFB,OFB等模式。感兴趣的朋友自行百度查看更多细节。
有了加密算法和加密流程,对称加密就能将任意长度的原文加密成很难破解的密文了。
“
算法方面AES比DES安全,流程方面CBC比ECB安全,所以AES+CBC肯定最安全。可是出来混,迟早是要换的,这种王霸组合的代价就是:性能是最龟的。
04
OPC UA 用了什么对称加密法
扯了半天,到底OPCUA到底有没有加密,用的又是什么方式呢?可以做个简单的测试,运行Unified automation公司出品的Demo服务器,然后用该公司的UAExpert去连接,可以看到如下endpoint。
先选择不签名,不加密的裸奔模式,用Wireshark抓包看一下,是不是报文都能被Wireshark解析出来;
然后换成basic256sha256签名且加密模式了,是不是Wireshark对这些报文解析的时候就无能为力了?
啥是
basic256sha256?
又扯了几句,这个测试和上面扯了半天的对称加密又有什么关系呢?
其实OPC UA协议应用了很多安全相关的算法,根据不同的安全需求将它们分成不同的组合。以basic256sha256为例,它即是一堆安全算法的一个集合,在OPC UA的官方网站上查询basic256sha256的具体细节:
http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256
可以在下表中看出 basic256sha256这种安全策略所使用的对称加密方式:算法为AES,块加密方式为CBC,密钥长度为256bit。
05
对称加密存在的问题
但是,对称加密存在一些问题:
第一,发送者和接受者需要共享一个第三者不知道的密钥,所以,如果在一个大的群体里通讯时,分配和管理密钥是个问题。想想看,如果公司里有200个员工,如果采用对称加密,每个员工都需要存储另外199个员工的密钥。如何很好的管理这些密钥呢?每个密钥能否永久有效,如果一旦丢失了怎么办?
第二,密钥如何传输呢?我们上面的讨论都是基于发送者和接收者已经有了共享密钥。但是,万里长征第一步是如何让发送者先把密钥安全的传输给接收者?
“
这让我想起那个给小猫挂铃铛的问题:老鼠们说如果给猫挂上铃铛,从此他们就能安全的生活了。可是怎么才能让老鼠给小猫挂上铃铛呢?我们下期来探讨这个问题。
作者简介
平凡的码农:
十余年工控经验,搞过化工,也做过电力,搞过DCS,也做过PLC。目前,从OT转身IT。