1 跳码的软件实现
目前跳码的实现多借助于专用的处理器硬件,如Microchip的HCSXXX系列,美国MACRSTAR公司的TR13XX,ACM公司的ACM1330E系列,这些产品都是专利产品,内部算法对外不公开。设计者要想使用这些产品,必须学习新的处理器,并且付出一定的专利费。这里提出一种跳码的完全软件实现,使用合适的普通单片机就可运行这种跳码软件。
跳码的实现核心是非线性加密算法,利用32位非线性反馈移位寄存器(NLFSR)和64位密钥组成的加密单元,可实现对输入32位二进制数据的加密,加密后的输出是32位二进制随机数。输入有一位变化,加密后的输出统计上将有一半以上的位发生变化,具有相当高的随机性。图1是跳码加密和解密的示意图:
注意,对于同一套加密系统,加密单元和解密单元的64位密钥是相同的,且是不公开的,这是典型的私钥加密系统。
1.1 加密单元
依据上图,加密时,将欲加密的32位二进制数据X存入32位移位寄存器(shift register,SR)中,选取32位SR的1、9、20、26、31位和固定32位二进制数据OX3A5C742E组成非线性函数(NLR)的输入,NLR的输出、SR的0、16位、以及64位密钥移位寄存器(key FSR)移位后的0位,这些位数据异或(XOR)后产生的1bit数据作为32位SR的31位。循环此操作528轮后,32位SR 中的数据即为X经加密后的跳码数据Y。这里给出用VC6.0对该加密算法的实现:
1.2 解密单元
跳码解密单元是加密单元的逆操作。依据图3,解密时,将欲解密的32位二进制跳码Y存入32位SR中,选取32位SR的0、8、19、25、30位和固定32位二进制数据OX3A5C742E组成非线性函数NLR的输入,NLR的输出、SR的15、31位、以及64位key FSR移位后的15位,这些位数据异或(XOR)后产生的1bit数据作为32位SR的0位。循环此操作528轮后,32位SR中的数据即为解密后的数据X。这里给出用VC6.0对该解密算法的实现:
1.3 跳码加解密算法在单片机中的实现
上述跳码算法,即加密函数Encrypt()和解密函数Decrypt(),接收的参数为32位无符号整数和64位无符号整数,返回的是32位无符号整数。单片机大多是8位机,其编译开发环境所定义的同样数据类型的长度与PC机有所不同,如unsigned int在PC上定义为32位无符号二进制数,而在单片机上常定义为16位无符号二进制数。假设单片机的unsigned int和unsigned long分别表示16位无符号二进制数和32位无符号二进制数,可将上述函数改为: