不知道大家有没有印象?小时候看电影,需要使用密码本破译对方的报文,其实这个跟现在的使用公钥和私钥加密报文和解密报文是相似的,但是使用公钥和私钥的安全性要好的太多了。
前一阵一直有人问程序加密的事情,虽然说S7-1500的程序加密比S7-300的好,但是有的工程师总是感觉使用密码加密程序不安全,因为密码一旦泄露了,通过口口相传,知道的人就多了(对比原来使用类似于单片机的控制器,近似一个黑匣子,只能设置参数,不能修改程序,对于这样的应用,也可以将CPU全保护,然后通过HMI设置参数,这样就没有密码的问题)。这时我想起了电影的密码本了,如果使用一个密码本加密程序是不是更加安全?为了保证密码不容易泄露,例如口口相传,必须使用一种特殊的字符,例如我们所说的乱码或者生僻字,参考图1.
图 1
这样的密码看了让人说不出,看到了也不容易记住,也不容易口口相传,这样的密码只能通过文本的复制才可以解密。把这些字符作为密码本,使用一个数字组合和方式,例如FB1的密码是13986732178,其实就是密码本的第一个字符、第三字符......。或者一个人拥有FB1的前部分密码,第二个人拥有FB1的后部分密码,只能两个人同时在才能打开程序。是不是感觉搞工控有点太神秘了,其实再好的密码、再好的防范(我感觉)措施也不能百分之百地有效,主要看防护到哪一个层级,例如一个公司的工程师开发一套程序,如果没有好的管理和效益,这个工程师离开后就带走了这套程序,更谈何程序保护!
我认为程序的保护是一种管理方式,即使有好的管理方式也只是防护一时而不是一世,设备必须只有不断的优化和迭代才不怕别人的复制和抄袭。好了下面我总结了几种程序保护的方法供大家参考(如果大家有更好的方法可以在回帖中说明,共享给其他工程师,一起提高):
1:项目保护
项目可以按照不同的角色和功能进行划分,例如维护人员,所有程序和安全配置是只读,不可修改,项目保护可以设置不同的用户的口令,如图2所示(但是我感觉V15.1版本有点漏洞,版本V16没有测试过)。
图 2
2:CPU的口令保护
CPU的口令保护防止未授权的用户上传和读写CPU的程序,如图3所示,PLC也可以设置为“读”访问便于设备的维护。
图 3
3:程序块加密
将程序块使用口令加密,每一个程序块可以单独设置密码,如图4所示。
图 4
4:程序块与存储卡和CPU的序列号绑定
S7-1500 PLC支持程序块与CPU或SMC卡序列号的绑定。绑定后,该程序块只能运行在与其绑定的CPU或SMC卡上,否则PLC不能正常工作,并会将故障原因(序列号不符)写入到诊断缓冲区中。通过此方法,可以有效防止程序块的拷贝,保护知识产权。只有持有防拷贝保护密码的用户,才可以解除程序块的绑定关系。如图5所示。
图 5
可以组合使用上述几种方式进行程序的被动保护,例如使用生僻字生成不同的密码,分别作为项目密码、CPU密码、不同程序块的密码和序列号绑定密码;除此之外程序的主动保护就是不断的优化参数、迭代,别人没有我有、别人有了我的更好!