由于加密给软件开发者和用户带来了许多不便和麻烦,因此,全球软件业的趋势是开发不加密软件,依靠版权法来保护软件开发者的权益。但对于一些大型的工程应用软件系统如:AutoCAD、Xilinx FPGA开发系统等,由于销量小、成本高,不得已仍然需要使用软件加密技术。另外,对于某些敏感行业的应用软件也必须实行软件加密,对程序代码进行保护。
早期的软件加密方法有:软盘或硬盘加密、加密卡等,由于加密性能、兼容性能或使用不方便等方面的原因而被淘汰。目前广为流行的是软件狗硬件电路加密法,其中又以使用单片机的加密技术最为可靠。其硬件通常都带有智能抗分析技术,不可复制,且加密方式灵活、工作可靠、运行速度快、使用方便,不失为软件加密的一种优选方法。
SmartLock软件狗加密系统的硬件部分外形类似火柴盒,两头分别带有一个IEEE-1284并行口的公头和母头,串接在并行口和打印机之间。软件狗使用的是Atmel公司的89C2051单片机,芯片从微机并行口取电,通过并口与加密软件进行通信,系统主要使用代码移植技术实现软件加密。
1 Smart Lock系统的硬件设计
通过研究微机打印口接口电路、IEEE-1284并口通信标准和89C2051型单片机特性,设计出SmartLock加密系统的硬件电路如图1所示。有89C2051单片机、3个锗二极管、1个12MHz晶振、2个30pF瓷片电容和1个电阻共8个元件。系统从并行口中共引出了11根端口线,其中有8根数据线D0~D7、1根状态线(低电平有效 ,当打印机接收完一字节数据允许微机发送下一字节数据时,发给微机信号)、1根控制线(低电平有效,打印机自动换行信号)和地线GND。
微机的标准并口并不提供+5V电源,所以只有从驱动能力较强的数据口“借电”。依据IBM PC AT/XT设计标准,并行口数据位的高电平(4.5V)输出电流为2.5mA(旧式的TTL型)或15mA(CMOS型),而89C2051单片机的典型工作电流为5.5mA/3V,工作频率为12MHz。所以使用D4~D6三根数据线经锗二极管并在一起作为单片机电源(采用锗管的原因是因为它的压降较小,只有0.4V)。同时为减少软件狗硬件的功耗,电路设计得极其简洁,除了单片机,没有其它有源器件。
单片机复位使用的是上电自动复位电路。因此微机对并行口供电几百毫秒之后,单片机才进入正常工作状态。
2 并口通信协议
软件狗使用数据口的D0~D3及D7作为微机向单片机传送数据的前向数据通道(一次送半字节数据,用D7位标志高/低半字节);并口控制/状态信号中的和平时不常用,所以这里用来作为微机向单片机传送数据时的握手信号。信号为高电平,则表示微机已准备好待传送数据,此协议中称为DR(data ready)信号;信号为低电平,表示单片机已准备好接收数据,此协议中称为PR(peripheral ready)信号。
软件狗从微机接收数据的时序如图2所示。具体步骤是:
(1)微机中的加密程序将DR()控制线设置为0,然后在并口的D4~D6数据线上给一个负脉冲后再置恒1,使软件狗复位启动;
(2)加密程序延时300ms后,设置D7为0,表示传送的是数据的低半字节;
(3)加密程序将需要传送的数据放到并口的D0~D3;
(4)加密程序在DR控制线上给出一个正脉冲,通知软件狗数据已准备好;
(5)软件狗收到DR信号后从D0~D3线上读取数据,同时,从D7位可以了解这半字节数据是低位还是高位。读完数据后在PR()状态线上给出负脉冲,通知微机数据已读完,可以进行下一次传送;
(6)加密程序收到PR信号后,即进行下一轮的数据传送,直到最后所有数据传送完毕或一定时间后仍没有收到PR信号,则出错退出。