为了解决医院远程信息系统客户端的数据安全问题,我们提出了一种利用Twofish加密算法对客户端数据进行加密的算法。该算法的引入有效克服了手机内存的有限性对加密技术的影响,对系统的安全性进行优化。在对Twofish算法加密过程研究的基础上,设计出基于Java客户端代码的安全实现,并通过测试。
一、Twofish加密算法的提出
作为一种标准的数据加密算法,DES (DataEncryption Standard)的密钥长度对于现在计算机的运行速度来说,在某些高机密的场合显得有点不足,已经不再安全,因此出现了一种更高标准的加密算法AES(Advanced Encryption Standard)代替了原来的DES。首先这种加密算法必须是块加密,因为块加密可以被用来对数据流进行加密,也可以被用来制造一些专用的数据文件加密设备。其次,这种加密算法必须使用更长的密钥,更大的加密块,更高的加密速度和灵活性。Twofish则是Counterpane公司向NIST提交的一种满足AES要求的加密算法。Twofish采用128 bit数据块,128/192/256 bit可变长度密钥。Twofish加密算法是进入NIST第二轮5种加密算法中的一种,具有加密速度快、结构简单容易实现、无弱密钥、适应性强等特点。
基于Twofish加密算法特点及应用性能,远程信息系统采用此加密算法对系统的安全性进行优化,使系统能适用手机等移动设备的无线环境,同时能让用户使用起来更加放
心。
二、Twofish加密算法的加密过程
Twofish加密算法的加密过程如图1所示:
开始处P(plaintext)表示需要进行加密的128 bit数据,即16 B。然后将这16 B分为4组,每组32 bit,即4B。在循环之前首先对这四组数据分别用k0、k1、k2、k3进行异或操作,称之为input whitening;然后对异或后的数据分组进行计算,计算后将1~3、2~4组的数据对换,如此循环15次,再1~3、2~4对换一次。对这4组数据分别用k4、k5、k6、k7异或操作,称之为output whitening;最后将这4组数据组合成16 B的数据,也就是最后的密文C(cipher text),长度与加密前的同样是128 bit。具体来说,加密前的plain text是128 bit,也就是16 B。假设这16 B分别是p0,…,p15,将p0,…,p15分为4组,即P0,…,P3,四个字先进行下面的数学运算:
在输入阶段,这些字与4个密钥扩展进行异或运算:
在16次循环的每一次中,4组数据的前两组与当前循环次数通过F进行计算,计算出2组数据。第3组数据与计算出的第1组数据“异或”,然后向右循环移动一位。第4组数据向左循环移动一位,然后异或计算出的第2组数据。然后将1~3、2~4组数据对换,作为下一轮计算的数据。程序表示如下:
这里r=0,…,15,ROR和ROL是一种循环移位函数,根据的第二个参数来决定是左移还是右移第一个参数。输出阶段不再在最后一轮进行交换。而只是将结果与4个钥字进行异或。
在加密过程中.Twofish使用了两个函数即F函数和G函数。G函数是Twofish的核心,输入一个宇并让该字的每一个字节通过一个不同的依赖于密钥的S盒,然后输出4个字节,用矩阵表示为:
其中:X0、X1、X2、X3是输入字节,Y0、Y1、Y2、Y3是输出字节。
F函数是一个基于64 bit的密钥独立的交换过程,它带3个参数、2个输入字RO和R1,以及轮数r(用来选择合适的宇密钥)。RO通过G函数传递,它产生T0;R1被左移位8 bit,然后通过G函数产生T1。T0和T1被结合并加入两个密钥扩展字。
由上面的过程描述可以看出,Twofish是一个用32 bit的伪哈德马转换PHT混合函数的输出。伪哈德马转换PHT(Pseudo Hadamard Transforms)是一种简单快速的混合操作,例如给出2个输入值o和6,则32 bit的PHT操作可以被定义为:
三、利用Twofish加密算法优化客户端
本项目对数据安全的设计是在不改变用户硬件、不改变底层通信协议(如Http等)的基础上通过应用层的解决方案来保证数据不在路途被篡改、截取或假冒。
根据上述原则,得出如图2所示的系统安全性研究的总模型和工作流程图。
说明:
①表示客户将输入的数据信息(用户登录、用户查询、注册、预约等)发送给服务器端,同时将输入的信息利用Twofish加密算法进行加密。
②对输入的登录信息进行加密后再传给服务器。
③表示服务器通过JDBC访问后台数据库,利用SQL语句对数据库进行查询、修改等操作。
④如果没有查到数据或输入信息有误则返回给服务器,同时将没查到结果或错误信息返回给客户端。
⑤表示如果在数据库中查询到与SQL语句条件相匹配的数据信息,将此信息连同用户登录信息一起进行Twofish加密。
⑥表示将加密后的所有信息返回至服务器。
⑦表示服务器处理完之后再逐级返回,直到用户得到相应的查询信息成功或登录失败信息。
四、优化后的系统客户端的代码设计
系统设计均采用Java语言实现各种安全功能,其中使用的加密算法提供者采用了Bouncy Castle JCE,因为在众多的提供者中,它是最安全的,并可免费获得。首先,在
原来系统的基础上增加一个类hosTwofish。接着就要考虑如何将客户端的数据进行加密传输和将查询到的数据查询后再解密显示于客户端。其实Twofish加密算法和解密算法已经比较完善了,现在主要任务是如何把此加密算法运用于该系统数据文件加密和解密中。一个最简单的方法就是在原来的数据操作的过程前后分别调用该类的加密方法blockEncrypt(byte[] input, int inOffset,object sessionKey),其中input衣示明文,inOffset表示数据开始的位置,sessionKey表示用于加密的会话密钥;解密方法
blockDecrypt (byte[]input, int inOffset, object sessionKey),其中input表示密文,inOffset表示数据开始的位置,sessionKey表示用于解密的会话密钥。然后创建一个类
HosTwofish对象hosTwofish,再通过调用解密方法blockEncrypt()对输入的信息sessfonKey进行加密。同理,解密同样先创建对象hosTwofish,再通过调用解密方法blockDecrypt()对查询到的数据信息sessionKey进行解密,然后通过XML字符解析返回至客户端。
五、Twofish加密算法在医院远程信息系统中的应用
为了说明Twofish加密算法应用到医院远程信息系统中保证数据传输安全的有效性和优越性,本文对系统的数据安全性进行了测试,从两个方面说明了TwofiSh加密算法应用到医院远程信息系统优点。
1、对访问的速度影响小
加密算法选择的不合适就会影响系统的访问时间。采用Twofish加密算法进行加密处理对系统的响应时间影响不大,而用普通的加密技术,则会使系统的响应时间明显增加。
2、数据的安全性得到很好的保证
通过大量的系统测试发现,系统有很好的安全性,没有出现过数据丢失和数据被修改的现象。
将Twofish加密算法应用到医院远程信息系统用以保证数据的安全性是系统的一个显著创新。项目从保证数据远程传输的安全性出发,综合考虑手持设备内存局限性及访问的数据量,优化客户端设计,使构建的系统具有较强的应用性和实用性。
小知识之JDBC
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。