A5-1算法

基本原理
A5-1算法用于蜂窩式移動電話系統(tǒng)中的語音加密,主要用于用于的手機到基站之間的加密通信。通信內(nèi)容到基站后先脫密變成明文,然后在進行基站到基站之間、以及基站到用戶手機之間的信息加密,完成通信內(nèi)容在通信過程的加密保護。
每次通話的時候,基站會產(chǎn)生一個64比特的隨機數(shù),與我們手機sim卡內(nèi)本身帶的一個密碼利用一種加密算法生成一個密鑰,這個密鑰就是這次通話過程中使用的主密鑰,此密鑰的生命周期為這一次通話的開始到結(jié)束。一旦通話完成,那么這個密鑰也就沒有用了。
該加密算法把整個通訊的數(shù)據(jù)劃分為每一幀來進行加密。每一幀是有228比特,其中發(fā)送端給接收端的數(shù)據(jù)114比特,接收端反饋給發(fā)送端的數(shù)據(jù)有114比特。除了上面提出的基站給出的64比特的總密鑰,針對每一幀的加密,還有一種叫做會話密鑰,這種會話密鑰每加密一幀都會改變,會話密鑰的生成是由幀號來決定的。每一次的會話密鑰都會產(chǎn)生一個228比特的亂數(shù)來加密這一幀的數(shù)據(jù)。加密的方式是異或。幀號一共用22比特的二進制數(shù)來表示,也就是說一次通話只能傳遞2^22次方的通訊數(shù)據(jù),因為每一次通話只有這么多幀可以進行加密數(shù)據(jù)并且傳遞。
A5-1算法基于三個線性移位反饋寄存器實現(xiàn)的。三個LFSR的級數(shù)分別是19 22 23。
f1(x) = x^19 + x^18 + x^17 + x^14 + 1
f2(x) = x^22 + x^21 + 1
f3(x) = x^23 + x^22 + x^21 + x^8 + 1
三個反饋多項式如上所示。
所用工具
根據(jù)上面所講的,如果要實現(xiàn)a5-1的加密算法,我們需要哪些工具:首先是明文,其次是64位的密鑰,三個LFSR,以及幀號。
算法的輸入應(yīng)該就是三個LFSR的初始值,算法的輸出就是我們加密明文所需要的亂數(shù)。
實現(xiàn)步驟
算法總體來說分為三個部分,初始化,運算,輸出亂數(shù)

首先是初始化部分:
(1)將三個寄存器內(nèi)的所有位全都賦值為0
(2)將三個寄存器做64次的移位操作,每第i次操作,寄存器的反饋內(nèi)容都先與密鑰中的第i位進行異或,然后把這樣異或的結(jié)果作為寄存器此次的反饋內(nèi)容。三個LSFR都要并行的做這樣的工作64次。
(2)將三個寄存器做22次的移位操作,沒第i次操作,寄存器的反饋項都先與幀序號的第i位進行異或,將異或的結(jié)果作為寄存器的最終反饋內(nèi)容,同樣,三個LSFR也都要并行做22次。
上述三步做完,A5-1加密算法的初始化操作也就做完了。另外需要注意的是,A5-1加密算法的LSFR是左移操作,并且,密鑰和幀號都是從最低位到最高位編號。
當初始化步驟完成的時候,此時三個LSFR的狀態(tài)合稱為S0狀態(tài)。
接下來是計算和輸出部分:
大家可以看到,上面的邏輯結(jié)構(gòu)圖中,有一個叫做鐘控的部分,他有三個輸出三個輸入,三個輸入是分別來三個LSFR的某一個固定位,輸出0或者1, 輸出0表示此次這個LSFR不會工作,也就是不會發(fā)生移動等等,輸出的是1的話,那么這個LSFR此次就會移動一位并且得出反饋的結(jié)果。也就是說這個鐘控在控制著三個LSFR的工作與否。
首先根據(jù)鐘控的方式三個LSFR連續(xù)移動100次,但是不輸出亂數(shù),此時應(yīng)該只是做一個混亂的操作。因為LSFR在移動過程中,每一位寄存器內(nèi)的數(shù)值都會不一樣,所以在鐘控決定每個寄存器運行與否的結(jié)果時也會不相同。
接下來會三個LSFR會接著進行連續(xù)的114次的移動,也是根據(jù)鐘控的方式。這一次的移動過程中,三個寄存器將分別把最高位寄存器的值輸出,然后三個值做異或運算,形成第i個亂數(shù)。這次114次移動會生成一個114位的亂數(shù),用于對手機到基站這一段的數(shù)據(jù)加密。
之后再進行一次100次的移動和114次的移動,結(jié)果和上面說的相同,最終產(chǎn)生的114位密鑰用于基站到手機這段的通訊數(shù)據(jù)加密。
關(guān)于鐘控:
鐘控將第一個寄存器的第八位,第二個寄存器的第10位,第三個寄存器的第10位。抽取這三個位用于控制三個LSFR的動作與否。他們決定的原則類似少數(shù)服從多數(shù),三位一共有8種排列方式,當三位中1的個數(shù)多余0的個數(shù)時,那么這三位是1的對應(yīng)的寄存器將會移動, 為0的不會,如果三位數(shù)中0的個數(shù)多余1的個數(shù)時,那么三位之中是0的對應(yīng)的寄存器將會移動。



根據(jù)上面的步驟就可以算出當我們把通訊數(shù)據(jù)切割成每一幀,然后對每一幀進行加密傳輸?shù)臅r候,所需要的那個加密的亂數(shù)是怎么得來的。至于加密過程很簡單,就是明文和亂數(shù)的異或操作。