Twofish加密算法在醫(yī)院遠(yuǎn)程信息系統(tǒng)中的應(yīng)用

為了解決醫(yī)院遠(yuǎn)程信息系統(tǒng)客戶端的數(shù)據(jù)安全問題,我們提出了一種利用Twofish加密算法對客戶端數(shù)據(jù)進行加密的算法。該算法的引入有效克服了手機內(nèi)存的有限性對加密技術(shù)的影響,對系統(tǒng)的安全性進行優(yōu)化。在對Twofish算法加密過程研究的基礎(chǔ)上,設(shè)計出基于Java客戶端代碼的安全實現(xiàn),并通過測試。

一、Twofish加密算法的提出

作為一種標(biāo)準(zhǔn)的數(shù)據(jù)加密算法,DES (DataEncryption Standard)的密鑰長度對于現(xiàn)在計算機的運行速度來說,在某些高機密的場合顯得有點不足,已經(jīng)不再安全,因此出現(xiàn)了一種更高標(biāo)準(zhǔn)的加密算法AES(Advanced Encryption Standard)代替了原來的DES。首先這種加密算法必須是塊加密,因為塊加密可以被用來對數(shù)據(jù)流進行加密,也可以被用來制造一些專用的數(shù)據(jù)文件加密設(shè)備。其次,這種加密算法必須使用更長的密鑰,更大的加密塊,更高的加密速度和靈活性。Twofish則是Counterpane公司向NIST提交的一種滿足AES要求的加密算法。Twofish采用128 bit數(shù)據(jù)塊,128/192/256 bit可變長度密鑰。Twofish加密算法是進入NIST第二輪5種加密算法中的一種,具有加密速度快、結(jié)構(gòu)簡單容易實現(xiàn)、無弱密鑰、適應(yīng)性強等特點。

基于Twofish加密算法特點及應(yīng)用性能,遠(yuǎn)程信息系統(tǒng)采用此加密算法對系統(tǒng)的安全性進行優(yōu)化,使系統(tǒng)能適用手機等移動設(shè)備的無線環(huán)境,同時能讓用戶使用起來更加放
心。

二、Twofish加密算法的加密過程

Twofish加密算法的加密過程如圖1所示:

Twofish加密算法在醫(yī)院遠(yuǎn)程信息系統(tǒng)中的應(yīng)用

開始處P(plaintext)表示需要進行加密的128 bit數(shù)據(jù),即16 B。然后將這16 B分為4組,每組32 bit,即4B。在循環(huán)之前首先對這四組數(shù)據(jù)分別用k0、k1、k2、k3進行異或操作,稱之為input whitening;然后對異或后的數(shù)據(jù)分組進行計算,計算后將1~3、2~4組的數(shù)據(jù)對換,如此循環(huán)15次,再1~3、2~4對換一次。對這4組數(shù)據(jù)分別用k4、k5、k6、k7異或操作,稱之為output whitening;最后將這4組數(shù)據(jù)組合成16 B的數(shù)據(jù),也就是最后的密文C(cipher text),長度與加密前的同樣是128 bit。具體來說,加密前的plain text是128 bit,也就是16 B。假設(shè)這16 B分別是p0,…,p15,將p0,…,p15分為4組,即P0,…,P3,四個字先進行下面的數(shù)學(xué)運算:

Twofish加密算法在醫(yī)院遠(yuǎn)程信息系統(tǒng)中的應(yīng)用

在輸入階段,這些字與4個密鑰擴展進行異或運算:

Twofish加密算法在醫(yī)院遠(yuǎn)程信息系統(tǒng)中的應(yīng)用

在16次循環(huán)的每一次中,4組數(shù)據(jù)的前兩組與當(dāng)前循環(huán)次數(shù)通過F進行計算,計算出2組數(shù)據(jù)。第3組數(shù)據(jù)與計算出的第1組數(shù)據(jù)“異或”,然后向右循環(huán)移動一位。第4組數(shù)據(jù)向左循環(huán)移動一位,然后異或計算出的第2組數(shù)據(jù)。然后將1~3、2~4組數(shù)據(jù)對換,作為下一輪計算的數(shù)據(jù)。程序表示如下:

Twofish加密算法在醫(yī)院遠(yuǎn)程信息系統(tǒng)中的應(yīng)用

這里r=0,…,15,ROR和ROL是一種循環(huán)移位函數(shù),根據(jù)的第二個參數(shù)來決定是左移還是右移第一個參數(shù)。輸出階段不再在最后一輪進行交換。而只是將結(jié)果與4個鑰字進行異或。

Twofish加密算法在醫(yī)院遠(yuǎn)程信息系統(tǒng)中的應(yīng)用

在加密過程中.Twofish使用了兩個函數(shù)即F函數(shù)和G函數(shù)。G函數(shù)是Twofish的核心,輸入一個宇并讓該字的每一個字節(jié)通過一個不同的依賴于密鑰的S盒,然后輸出4個字節(jié),用矩陣表示為:

Twofish加密算法在醫(yī)院遠(yuǎn)程信息系統(tǒng)中的應(yīng)用

其中:X0、X1、X2、X3是輸入字節(jié),Y0、Y1、Y2、Y3是輸出字節(jié)。

F函數(shù)是一個基于64 bit的密鑰獨立的交換過程,它帶3個參數(shù)、2個輸入字RO和R1,以及輪數(shù)r(用來選擇合適的宇密鑰)。RO通過G函數(shù)傳遞,它產(chǎn)生T0;R1被左移位8 bit,然后通過G函數(shù)產(chǎn)生T1。T0和T1被結(jié)合并加入兩個密鑰擴展字。

Twofish加密算法在醫(yī)院遠(yuǎn)程信息系統(tǒng)中的應(yīng)用

由上面的過程描述可以看出,Twofish是一個用32 bit的偽哈德馬轉(zhuǎn)換PHT混合函數(shù)的輸出。偽哈德馬轉(zhuǎn)換PHT(Pseudo Hadamard Transforms)是一種簡單快速的混合操作,例如給出2個輸入值o和6,則32 bit的PHT操作可以被定義為:

Twofish加密算法在醫(yī)院遠(yuǎn)程信息系統(tǒng)中的應(yīng)用

三、利用Twofish加密算法優(yōu)化客戶端

本項目對數(shù)據(jù)安全的設(shè)計是在不改變用戶硬件、不改變底層通信協(xié)議(如Http等)的基礎(chǔ)上通過應(yīng)用層的解決方案來保證數(shù)據(jù)不在路途被篡改、截取或假冒。

根據(jù)上述原則,得出如圖2所示的系統(tǒng)安全性研究的總模型和工作流程圖。

Twofish加密算法在醫(yī)院遠(yuǎn)程信息系統(tǒng)中的應(yīng)用

說明:

①表示客戶將輸入的數(shù)據(jù)信息(用戶登錄、用戶查詢、注冊、預(yù)約等)發(fā)送給服務(wù)器端,同時將輸入的信息利用Twofish加密算法進行加密。

②對輸入的登錄信息進行加密后再傳給服務(wù)器。

③表示服務(wù)器通過JDBC訪問后臺數(shù)據(jù)庫,利用SQL語句對數(shù)據(jù)庫進行查詢、修改等操作。

④如果沒有查到數(shù)據(jù)或輸入信息有誤則返回給服務(wù)器,同時將沒查到結(jié)果或錯誤信息返回給客戶端。

⑤表示如果在數(shù)據(jù)庫中查詢到與SQL語句條件相匹配的數(shù)據(jù)信息,將此信息連同用戶登錄信息一起進行Twofish加密。

⑥表示將加密后的所有信息返回至服務(wù)器。

⑦表示服務(wù)器處理完之后再逐級返回,直到用戶得到相應(yīng)的查詢信息成功或登錄失敗信息。

四、優(yōu)化后的系統(tǒng)客戶端的代碼設(shè)計

系統(tǒng)設(shè)計均采用Java語言實現(xiàn)各種安全功能,其中使用的加密算法提供者采用了Bouncy Castle JCE,因為在眾多的提供者中,它是最安全的,并可免費獲得。首先,在
原來系統(tǒng)的基礎(chǔ)上增加一個類hosTwofish。接著就要考慮如何將客戶端的數(shù)據(jù)進行加密傳輸和將查詢到的數(shù)據(jù)查詢后再解密顯示于客戶端。其實Twofish加密算法和解密算法已經(jīng)比較完善了,現(xiàn)在主要任務(wù)是如何把此加密算法運用于該系統(tǒng)數(shù)據(jù)文件加密和解密中。一個最簡單的方法就是在原來的數(shù)據(jù)操作的過程前后分別調(diào)用該類的加密方法blockEncrypt(byte[] input, int inOffset,object sessionKey),其中input衣示明文,inOffset表示數(shù)據(jù)開始的位置,sessionKey表示用于加密的會話密鑰;解密方法
blockDecrypt (byte[]input, int inOffset, object sessionKey),其中input表示密文,inOffset表示數(shù)據(jù)開始的位置,sessionKey表示用于解密的會話密鑰。然后創(chuàng)建一個類
HosTwofish對象hosTwofish,再通過調(diào)用解密方法blockEncrypt()對輸入的信息sessfonKey進行加密。同理,解密同樣先創(chuàng)建對象hosTwofish,再通過調(diào)用解密方法blockDecrypt()對查詢到的數(shù)據(jù)信息sessionKey進行解密,然后通過XML字符解析返回至客戶端。

五、Twofish加密算法在醫(yī)院遠(yuǎn)程信息系統(tǒng)中的應(yīng)用

為了說明Twofish加密算法應(yīng)用到醫(yī)院遠(yuǎn)程信息系統(tǒng)中保證數(shù)據(jù)傳輸安全的有效性和優(yōu)越性,本文對系統(tǒng)的數(shù)據(jù)安全性進行了測試,從兩個方面說明了TwofiSh加密算法應(yīng)用到醫(yī)院遠(yuǎn)程信息系統(tǒng)優(yōu)點。

1、對訪問的速度影響小

加密算法選擇的不合適就會影響系統(tǒng)的訪問時間。采用Twofish加密算法進行加密處理對系統(tǒng)的響應(yīng)時間影響不大,而用普通的加密技術(shù),則會使系統(tǒng)的響應(yīng)時間明顯增加。

2、數(shù)據(jù)的安全性得到很好的保證

通過大量的系統(tǒng)測試發(fā)現(xiàn),系統(tǒng)有很好的安全性,沒有出現(xiàn)過數(shù)據(jù)丟失和數(shù)據(jù)被修改的現(xiàn)象。

將Twofish加密算法應(yīng)用到醫(yī)院遠(yuǎn)程信息系統(tǒng)用以保證數(shù)據(jù)的安全性是系統(tǒng)的一個顯著創(chuàng)新。項目從保證數(shù)據(jù)遠(yuǎn)程傳輸?shù)陌踩猿霭l(fā),綜合考慮手持設(shè)備內(nèi)存局限性及訪問的數(shù)據(jù)量,優(yōu)化客戶端設(shè)計,使構(gòu)建的系統(tǒng)具有較強的應(yīng)用性和實用性。

小知識之JDBC

JDBC(Java Data Base Connectivity,java數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的Java API,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準(zhǔn),據(jù)此可以構(gòu)建更高級的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應(yīng)用程序,同時,JDBC也是個商標(biāo)名。