虚拟仪器技术是利用高性能的模块化硬件,结合高效灵活的软件来完成各种测试、测量和自动化的应用,特别是基于PC的虚拟仪器既增加了仪器的种类和功能,又降低了仪器的价格,但是却使仪器的盗版和侵权问题也日益严重。因此,虚拟仪器的软件加密技术日益受到了人们的重视。
一、虚拟仪器软件的加密方法
虚拟仪器软件的加密保护通常有2种方法,即软件加密和硬件加密。
软件加密技术一般采用限制用户的权限和防止非法拷贝,主要方法是反跟踪技术和代码插入技术,并通过运行一段程序来进行各种方式的加密,而这段程序本身就是一个告密者,会给破解者留下线索。
硬件加密法则是通过硬件来实现对软件的加密保护,主要就是密钥技术——软件在运行时必须同硬件正确交换数据,否则程序不运行或者不能运行主要的功能.通常的密钥技术有磁盘加密法、软件狗法和加密卡法。
由于所设计的便携式仪器机就是一台体积缩小了的PC,它除了向用户提供仪器功能外,还要向用户开放PC的全部功能,甚至包括操作系统的重新安装和硬盘的格式化等操作,所以使用磁盘加密法不可取,加密狗则是插在PC的并口或通用串行总线(USB)口等外部接口上,一些并口的加密狗由于供电和数据方向设置的问题会影响到打印机或其他并口外设的正常工作,而外插的设备也会影响便携式仪器机的扩展性和紧凑性。
自行设计的仪器功能板卡,是将密钥部分添加在仪器的功能卡上,或者在功能卡上将数据进行前期加工,使仪器应用软件脱离特制的功能板卡就不能够正确地运行,其效果明显好于上面2种方法,因此,就要花费人力、物力去开发、设计板卡,而这种板卡的功能与市场上常见的板卡极其相近(除数据加密处理部分外),而这种重复开发使仪器的开发周期延长。
根据便携式仪器机的特点和内部扩展插槽的使用情况,采用设计成工业标准结构(hidustry Standard Architecture,简称ISA)接口形式的加密卡方法,系统结构如图1所示。由于仪器机的外部没有多余插件,因此保持了整机的紧凑和便携性。另外,加密卡还有设计灵活、兼容性好、读写速度快和开发周期短等优点,虚拟仪器软件通过内嵌的软件模块与加密卡进行数据交换时,用户察觉不到等待的时间。采用软件和硬件结合的加密方法,既在仪器软件中加入反跟踪、防拷贝等软件加密的算法,又设计了一块专用的加密卡与之配合,对虚拟仪器的软件进行保护。
二、复杂可编程逻辑器件加密卡的工作原理
复杂可编程逻辑器件(Complex ProgrammableLogic Device,简称CPLD)是新型的可编程逻辑器件,几乎可适用于所有的门阵列和各种规模的数字集成电路中,它的许多特点特别适合于产品的样片开发和小批量生产,用高密度的CPLD芯片代替分立元件和小规模集成电路,将加密算法和系统总线接口逻辑做在一块芯片中,可节省板卡面积,方便进行调试,并且易于发现和诊断板卡故障,因此减少了硬件设计和后期维护的工作量。利用CPLD加密卡实现加密的方法有很多,常用的有明暗码转换、数据运算格式加密和识别关键字的方法。
明暗码转换加密方法是将明码文件按约定算法转换成暗码文件后存储在磁盘上,当程序运行时,通过CPLD加密卡,将磁盘内的暗码文件转换成明码文件送入内存中执行。数据运算格式加密方法是在虚拟仪器软件中,当某些数据需要进行一些格式上的转换和运算处理时,将这些软件上进行的数据格式转换,交由CPLD加密卡来实现,并通过数据格式和处理算法的保密来实现加密。
识别关键字的加密方法是应用程序首先根据加密卡的输入/输出(I/O)地址,将数据A送入加密卡,加密卡通过双方约定命令协议生成结果B(B=F(A),其中F表示加密函数),并将结果B通过输出地址从加密卡的寄存器中送回程序,数据B就是虚拟仪器软件要测试的关键字。再由软件进行核查,若与希望得到的结果相符,则证实加密卡的存在并正常工作,因此软件继续运行,否则中断软件的运行,在虚拟仪器的应用程序中,还可通过不定时的随机调用查询程序,增加破解的难度和延长破解的时间,再在应用程序中结合软件的反跟踪措施,以防止查询加密卡的程序模块被解除。
三、基于复杂可编程逻辑器件加密卡的设计与实现
1、硬件的实现
加密芯片选用Altera公司的MAX7000系列的CPLD,是高密度、高性能的互补金属氧化物半导体(Complementary Metal - Oxide - Semiconductor,简称CMOS)、电可擦除可编程逻辑器件(Electronic Pro-grammable Logic Device,简称EPLD),其编程快速而有效,并保证可编程可擦除100次,而且MAX7000器件都包含一个可编程的保密位,当保密位被编程时,器件内实现的设计将不能被复制和读出。由于在电可擦可编程只读存储器( EEPROM)内的数据是看不见的,所以利用保密位可实现高级设计保密。当对器件重新编程时,保密位连同其他的编程数据均能被擦除和重写,这样就达到了对CPLD内部固化的加密算法进行保护的目的。
在本设计中,采用84脚塑料有引线芯片载体(PLCC)封装的芯片,此类芯片可用的宏单元从64个到160个,用户I/O引脚为64或68个。在加密卡上设置芯片插座,根据算法的需要,可方便地更换相同封装及不同容量的芯片,以增大加密卡之间的差异。另外,此类芯片的输出驱动能在3.3 V或5.0 V的电压下工作,并且允许在混合电压的系统中使用,使以后更改成其他形式的总线接口更方便。
2、软件的实现
软件设计包括两部分:CPLD内部固化的程序和模块化的、可供调用的加密卡识别程序部分,并以程序所使用的加密算法中识别关键字的方法为例进行说明。CPLD内固化程序的流程图如图2所示,用硬件描述语言( VHDL)编写,开发工具使用Altera公司的MAX+PLUSⅡ软件,编译成POF文件并通过自制的下载电缆或编程器下载到CPLD中。程序采用模块化设计,将加密算法和接口逻辑部分分别设计成独立的模块,以方便日后重新改写或升级加密卡的加密算法,或者修改为其他形式的总线接口.在流程图中,根据协议处理数据部分还要判断所送来的数据是否为有效命令和本芯片内是否存有此算法等,以及返回相应的数据,这里由于涉及到仪器命令字规则的保密问题,所以不做具体描述。
CPLD内的固化程序和识别程序规定了所传输的数据和命令的格式以及命令的意义,根据协议来选择不同的加密算法对数据进行处理,可设计多种加密算法,但是每块加密卡上的芯片中所存储的加密算法都不相同,因此增加了加密卡的复制难度。
识别程序流程图如图3所示。为减少识别程序的查询时间,只测试加密卡的某一算法,只有在发现问题时才调用自检程序将加密卡的全部算法做一一测试。识别程序和自检程序都采用汇编语言编写,做成动态链接库供虚拟仪器应用软件进行调用。在识别程序中,加入超时检查,若在一段时间内仍不能从加密卡的I/O地址读入有效值,则视加密卡不存在或已经损坏,程序做转出错处理,利用Altera公司的MAX+PLUSⅡ软件的时间分析功能,根据所选择芯片的参数确定芯片处理数据的最长延时,再结合总线的接口时序,估算出从识别程序发送出数据到接收到加密卡反馈的正确数据的最长时间。此时间设置为超时等待的参考时间,并配合计数检查,来实现单一进程下的超时检查。在出错处理程序中,调用加密卡自检程序,只要自检没有通过,无论是未安装加密卡还是加密卡发生故障,都提示系统故障请报修的信息.这样可使非法用户无法正常使用仪器,而合法用户的仪器硬件故障可以得到及时的发现和处理,因此不会影响仪器的使用。
自检程序的原理是调用识别程序,将所采用的加密算法全部测试一遍,根据加密卡所反馈的信息来判定加密卡的状态。由于每块加密卡不一定能存储全部加密算法,而且各加密卡中的算法也不相同,无法保证每一块加密卡对每种算法都有反馈,因此,在加密卡的反馈数据中,设置了“无此算法信息”,但是此信息易于被破解者利用来欺骗自检程序,以达到拆除加密卡的目的。为防止这种情况的发生,在自检程序(见图4)中,设置了计数器,反馈“无此算法信息”的次数若超过预置值则认为出错,同样要做转报错处理。
3、硬件和软件的调试
加密卡硬件的调试主要是测试加密卡的时序与PC机ISA总线接口的时序能否配合,即加密卡所使用到的地址、数据和控制总线的状态在工作时能否满足ISA接口的时序需要.在VHDL语言程序编译下载到CPLD芯片之前,在MAX+PLUSⅡ软件的环境中进行功能仿真和时序逻辑测试,测试成功后将程序编译下载到CPLD中,再使用逻辑分析仪,采用黑箱测试法和穷举法,对加密卡的接口时序和软件功能进行测试。
小知识之CPLD
CPLD(Complex Programmable Logic Device)复杂可编程逻辑器件,是从PAL和GAL器件发展出来的器件,相对而言规模大,结构复杂,属于大规模集成电路范CP围。是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统。