AES加密算法如何在應用軟件保護平臺中實現(xiàn)

軟件保護是信息安全領(lǐng)域研究的一個熱門問題,能否成功解決這個問題,直接關(guān)系到計算機軟件能否安全、可靠地運行。應用軟件保護平臺將實現(xiàn)以下目標:服務器端具有用戶管理、口令管理、用戶數(shù)管理、訪問控制管理、加密功能和解密功能。其中,數(shù)據(jù)文件加密是極其重要的一個過程,下面我們就對數(shù)據(jù)文件加密給予分析和實現(xiàn)。

一、AES加密算法

隨著對稱密碼的發(fā)展,DES數(shù)據(jù)加密標準算法由于密鑰長度較小(56位),已經(jīng)不適應當今分布式開放網(wǎng)絡對數(shù)據(jù)加密安全性的要求,因此1997年NIST公開征集新的數(shù)據(jù)加密標準,即AES加密算法,它匯聚了強安全性、高性能、高效率、易用和靈活等優(yōu)點。AES及iam算法設計有三個密鑰長度:128、192、256位,相對而言,AES加密算法的128密鑰比DES的56密鑰強1021倍。 AES加密算法主要包括三個方面:輪變化、圈數(shù)和密鑰擴展。本文以128為例,介紹加密算法的基本原理;結(jié)合AVR匯編語言,實現(xiàn)高級數(shù)據(jù)加密算法AES。

AES加密算法是一個可變數(shù)據(jù)塊長和可變密鑰長的分組迭代加密算法,數(shù)據(jù)塊長和密鑰長可分別為128、192或256比特,但為了滿足AES加密算法的要求,分組長度為128比特,密鑰長度為128、192或256比特rSJ oAES密碼算法采用的是代替一置換網(wǎng)絡(SPN)結(jié)構(gòu),每一輪操作由4層組成:第1層(字節(jié)替換)為非線性層,用S盒對每一輪中的單個字節(jié)分別進行替換;第2層(行移位)和第3層(列混合)是線性混合層,對當前的狀態(tài)陣按行移位,按列混合;第4層(密鑰加層)用子密鑰與當前狀態(tài)陣進行字節(jié)上的異或算法結(jié)構(gòu)如圖1所示。

AES加密算法如何在應用軟件保護平臺中實現(xiàn)

圖1中,(a)圖給出了算法的整體結(jié)構(gòu),輸入明文X與子密鑰KO異或,然后經(jīng)過:輪迭代最終生成密文Y,其中第1到r—l輪迭代結(jié)構(gòu)為圖(b),第r輪與前面各輪稍微有點不同,缺少混合層。

二、數(shù)據(jù)文件加密層次

數(shù)據(jù)文件加密可以在通信的三個層次中實現(xiàn):鏈路加密、節(jié)點加密和端到端加密。鏈路加密和節(jié)點加密類似,在一條由節(jié)點分開的通信鏈路中,在節(jié)點之間對數(shù)據(jù)進行加密傳輸,而在節(jié)點上數(shù)據(jù)可能以明文形式存在,而端到端加密允許數(shù)據(jù)在從源點到終點的傳輸過程中始終以密文形式存在,采用端到端加密,消息在被傳輸?shù)浇K點之前時不進行解密。因為消息在整個傳輸過程中均受到保護,所以即使有中間節(jié)點被損壞也不會使消息泄露。

而端到端加密系統(tǒng)的實施費用較少,與鏈路加密和節(jié)點加密相比更可靠,更容易設計、實現(xiàn)和維護。端到端加密還避免了其他加密系統(tǒng)所固有的同步問題。因為每個數(shù)據(jù)包均是獨立被加密的,所以一個數(shù)據(jù)包所發(fā)生的傳輸錯誤不會影響后續(xù)的數(shù)據(jù)包。此外,從用戶對安全需求的直覺上講,端到端加密更自然些。因此,安全平臺采用了AES加密算法對網(wǎng)絡數(shù)據(jù)進行端到端加密。

三、應用軟件平臺架構(gòu)

應用軟件保護平臺采用C/S架構(gòu),無論客戶端還是服務器端,都具備AES加解密模塊,具體任務有以下幾點:

(1)從內(nèi)存映射文件讀取用戶會話密鑰信息;

(2)客戶端AES加密和解密模塊負責加密從客戶端發(fā)往服務器的所有網(wǎng)絡數(shù)據(jù)包,同時解密服務器發(fā)回的網(wǎng)絡數(shù)據(jù)包;

(3)服務器AES加密和解密模塊負責解密從客戶端接收的網(wǎng)絡數(shù)據(jù)包,同時加密服務器發(fā)往客戶端的網(wǎng)絡數(shù)據(jù)包;

(4)一旦客戶端退出認證則停止對上層應用的加密和解密服務,清除所有密鑰信息,釋放緩存空間。其各部分架構(gòu)圖如圖2和圖3。

AES<加密算法如何在應用軟件保護平臺中實現(xiàn)

在上面兩個架構(gòu)圖中,實線部分表明的主要是身份認證過程中的數(shù)據(jù)通信過程及其涉及的模塊,虛線部分表明的是具體應用的數(shù)據(jù)通信過程。AES加密和解密模塊屬于應用通信過程和認證通信過程共用模塊,對進出網(wǎng)絡的所有正常通信數(shù)據(jù)進行加密和解密處理,以確保數(shù)據(jù)文件在網(wǎng)上傳輸時的安全性和可靠性。

四、AES加密算法如何在應用軟件保護平臺中實現(xiàn)

1、AE加密算法流程

AES加密算法屬十迭代的分組加密算法,支持128、192、256比特的兩種密鑰長度,并且用128位(16字節(jié))分組加密和解锘數(shù)據(jù),其核心是對明文矩陣進行Nr次輪操作(Nr由密鑰長度決定)。AES加密算法中每一次輪操作都由位變換、行移位、列混淆和輪密鑰加4個函數(shù)組成,第Nr次輪操作不包含列混淆函數(shù),每一輪操作需要用一個輪密鑰,輪密鑰由初始密鑰經(jīng)密鑰擴展后得到。解密算法為加密算法的逆運算。

在軟件保護平臺的實際使用中,選用的是128位的密鑰長度,因此Nr=10,即需要做10輪變換。

2、 AES加密算法實現(xiàn)

對于AES加密過程,先說明一下AES的幾個必備參數(shù)的初始化:

typedef struct _AES{

int Nb;//明文或密文的行數(shù)

int Nr;//加密或解密時的輪數(shù)

int Nk;//密鑰的行數(shù)

unsigned long.Word;//指向密鑰庫的指針

unsigned long.Stace;//指向每一輪加密或解后的結(jié)果

}AES;

這里統(tǒng)一為4列n行,可以用unsigned long效組表示。

Nb=明文或密文長度14;Nk=密鑰長度/4;加密輪數(shù)Nr=Nb<Nk?Nk:Nb+6;

(1)密鑰庫的生成過程

①計算庫的行數(shù)并分配內(nèi)存庫行數(shù)=Nb.(Nr+1);

②初始化密鑰庫

庫的第一個密鑰為原密鑰——直接將密鑰拷貝到密鑰庫中;

③開始計算輪密鑰

unsigned long temp;

for (int c=Nk;c<Nb.(Nr+1);++c)

{//把上一輪的最后一行放入temp

temp=w[c-l];//判斷是不是每一輪密鑰的第一行

if(c% Nk==0)

{//左旋8位

temp=(temp<<8) l(temp>>24);11查Sbox表

SubWord(( byte*)&temp);

temp‘=Rcon[ c/Nk];

}

else if(Nk>6&&(c%Nk=- 4))

{

SubWord((byce*)&temp);

{//w[c - Nk]為上一輪密鑰的第一行

w[c]=w[c - Nk]‘temp;

(2)State生成

為了實現(xiàn)快速列混淆(這里應該是行混淆),State需要多出三行作為緩沖區(qū)。

所以State=new unsi8;ned long[Nb+3];當解密時State+=3;加密時不變。AES加密算法中行混淆的實現(xiàn):

加密時第1、2、3列(從O開始)分別上旋(解密時下旋)l、2、3個字節(jié)。先拷貝前三行到State的最后三行(就是拷貝到多出來的那三行)。設temp(un8ignedchar temp)為行混淆后第n行的數(shù)據(jù)。設Nb=4,那么加密時的邏輯結(jié)構(gòu)為:(空白為無效數(shù)據(jù))拷貝前:拷貝盾:處理完后的結(jié)果:

AES加密算法如何在應用軟件保護平臺中實現(xiàn)

則temp={s0,s5,s8,sf};temp值經(jīng)其他運算后放入State的第n行。

下面是解密時的情況

拷貝前:拷貝后:處理完后的結(jié)果:

AES加密算法如何在應用軟件保護平臺中實現(xiàn)

(3)開始加密

①初始化第一輪

State‘=密鑰庫的第一輪密鑰。

②共Nr-1輪

i、先拷貝前三行到State的最后蘭行(就是拷貝到多出來的那三行)。

ii、temp={Sbox[ s0),Sbox[ s5J,Sbox[ sa] ,Sbox[sf]};

iii、Stace第n行

第一個字節(jié)=Log_02[temp [O]]‘Log_03[ temp[1]‘temp[2]^temp[3];

第二個字節(jié)=Log_02[ temp[1]]‘Log_03[ temp[2]‘temp[ 3J‘temp[0];

第三個字節(jié)=Log_02( temp[2]]‘Log_03[ temp[3]‘temp[0]‘temp[1];

第四個字節(jié)= Log_02[temp[ 3]‘Log_03[temp[0]]‘temp[1]‘temp[2];

③State的當前行‘=密鑰庫的第n輪密鑰相應行;再跳到(2),進行State的下一行計算。

④最后一輪

i、先拷貝前三行到State的最后三行(就是拷貝到多出來的那三行)。

ii、State的當前行={Sbox[s0],Sbox[ s5],Sbox[ sa],Sbox[sf]};

iii、State的當前行‘=密鑰庫的最后一輪密鑰相應行;再跳到(2),進行State的下一行計算。

3、AES加密算法封裝

為了便于應用程序的調(diào)用,AES加密算法被封裝成一個動態(tài)鏈接庫文件AES.dll,并導出Encryption()和Decryption()函數(shù)作為程序接口,SPI加密和解密模塊只需在程序開始時導人這兩個函數(shù),即可直接使用它們來進行加密和解密操作了。

小知識之應用軟件

應用軟件(application software)是用戶可以使用的各種程序設計語言,以及用各種程序設計語言編制的應用程序的集合,分為應用軟件包和用戶程序。應用軟件包是利用計算機解決某類問題而設計的程序的集合,供多用戶使用。計算機軟件分為系統(tǒng)軟件和應用軟件兩大類。應用軟件是為滿足用戶不同領(lǐng)域、不同問題的應用需求而提供的那部分軟件。 它可以拓寬計算機系統(tǒng)的應用領(lǐng)域,放大硬件的功能。