藍牙加密過程及加密算法

藍牙加密的加密算法為E0,但實際用于加密的是二進制流密碼Kcipher。Kcipher由E0產(chǎn)生。在E0算法中,加密密鑰Kc被修改為實際加密密鑰Kc′。Kc′可在1~16字節(jié)間變化,但其最大有效長度由廠商預置。增加Kc′的長度有利于增強安全性,當前64位加密密鑰已足以滿足大多數(shù)用戶的安全要求。

藍牙加密/解密過程
藍牙加密過程及加密算法
藍牙加密E0算法的主要作用是生成二進制密碼流Kcipher。藍牙密碼流生成系統(tǒng)使用了4個線性移位寄存器(LFSR),每個LFSR的輸出為一個16狀態(tài)的簡單有限狀態(tài)機(求和合成器)的組合,該狀態(tài)機的輸出為字節(jié)流序列,或是初始化階段的隨機初始值。四個寄存器的長度分別為:L1=25,L2=31,L3=33,L4=39,總長度為128位。

密碼流的生成過程
藍牙加密過程及加密算法
設(shè)xti為LSFRi的第t個符號,那么
yt=xt1+xt2+xt3+xt4

求和發(fā)生器的輸出由下列式子給出:
zt=xt1⊕xt2⊕xt3⊕xt4⊕ct0∈{0,1}
st+1=(st+11,st+10)=(yt+ct)/2∈{0,1,2,3}
ct+1=(ct+11,ct+10)=st+1⊕T1[ct] ⊕T2[ct-1]

式中,T1[.]和T2[.]是在GF(4)上的兩個不同的線性雙射。
密碼流的產(chǎn)生需要4個線性反饋移位寄存器的初始值(共128位)和4位用于指定c0和c-1的值。這132位初始值由密碼流產(chǎn)生器自己產(chǎn)生,輸入?yún)?shù)為:Kc、RAND、BD_ADDR和CLK26-1。

下面我們記二進制序列X的第i字節(jié)為X[i],X的第0位為最低位。那么X[i]的最低位對應X的第8i位,X[i]的最高位對應X的第8i+7位。例如藍牙地址的第24位為ADR[3]的最低位。LFSR的初始化過程如下:
1、從Kc推導出Kc′
Kc′(x)=g2(L)(x)(Kc(x)mod g1(L)(x))
式中,deg(g1(L)(x))=8L,為多項式g1(L)(x)最高項的次數(shù);deg(g2(L)(x))≤128-8L,為多項式g2(L)(x)最高項的次數(shù),1≤L≤16,為實際加密密鑰。

2、把Kc′、BD_ADDR、26位藍牙時鐘以及常數(shù)111001共208位移入線性反饋移位寄存器。

各輸入端的信號分配如下:
藍牙加密過程及加密算法
①過程描述如下:打開所有開關(guān)。設(shè)置所有移位寄存器內(nèi)容為0,令t=0。
②開始往LFSRi中移位。每行最右邊的一位最先移入相應的LFSR。
③當?shù)趇行的第一位到達LFSRi的最右邊時,關(guān)閉相應LFSR的開關(guān)。
④在t=39時(此時LFSR4的開關(guān)已關(guān)閉),令c39=c39-1=0,現(xiàn)在c39和c39-1的內(nèi)容已不重要,在此之前,c39和c39-1用來計算輸出序列。
⑤從t=40起求和合成器開始計數(shù),同時產(chǎn)生輸出符號(密鑰流)。剩余的輸入位不斷地移入相應的移位寄存器。當最后一位移入時,移位寄存器記錄輸入為0。

3、混合初始數(shù)據(jù),繼續(xù)計數(shù)直到產(chǎn)生200位密鑰流,同時所有開關(guān)關(guān)閉(此時t=239)。

4、保存ct和ct-1。在t=240時,把最近產(chǎn)生的128位密鑰流作為初始值輸入到四個LFSR。

從此時起,在每一時鐘到來時發(fā)生器產(chǎn)生加/解密序列,與發(fā)送(接收)的有效載荷數(shù)據(jù)進行XOR。