新闻资讯

    一、概览

    当程序密钥过期(默认密钥无效)以后,程序中随机生成了4组4位整数,该组整数为最新的种子数,将其称之为请求码( Code);

    收到请求码( Code)后,根据不同情况选择不同有效期的密钥类型()后,根据一定规律生成的5组不同的4位整数;

    新生成的5组不同的4位整数就是最新密钥,将该密钥输入到程序中,程序就会根据密钥中的有效期长度时间运行;

    二、随机数

    根据上述描述,密钥首先得生成一组随机数。随机数的产生,现在用得较多的是“线性同余法"就是下面这个式子:

    R(n+1)= [R(n) * a + b] MOD c

    为使随机数分布尽量均匀,a、b 均为质数, c 一般取值域内的最大值(mod 是求余数)。从这个式了可以看出,每次产生的随机数都跟上一次产生的数有关系,那么,第一个数是怎么来的呢?这就是线性同余法中必须用的”种子",也就是说,给定某个种子后根据日期计算动态密码的方法,所产生的随机数序列是固定的,在编程中,一般使用系统时间来初始化种子,因为每次运行程序的时间肯定不一样,所以产生散列肯定也不一样,从而达到“随机”的目的。PLC程序中就是密钥过期瞬间的时间作为初始化种子的数据。

    为了避免PLC中的数据溢出,所以将c的值取为10000,这样每一次产生的随机数为一个4位(小于4位的话前面需要补0)数。

    同时,为了让R(n+1)的值也是一直变化的,在程序中a的值也取为一个变化的整数,比如当前年份。

    最终程序中确定的a,b,c 的值分别为 a=当前年份, b=1, c=10000。

    vb标准日期计算天数datediff_日期计算器在线计算_根据日期计算动态密码的方法

    程序中的密钥包括4组,得到第一个密钥以后,按照一定的规则得到第2-第4个密钥的种子数,如此4个种子数即可得到。

    :随机数生成请求码程序图示

    上图可以看到程序中的4组不同的种子数,通过如此多的变换和组数,这样不断组合之后被破解的难度会得到指数级的增长。

    三、新密钥

    得到请求码()后,基于请求码为种子数,再将请求码套入上述公式中,同时a,b,c 的值可以取跟随机数一样的,也可以为了提高破解难度将a,b,c 的值取为不同的值,这样就得到正确密钥的数据。

    程序中将收到的数据跟上述规则计算出的新密钥相比较,若相同则意味着密钥是有效的,就可以将程序解锁

    :新密钥程序图示

    四、密钥有效期

    给定的新密钥中需要包含密钥的有效期,否则新密钥输入后不知道可以运行多长时间。目前程序中设置的密钥类型包括6种(一)无限制期限(二)5年期限(三)3年期限(四)1年期限(五)一个季度期限(六)一个月期限;在程序中用一个Int数据来表示当前密钥的类型,与上述6种类型分别一一对应的数值为1-6;

    同样,为了将密钥有效期的破解难度增加,也将密钥有效期做一定的规则运算。目前程序中密钥有效期的运算规则为

    密钥有效期 = [a* b*密钥类型数值] MOD 10000

    vb标准日期计算天数datediff_根据日期计算动态密码的方法_日期计算器在线计算

    程序中的a,b取值为当前年份和当前月份,如此6个不同密钥有效期的最新数据也会一月更新一次,增加破解难度。当然,也可以定义其他更复杂的规则,这样破解难度会成倍增加。

    :密钥有效期程序图示

    五、程序逻辑

    当程序的密钥过期以后,程序中将会生成一组4个整数的请求码,这四个请求码可以显示在上位机(HMI)上,如下图所示。

    :上位机请求码

    同时画面中有5个文本框用于输入新的密钥,如下图所示。其中第一个框用于输入密钥类型,其他4个框为与中对应的4组新的解码新密钥。

    :上位机新密钥输入

    同时在程序中还需要涉及到以下方面的内容管理:

    Ø日期数据:每一种的密钥有效期不同,在程序中先读取当前时间并根据算法解析出当前年份、当前月份、每一个日脉冲等信号,用于后续程序处理。

    vb标准日期计算天数datediff_日期计算器在线计算_根据日期计算动态密码的方法

    :日期结构体数据

    Ø密钥有效期管理:不同密钥有不同时间长度,在程序中将不同密钥的时间长度保存在一个Int数据中,每当一个自然日的脉冲信号后就将该日期减去1,直到该数值为0的时候即意味着需要新的请求码。

    :密钥剩余时间计算

    六、新密钥生成工具

    根据上述描述,新密钥和请求码之间有复杂的运算关系,若在收到远程请求码后,新的密钥计算也是一个不小的过程。

    所以,为了将过程简化,目前在Excel中利用VBA编写了一个窗体程序,用于生成新的密钥。

    :新密钥生成工具

    将上位机系统显示的请求码输入到红色框内,然后在蓝色框中选择一种密钥类型,再点击密钥运行( Run)即可按照文档中描述的规则在绿色框内生成新的密钥()。然后将绿色框内的数据填入上位机系统的新密钥输入区域即可。

    后记

    以上就是一个标准的密钥管理程序,在PLC中为一个单独的FB块:。

    当密钥过期后根据日期计算动态密码的方法,上位机系统就会弹出一个请求新密钥画面(包含请求码),同时其他画面被锁定无法进入。这样,只有得到新的有效的密钥后,其他画面才能得到解锁;

    日期计算器在线计算_根据日期计算动态密码的方法_vb标准日期计算天数datediff

    PLC层面,将相关的数据设置为掉电保持,当密钥过期后生成一个变量,该变量用于系统直接停止,即意味着当密钥过期后,现场设备就会有当前状态进入直接停止。当收到新的有效密钥后,所有的变量即可恢复正常。

    【延伸阅读一】基于TIA V15的动态加密计时催款程序

    非标行业是一个特殊的行业,面对设备发货到现场后迟迟不肯付款的和找各种理由拒绝搪塞验收的客户,必须的采取非常的手段,其中给设备加密定时锁机是一种优选的方案。一来可以提醒客户要遵守规则要求,按时验收,按时付款,二来不会给客户造成任何的损失,三来避免走法律途径冗繁的手续和律师代理费。

    废话不多说,在这里介绍下动态加密计时催块程序的解决思路及博途V15的源程序供各位朋友参考。所谓动态密码,就是所用的解密密码是动态实时生成的,也就是说密码是随时间变化而变化。

    过程是这样实现的。当调试人员在项目调试完成后,设置一个到计时天数,当天数到达后设备锁机,HMI上跳出解锁界面,这个时候点击HMI上的生成解锁码按钮,生成解锁码(解锁码是在动态验证码中挑选8位生成的,在此基础上还可以扩展出随机生成的解锁码..........)。

    然后客户把解锁码告诉给调试人员,调试人员根据解锁码计算出解密密码告诉给客户解密(调试人员是需要知道这个解密算法)。

    加密计时模块

    程序块数据结构

    程序完成步骤

    1、首先调用读取日期时间存入到FB块本地临时变量中,读取秒数,根据秒数计算天数

    根据日期计算动态密码的方法_日期计算器在线计算_vb标准日期计算天数datediff

    2、调用西门子官方随机数生成块,并将随机数加上索引。

    3、将随机数按照索引的顺序,放入相应的寄存器,并转成字符并显示在HMI上,可以看到动态的字符变化的炫酷效果

    4、生成解锁码显示在HMI,客户把这个解锁码告诉调试人员,调试人员需要解锁码计算出密码。

    5、制作解密算法(这个机密算法根据需要可以自己更改)并强转成DINT类型,并密码核对解密。

    6、解密完成复位状态

网站首页   |    关于我们   |    公司新闻   |    产品方案   |    用户案例   |    售后服务   |    合作伙伴   |    人才招聘   |   

地址:北京市海淀区    电话:010-     邮箱:@126.com

备案号:冀ICP备2024067069号-3 北京科技有限公司版权所有