其实加密狗只是一个工具,软件的加密强度还是要自己来作。就像delphi只是一个工具,但不同的人作出来不同水平的程序一样。我这有几个提高加密强度的基本原则,对你或许有些帮助。
* 加密点多且分散 软件的加密部分由多个加密点组成,每个加密点是一次对密钥的访问和校验过程,这个过程通常是被分成几步处理然后分散在程序运行中,而不是集中在一起,因为这样可以增加解密者分析加密点的难度。
* 密钥的返回数据不能固定不变对解密的分析有助于我们进行加密设计。解密的思路很多,一般的讲,从硬件角度主要是仿制、模拟密钥;从软件角度主要是先定位、分析加密点,然后寻找突破口。除非特殊需要,解密者一般不理会与加密无关的部分。由于密钥的设计越来越完善,包括使用特殊的单片机、保密的通讯协议等等,基于硬件的解密越来越少了,加密点的各个环节成为解密者的主要攻击目标。
我们应该注意的是,只要解密者发现了加密点中的一个漏洞,就可以直接解密,而不必分析加密点的其它部分。举个常见的例子:假设某个加密点在使用密钥时,密钥的返回数据是固定不变的,解密者就可以通过修改软件,去掉访问密钥的代码,将这个数据直接返回,而不必理会软件中是如何校验这个数据的。
* 加密复杂程度要高通常用加密强度来综合评价软件的抗解密能力。在进行加密强度的分析时,我们习惯于从解密的角度出发,比如考虑解密复杂度(即解密难点)、解密工作量等等。其中,解密复杂度是最主要的因素,它由软件所有的加密点中最难解密的一个决定。如果解密复杂度很低,即所有加密点都很容易攻破,就需要通过提高解密工作量来提高加密强度;反之,哪怕只有一个加密点,但是解密复杂度很高,加密强度还是很高的。
* 设计加密点的三个基本要求
我们认为在设计加密点时,只有从以下三个方面着手,才能有效的提高解密复杂度。
(1)入口数据随机 对应加密点的起始环节:准备数据要求软件发送给加密锁的数据有很强的随机性;否则,解密者可以统计出所有可能的输入输出,然后用软件仿真加密锁。
(2)出口数据随机 对应加密点的中间环节:访问。密钥要求加密锁返回给软件的数据有很强的随机性。这个要求也等价于加密锁内的程序不可从外部求解。否则,解密者可以解析出加密锁内部的处理方法,进而用软件来取代锁。
(3)软件依赖于锁内程序的算法(而不是数据)
对应加密点的最后环节:校验返回,即软件如何使用锁返回的数据。从理论上的要求是:加密锁内的程序是软件不可分割的部分,且在软件中没有副本(即锁内的程序是从加密前的软件中移植过来的)。这是为了防止解密者通过跟踪返回数据的使用过程而推测出锁的功能。
以上每一点都是必需的,解密者只要攻破其中一个环节,整个加密点就被解了。由于加密锁的资源限制及软件的固有特征限制,真正达到这三点并不容易,但可以作为提高加密强度的基本依据。