林永菁 (福建兒童發展職業學院信息中心,福建 福州350007)
以密鑰為標準,可將密碼體制分為對稱密碼體制和非對稱密碼體制[1-3]。
在對稱密碼體制下,加密密鑰與解密密鑰相同或一個密鑰由另一個密鑰簡單推導出來。在這種加密體制下,通信雙方的解密密鑰需要由發方經過安全信道傳送給收方。密碼體制的安全性完全取決于密鑰的安全。對稱密碼體制的優點是:安全性高,加解密速度快,易于實現。其缺點是:隨著網絡規模的擴大,密鑰管理及解決消息確認問題比較困難;缺乏自動檢測密鑰泄露的能力。
對稱密碼體制又可分為序列加密和分組加密。①序列加密。在序列加密中,將明文消息按字符逐位加密,加解密密鑰序列是由密鑰流生成器用確定性算法產生的偽隨機序列。密鑰流序列的安全可靠性決定序列密碼體制的安全強度。②分組加密。在分組加密中,將明文消息分組,在密鑰的作用下逐組進行加密。分組密碼算法的應用范圍較為廣泛,它是許多密碼系統的重要組成部分,如偽隨機數生成器、流密碼、認證碼和Hash函數的構造等。分組密碼具有高強度、高速率、便于軟硬件實現的特點,也正是由于這些特點使它成為標準化進程的首選體制。在用分組加密時,為了便于實現,實際應用中常常將簡單容易實現的密碼系統組合成比較復雜、密鑰量大的密碼系統。最有效、最實際的分組密碼一般都是采用乘積組合方法。它的基本思想是把幾個簡單運算合成為一個復雜的加密函數。這些簡單運算可以是移位、異或運算、算術加減乘除運算、簡單替換等。將加密函數循環多次形成迭代密碼屬于乘積密碼中最簡單的一種。
在分組密碼設計中,為了能夠最大程度地改變明文的統計分布,往往進行置亂和擴散操作。為了達到改變明文統計特性的目的,可以采用替代操作。一個安全性較高的密碼系統往往綜合使用替代、置亂、擴散等操作,并通過多次迭代獲得好的加密效果和較高的安全性能。
下面,筆者使用分組密碼體制完成語音加密算法的設計。
在進行算法設計時遵循了以下原則:①數據恢復后不影響語音的可懂度;②加密數據與明文數據比較,冗余要小;③盡可能保證密鑰不重復。
以往的加解密算法具有算法固定、復雜度高的特點,筆者設計的加解密算法基于 “一次一密”加密思想,以數據包為單位,加密每個數據包所用的算法都不同,這樣以算法的不斷變化來代替復雜度提供的安全性。該算法需要在通信的2端分別建立1個加密算法庫和1個數據庫。其中,算法庫中包含n種加解密算法,如加法、減法、移位、位置變換等。數據庫中的數據用來與明文數據進行指定的運算,算法庫及數據庫的大小、包括的具體內容都可以由用戶自行定義。
算法由如下元素構成:
{E(f1,f2,…,fn),Pc(Pc最大值不超過數據庫中的數據個數),D(d1,d2,…,dm)}
式中,E表示算法庫,算法庫中的算法用fi表示;Pc表示加密密鑰(指針),指針指到的算法為當次加密采用的算法;D表示數據庫,dm為數據庫中的第m位數據。下面具體介紹算法庫、數據庫的建立及密鑰的產生。
1)算法庫的構成 設計中構造的算法庫以表的形式存放在S3C2440A存儲區中,置加解密算法表E[i]=fi。算法庫中包含有128個小算法,有加法、減法、移位及位置變換類算法,移位算法就是通過調整移位方向 (左移和右移)、移位位數形成不同的算法,為保證數據加密后可恢復,算法庫中的移位算法均是循環移位。例如采用移位算法時,可以將明文數據左移,左移1位、2位,…,t(t<15)位,也可以右移,右移1~t位,這些均可構成不同的加密算法。數據位置變換就是對每包288bit編碼數據的原始數據的位置重新排序。位置變換的方法有多種,如設原始數據位為A1A2A3…Ak,位置倒置后變換為AkAk-1Ak-2…A2A1;相鄰位置數據交換:交換后的數據為A2A1A4A3…Ak-1Ak。其中,Ai為單字數據。
當加密算法選用加法和減法運算時,需要從數據庫中選出一個數據與明文數據參與指定的運算。用式子表示為Cc=Mc±dmc,其中,Cc表示加密的密文數據;Mc表示明文數據;dmc為選用的數據庫中的數據。為避免數據冗余,算法中的數據加減運算不考慮進位與借位。
由以上敘述可知,構成算法庫的小算法種類眾多,但一些算法過于簡單不能滿足保密需求。筆者從中選取了128種能較大程度改變明文數據結構的算法用于語音加解密。算法表中f1為加法,f2為減法,f3~f128分別表示各種移位、位置變換類算法,算法序號i與Pc的對應關系為:i=Pc%128+1。
2)密鑰的產生 在對稱加密算法中,密鑰是關系算法安全的一個關鍵性因素。如果在加密過程中使用同一個密鑰,會降低算法的安全性,因此應保證各分組加密時所用密鑰的不同。
在加解密設計中,密鑰由隨機數產生函數生成,該函數以系統當前時鐘作為種子值,其優勢是:每次加密調用密鑰生成函數的時間不同,種子值也就不同,從而生成不同的隨機序列即密鑰。
3)數據庫的建立 與算法庫的存放方式相同,數據庫也以表的方式存放在存儲區中,其表示形式為D[m]=dm(m<212),設計中取m值為4096,dm為95~4096+95之間的自然數。dm按由小至大的順序在數據表中順次存放,即D[0]=95,D[1]=96,…。Pc與m的對應關系為:m=Pc。
加密步驟如下:①由隨機數產生函數生成加密密鑰Pc;②根據i=Pc%128+1值選出當前加密算法fi,并判斷是否需要從數據庫中選擇數據,若需要,根據Pc值從數據庫中選取數據dm;③按選取的算法進行加密,加密后將密鑰與加密數據存入預先設置的CPU加密緩沖區中等待下一步處理。緩沖區中存放的加密數據包格式如圖1所示,圖2為加密流程圖。

圖1 加密緩沖區中數據包格式
解密是加密的逆過程,解密步驟如下:①從解密緩沖區中提取出密鑰Pc及需要解密的數據;②根據密鑰值判定加密所用算法,而后選出加密算法對應的解密算法:加密時所用的加法、減法、左移、右移分別對應解密時的減法、加法、右移、左移 (采用位置變換類算法時,加解密用同一種算法);③解密,將解密后的數據存入解碼緩沖區等待處理。
解密方式有以下2種。
1)加解密算法庫獨立 這種方式需要在通信的兩端分別建立2個算法庫:加密算法庫E[i]和與之對應的解密算法庫E′[i]。對應的算法fi與f′i互為反變換,如加密算法f1為加法,對應的解密算法f′1則為減法。解密時,提取出解密緩沖區中數據的前2字節即為密鑰Pi,根據Pi值在解密算法庫中選出解密算法,從而完成數據解密。
2)加解密共用一個算法庫 此種方式不需要另建解密算法庫,加解密共用1個算法庫及數據庫。接收端先根據密鑰值判斷發送端所用加密算法的類型,再采用相應的解密算法實現數據解密。
這2種解密方式各有優缺點,前者需要建立1個解密算法庫,較繁瑣;后者不用重新建立算法庫,但要編寫1個加密算法密鑰到解密算法密鑰的轉換程序。筆者采用前者。解密具體流程如圖3所示。

圖2 加密流程圖

圖3 解密流程圖
[1]韓紀慶,張磊,鄭鐵然 .語音信號處理 [M].北京:清華大學出版社,2004.
[2]冷豐麟 .基于聲碼化技術的數字語音加密系統的研究 [D].大連:大連海事大學,2009.
[3]劉洪林,蔣昌茂,張建永.IP語音通信原理、設計及組網應用 [M].北京:電子工業出版社,2009.