各种加密方案的分析

        加密一词来源已久,自从人们希望对自己私人的信息得到保护开始,就有了加密这个概念。软件行业的加密是软件厂商为了保护软件开发的利润而采取的一种软件保护方式,加密的好坏直接影响到软件的销售,从 Apple II 的年代开始,加密与解密的斗争就一直没有停止过。时至今日,软件加密的方案已经多种多样,在这里我将介绍一下各种加密方案的特点和优劣,当然这只是一家之见,持不同观点者可一笑置之。

        当前软件加密方法多种多样,已经不可能找出一种分类方法来把各种加密方案很好的区分开来。 基本上来说可以分为依赖特定硬件的加密方案和不依赖硬件的加密方案。

        一、我们首先说说依赖硬件的加密方案:

        1、软盘加密

        这是在计算机上最为古老的一种加密方案,它的原理是在软盘的特殊位置写入一些信息,软件在运行时要检验这些信息。这种软盘就好像一把钥匙。软件开发商只需一次投资购买一套加密工具就可以自己制作多张钥匙盘。此方法加密简单,成本低,在软件发展的不同时期都能看到其闪光点。像中文之星 2.97还在延用这种方式。但用户在执行软件时必须要插入此软盘。因为软驱是慢速设备,多次检查软盘上的加密点会大大拖慢程序的运行速度,所以一般加密软件只在软件运行开始的时候检查一次,这样不能避免用户用一张加密盘启动多份软件。而且由于软盘是一种易损载体,加密软件对软盘加密点的反复读写很容易造成软盘的损坏。而这张加密盘又不能备份,软件公司要不断应付用户更换加密盘的请求。另外由于这种加密技术出现的较早,硬解密的技术相对比较成熟,像双星公司的 King-Copy 软件能拷贝大多数的加密软盘,连加密点一起复制,复制后的软盘还是加密的。

        2、卡加密

        在 90 年代初,各种各样的汉卡涌现出来,而随之而来的卡加密技术也开始风行。卡加密的好处是由于加密卡上面不仅仅可以存放数据,而且可以用硬件实现简单的算法,而且在软件的执行过程中可以随时访问加密卡,不会对软件运行的速度带来太多的影响,而且由于加密卡是与计算机的总线交换数据,数据通讯协议完全由卡的厂家制定,没有统一的标准接口,让软件解密者有无从下手的感觉。像北大方正早期的印刷软件都是采用这种方法来加密的。但这种加密方案需要打开计算机的机箱,占用扩展槽,一般还需要专门的人员来安装。另外,由于加密卡设计上的某些问题,还很容易同现有的硬件发生冲突。考虑到成本,加密卡必须要批量生产,厂商一般不会对低价值的软件一下投入这么大的资金。由于种种问题,这种加密技术现在已经难得一见了。

        3、软件锁加密

        软件锁加密是在国外首先出现的,它是一个插在计算机打印口上火柴盒大小的设备,国内俗称为加密狗。在加密锁内部存有一定的数据和算法,计算机可以与之通讯来获得其中的数据,或通过加密锁进行某种计算。软件无法离开加密锁而运行。由于它不像卡加密那样需要打开计算机的机箱来安装,但又像加密卡那样可以随时访问,而且访问速度很快,所以一推出就受到软件开发者们的青睐,很快成为当今世界上主流的加密方案。目前,所有的加密锁都提供了可编程的接口。用户可以控制加密锁中的内容,在程序中通过加密锁的接口任意访问加密锁。国外加密锁一般仅提供若干种算法,但好的加密锁不但可以向客户提供加密算法,也容许客户根据自己的意愿自定义加密算法,容许客户自定义用户ID号……比如:飞天诚信科技公司推出的ROCKEY-IV锁就是一种加密强度很高产品。但加密锁也是有一定缺欠的,由于加密锁利用的是计算机的打印口,而打印口原来是为打印机而设计的,软件锁一方面要保证用户加密操作的正确,同时也要保证打印机工作的正常。但由于打印机驱动程序设计上千差万别,没有任何一家的加密锁能够完全做到这一点。

        但这一问题随着技术的进步有希望得到彻底的解决,那就是 USB 接口的加密锁。USB 是 Microsoft、Intel、Compaq、NEC 联合开发的一种全新的硬件接口标准,能够同时支持 128 个不同的外部设备,而且互相之间没有冲突,在新的 PII 计算机主版上大多都可以看见两个小小的长方形接口,那就是 USB 接口。USB 接口的加密锁不但拥有并口加密锁的所有优点,而且没有打印上的问题,其前景十分看好。但美中不足的是只有 Windows 98 和 Windows 2000 目前能够支持 USB 设备。在国内市场上,有几种国外USB加密锁,但售价很高。飞天诚信科技公司推出的一款ROCKEY-USB加密锁。其安全性优于国外产品的同时,售价还不足100元,仅是国外产品的一半。

        4、光盘加密

        随着光盘的普及,光盘几乎成了软盘的替代产品。即然有软盘加密成功在先,为什么不能有光盘加密呢?有很多人在思考这个问题。但实际操作上确实是有一些问题的,因为光盘有 ISO9660 标准协议规定,其可控制性比软盘还要严格,想找出一种只能运行而不能复制的方式确实很困难。但现在确实已经有几家这样的产品出来了,而且加密方法也不尽相同。其主要原理是利用特殊的光盘母盘上的某些特征信息是不可再现的,而且这些特征信息大多是光盘上非数据性的内容,光盘复制的时候复制不到的地方。因为投入是一次性的,对于大规模的生产这种加密方案可以将成本降得很低。而且软件数据和加密在同一载体上,对用户无疑是很方便的。但这是一种较新的加密方案,很多方面还需进一步验证。而且由于加密方式所限,不可能在用户自己刻录的光盘上实现这种加密,必须是生产线上生产的光盘才能够实现。这对于一些小规模的软件生产厂商还是有一定困难的,而且由于光盘的只读性,一旦加密有错是无法修复的。

        二、我们再谈谈不依赖硬件的加密方案:

        所有的带有附加硬件设备的加密方案都有一定的加密成本在里面,对于那些价格高昂的软件当然无所谓,但对于那些共享软件或价格本身就很低的软件来说,硬件加密成本可能比软件本身的售价还高,当然不会被考虑了。但不加密,往往就变成了免费软件,所以近年来产生了很多软加密方案。

        1、密码表加密

        在软件运行的开始要求用户跟据屏幕的提示信息输入特定的答案,答案往往在用户手册上的一份防复印的密码表中。用户只有输入密码正确后才能够继续运行。这种加密方案实现简单,不需要太多的成本。但用户每次运行软件都要查找密码,不免使用户感到十分的不便。像台湾的游戏大多采用此加密方式。而且往往有一些有耐心者把整个密码表输入到计算机中存成一个文件,同软件的盗版一同公布出来,让加密者无可奈何。基本上是一种防君子不防小人的加密方式。

        2、序列号加密

        这种加密方式从某种角度来讲不是一套完整的加密方案,现今很多Shareware( 共享软件 )大多采用这种加密方式,用户在软件的试用期是不需要交费的,一旦试用期满还希望继续试用这个软件,就必须到软件公司进行注册,然后软件公司会根据你提交的信息(一般是用户的名字)来生成一个序列号,当你收到这个序列号以后,并在软件运行的时候输入进去,软件会验证你的名字与序列号之间的关系是否正确,如果正确说明你已经购买了这个软件,也就没有日期的限制了。这种加密方案实现简单,而且购买过程也完全在 Internet 上实现,无论是开发者和购买者都觉得很方便。不过有心的人可能已经注意到软件的名字与序列号之间的验证是在你的计算机上完成的,很多黑客利用这个漏洞找出了名字和序列号之间的换算关系,编写出一种叫 KeyMaker 的程序,你只要输入你的名字,这个程序会帮助你计算出序列号,你再用你的名字和这个序列号输入进软件中就变成正版软件了。而且也没有什么更好的方法来阻止用户扩散他注册后得到的序列号。

        3、许可证加密

        这种方式在某种角度上说可以是序列号加密的一个变种,你从网上下载的或购买过来的软件并不能直接使用,软件在安装时或运行时会对你的计算机进行一番检测,并根据检测结果生成一个你的计算机的特定指纹,这个指纹可以是一个小文件,也可以是一串谁也看不懂的数,你需要把这个指纹数据通过 Internet、Email、电话、传真等方式发送到开发商那里,开发商再根据这个指纹给你一个注册码或注册文件,你得到这个注册码或注册文件并按软件要求的步骤在你的计算机上完成注册后方能使用。这个方法的买卖也是完全通过网络来进行的,而且用户购买的软件被限制了只能在他自己的计算机上面运行,换到其它的计算机上,这个注册码或注册文件可能不再有效。但用户更换某些硬件设备也可能造成注册码的失效,而且用户得到软件后在完成注册工作前会有一段时间无法使用。对于软件开发商来说服务与管理的工作量无疑也是非常巨大的。网络上有个 ZIP Download 公司专门替软件开发商来完成这种加密与服务工作。将来 PIII 处理器内部有了特定的序列号,将会对减少这种加密方案的硬件依赖性,但估计普及起来还有很长的一段时间。