软件加密锁的选型及加密指南

浏览: 作者: 来源: 时间:2020-03-08 分类:解决方案
软件加密锁的选型及加密指南,虽然是对本公司的加密锁的介绍,但其选型及加密指南具有广泛意义。

选型及加密指南

一个加密锁的安全性主要由以下二项指标决定:

1、  防破解能力

2、  防复制能力

一:防破解能力

现在常用的加密锁分两类,一类是在程序中使用验证的方式(可以是算法或数据验证的方式,也可以是直接验证,或间接验证的方式)检查是否存在加密锁,我们这里统称为验证型加密锁。另一种是将程序的部分代码放到锁中,在锁中运行,没有锁,就相当于程序少了部分代码,从而达到防止破解的目前的,我们这里统称为代码型加密锁。

A、验证型加密锁:

验证型加密锁开发相对容易,但加密强度一般,价钱相对较低。

验证型加密锁要增加加密强度主要就是防止程序被反编译,以防止黑客将程序中验证部分的代码跳过,要防止程序被反编译,就要对程序进行加壳或混淆,所以对于验证型加密锁,加密强度采决于壳或混淆的强度。

壳有两种方式,一种是虚拟壳,一种是整体壳。虚拟壳的安全性更高,因为代码被虚拟了,所以相对不容易被解。

验证型加密锁如何有效地加强防破解

1、源代码加密,在源代码加密中可以使用直接验证加密锁及间接验证的方式结合使用。

2、在源代码加密时最好是使用算法验证及数据验证相结合的方式,而不是简单的数据验证。

3、除了源代码加密外,建议再加壳。

4、加壳时建议使用带虚拟机的壳,我们的外壳加密工具都有虚拟机这个选项,建议选中

5、加密手段越多,被破解的可能性就越小,别人破解的难道就越大,破解的时间就越长,成本就越高,只要使得别人破解的成本要远远大于购一个软件或自己写一个软件的成本就足够了。

 

B、代码型加密锁:

代码型加密锁开发相对复杂,因为要做代码的移值工作,要将程序中的部分代码移到锁中运行,但加密强度高,价钱相对较高。

代码型加密锁,加密强度采决于有效的代移值码量。有效就是指在锁中运行的代码本身就是程序中的一部分,而不是代码在锁中运算后,再在程序中进行验证这样的代码,是能与程序有效结合的代码。在锁中运行的代码越多,越复杂,就越难破解或不能破解。由于加密锁的CPU的运算速度远小于电脑的CPU及加密锁的内存也远小于电脑的内存,且加密锁的CPU与电脑的CPU是相互独立的,加密锁的不能直接操作电脑的CPU及内存,所以并不是所有的代码都可以移值到加密锁中。

要衡量代码型加密锁的性能,取决于加密锁中的指令(即可以移值的代码)及可以移值的代码量。

 对于加密锁指令(即可以移值的代码),指令越多,就能使用得更多的程序代码可以移值到锁中(因为前面提到,不是所有的程序中的所有代码都可以移值到锁中在锁中运行)。例如我们的专业易用型(UPL-E),只有有限的指令集:赋值,移位,与、或、异或及加,减运算。而下载型智能锁(DSMART),支持所有的字符操作及数学运算操作,可以操作任意数据。32位智能锁(UPL-32C/R)除了支持所有的字符操作及数学运算操作,还可以在锁中调用外部程序的函数及外部DLL及外部控件,这样就使得代码的移值工作更容易,更有效地与程序结合起来,安全性越高。D8则是支持最多指令集的全新一代加密锁,且成本更低,开发更容易。

对于可以移值的代码量,D8及下载型智能锁(DSMART)是将代码直接下载到锁中,不是动态的,所以代码量是有限制的,DSMART可下载24K的代码到锁中,D8则为2K-32K。专业易用型及32位智能锁都是使用动态的方式,在需要的时候动态地加装,在不需要的时候动态地卸载,所以代码量不受限制,是可以无限的。

代码型加密锁如何有效地加强防破解?

1、尽量地将程序中的部分代码移到锁中运行,在锁中运行的代码越多,越复杂就越安全。

2、对于D8加密锁可以将程序的全局变量移到锁中,这样会更安全。

3、在锁中运行的代码尽量不要返回固定的数据,最好是随着输入变量的不同,返回不同的结果的代码。

4、如果程序可以移值到锁中的代码不多,可以使用在锁中运行部分自定义算法进行对变量加密,然后在程序中将变量进行加密,然后再加壳或混淆。

5、建议加壳或混淆

6、加密手段越多,被破解的可能性就越小,别人破解的难道就越大,破解的时间就越长,成本就越高,只要使得别人破解的成本要远远大于购一个软件或自己写一个软件的成本就足够了。

另一个重要的衡量一个加密锁的性的重要指标是,当软件被破解后的后续解决方案,即加密锁是否具备二次防破解能力

由于软件开发商大多都不太具备专业的加密知识,一般专注于软件的开发,所以可能花在加密上面的时间不太多,所以即便是好的加密锁,如果使用不当,也容易出现被破解的可能。那程序被破解后,能否有效地在新的升级版本防止盗版用户继续使用新的升级软件,是一个很重要的指标。如果新的升级版本,可以使用得正版用户不受影响,而盗版用户不能再使用新的升级版本,这样那些盗版用户就会有潜在成为正版用户的可能,从而更大的保护及增加开发商的利益。

我们的所有代码型的加密锁及加密得当的验证验加密锁都有这样的二次防破解能力。当旧版程序由于加密不当被破解后,开发商只需要使用相同的密钥,重新生成新的加密单元,重新进行正确的加密,这样新加密后的程序,原正版用户可以正常使用,而盗版用户不能使用,这样当盗版用户有升级的要求时,而原有的使用习惯不能改变时就会有升级正版的可能。

防复制能力:

复制又分软复制及硬复制。

1、软复制:

软复制是指黑客得到了用户设置在加密锁的相关数据,然后在软件开发商中采购相同型号的空白锁,将原来的数据设置到锁中。黑客是如何得到用户设置在加密锁的相关数据呢?

黑客主要是通用对程序进行破解或使用数据拦截等技术得到加密锁的相关数据。如果用户加密不当,就很容易被复制。例如用户只是简单地将某一数据设置到锁的数据区中,然后读出进行判断。这样黑客就可以很轻易地使用拦截技术(因为将加密锁的数据返回到程序中要经过很多中间层,任何一层进行拦载都可以)得到程序想要的数据。

如果加密数据是固定且是有限的,黑客还可以通过拦截的方式得到所有的加密锁返回数据,并通过挂钩软件仿真的方式或硬件仿真的方式返回所有的固定数据,达到软复制的目的。

 

如何有效地防止被软复制:

1、对于验证型加密锁来说,一定要使用算法。

2、对于带TEA对称算法的验证型加密锁来说,由于是对称算法,加密密钥与解密密钥是相同的,所以要防止软复制,不能使用程序加密,锁解密的方式来进行验证,一定要生成足够多的随机数及相应的验证数,并从中随机抽取验证加密结果,这样就可以达到不容易被软复制或仿真复制制的效果。

3、对于带SM2国密或RSA非对称算法的加密锁来说,可以在程序用公钥对随机数进行解密,然后发给加密锁,让加密锁用私钥解密,并返回结果进行验证,由于每次的数据是不同的,所以无法软复制或仿真。

4、对于代码型加密锁,强烈建议将本身程序中要用到的部分代码放到锁中运行,相当于程序中一个函数

5、对于代码型加密锁,在锁中运行的代码不要简单地返回固定的数据,例如P=3.14或s="xxxx"这样的代码。建议在锁中的代码一定要有输入变量及返回变量。

 

2、硬复制:

硬复制是指直接在硬件上克隆一个完全相同的锁。

1、我们的加密锁除部分YT699或YT88外,其它所有型号都使用智能芯片,目前阶段都不能硬复制,我们的智能锁芯片系列加密锁安全级别达EAL4+,但我们并不保证将来不能被硬复制。原因是:随着科技的不断进步,现在的科技连人的胚胎都可以复制,原子都可以移动,何况这些是人大量生产出来的东西,主要是看克隆的成本。

2、32位智能锁具有专用的防复制功能,即便随着科技的不断进步,将来有可能通过剖片得到芯片中的数据并复制,也无法不能使用,主要是他的工作原理不一样,采用了独有的防克隆技术。