Blurry Box 加密
Kerckhoffs’ Principle
Auguste Kerckhoffs |
奥古斯特· 柯克霍夫早在19世纪就提出:“即使密码系统的任何细节已为人悉知,只要密匙(key,又称金钥或密钥)未泄漏,它也应是安全的。” 该理论被称为柯克霍夫原则。这意味着一个有效的安全方法并不需要绝对保密。原因是什么呢?
德国威步多年来一直坚信该理论。当市面上其他加密狗都基于专有算法设计时,威步已经开始使用著名的公有FEAL算法,并在1992年,首次推出WibuKey产品时,即在WibuBox产品使用手册中即公布了密钥源的组成。一些未公开的密码系统早在初期就已经被破解,WibuKey则经受住了时间的考验,一直到40位密钥(由于输出限制使用)因为太简单才可以暴力破解。目前WibuBox使用长为64位的密钥,至今仍未被破解。随后在2003年,CodeMeter首次发布,其采用的是AES 128位加密算法,该算法也是公开算法。同样CmDongle至今仍未被破解。
概念
与在加密狗内处理加密过程不同,目前还没有公开的软件安全集成方案,我们称为“无名安全”,也即通过隐匿的方式尽可能达到安全,这恰恰与柯克霍夫原则相反。这些未公开的方法既无法评估也不能相互比较。而威步则一直提供各种机会在各种讲座或活动中讨论CodeMeter保护套装的方法和功能
采用Blurry Box技术,加密系统将会达到更高的安全强度。Blurry Box提供的软件保护方案将会完全基于各种现有公开方法,因此可以进行评估和比较。当然Blurry Box完全可以与CodeMeter保护套装的传统保护方案相结合。
Blurry Box充分利用了软件高度复杂的事实以及密钥存放于硬件加密狗的安全特性,其目标是使破解者破解软件投入的精力和时间要比重新开发同样的软件更多。从本质上讲,没有人能阻止一个已经了解某软件的运作方式的破解者去重新制作一套相似的软件,只不过花费更多的精力而已。
创建变量
为了增加软件的复杂性,软件中的多个函数会被重新生成为函数变量。一个封装函数会通过函数的输入参数选择执行哪个变量。
变量变更
每一个变量都会在一个范围值内发生变更。这防止破解者通过补丁形式每次都固定执行一样变量。
变量加密
所有的变量都被加密以阻止破解者根本不解密就通过反向工程获得变量。
嵌入陷阱
除了已经生成变量,更多的变量会被加密并作为陷阱嵌入到代码中。一个陷阱包含锁定代码,这意味着如果陷阱被解密,加密狗将会自动锁住,防止再次被用来解密。这意味着破解讲无法再次利用加密锁进行解密破解工作了。
加密狗中变量的选择
封装函数将会使用加密狗来选择变量。为此,输入参数发送到加密狗中,变量值则被返回。这使得攻击者不再可能通过反向工程解密封装函数来找出需要哪个变量。他必须必须输入所有可能参数并运行代码才能确定。
加密狗中的状态记录引擎
开发人员都知道函数只能按照他设定的顺序执行。上一次的解密方法将会存储在加密狗作为一种状态。下一次的解密则会检查是否满足此状态。如果没有满足则触发陷阱,以防止攻击者尝试各种可能的变量。他每次不得不回到开始从来,这大大增加了破解的复杂程度。
解密延迟
在正常操作中每隔30秒只有一定数量的解密可以被执行。该数量会被作为解密临界值存放在加密狗里。加密狗会根据该值进行相应解密。这样做不但使过程更加复杂,而可以大大拖慢破解者的破解。