畢業(yè)設(shè)計(jì)論文-3G的AKA協(xié)議中F1至F5的UE端的實(shí)現(xiàn)(含源程序代碼)_第1頁
畢業(yè)設(shè)計(jì)論文-3G的AKA協(xié)議中F1至F5的UE端的實(shí)現(xiàn)(含源程序代碼)_第2頁
畢業(yè)設(shè)計(jì)論文-3G的AKA協(xié)議中F1至F5的UE端的實(shí)現(xiàn)(含源程序代碼)_第3頁
畢業(yè)設(shè)計(jì)論文-3G的AKA協(xié)議中F1至F5的UE端的實(shí)現(xiàn)(含源程序代碼)_第4頁
畢業(yè)設(shè)計(jì)論文-3G的AKA協(xié)議中F1至F5的UE端的實(shí)現(xiàn)(含源程序代碼)_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、源程序代碼等全套設(shè)計(jì)聯(lián)系源程序代碼等全套設(shè)計(jì)聯(lián)系 QQ 174320523 各專業(yè)都有各專業(yè)都有 分類號:分類號:TP309.7TP309.7 U U D D C C:D10621-408-(2007)D10621-408-(2007) 6161-06161-0 密密 級:公級:公 開開 編編 號:號:20030312712003031271 成成 都都 信信 息息 工工 程程 學(xué)學(xué) 院院 學(xué)學(xué) 位位 論論 文文 3G3G 的的 AKAAKA 協(xié)議中協(xié)議中 F1F1 至至 F5F5 的的 UEUE 端的實(shí)現(xiàn)端的實(shí)現(xiàn) 論文作者姓名:論文作者姓名:曹偉曹偉 申請學(xué)位專業(yè):申請學(xué)位專業(yè):計(jì)算機(jī)科學(xué)與

2、技術(shù)計(jì)算機(jī)科學(xué)與技術(shù) 申請學(xué)位類別:申請學(xué)位類別:工學(xué)學(xué)士工學(xué)學(xué)士 指指導(dǎo)導(dǎo)教教師師姓姓名名(職職稱稱) : 陳麟(副教授)陳麟(副教授) 論文提交日期:論文提交日期:20072007 年年 0606 月月 0202 日日 第 1 頁 共 29 頁 3G3G 的的 AKAAKA 協(xié)議中協(xié)議中 F1F1 至至 F5F5 的的 UEUE 端的實(shí)現(xiàn)端的實(shí)現(xiàn) 摘摘 要要 隨著移動通信系統(tǒng)的不斷發(fā)展,第三代移動通信系統(tǒng)(3G)成為當(dāng)前通信 領(lǐng)域研究開發(fā)的熱點(diǎn)。在 3G 系統(tǒng)中,許多新型的數(shù)據(jù)業(yè)務(wù)將開放。在業(yè)務(wù)增多 的同時(shí),系統(tǒng)安全問題將變得更加重要。 AKA 協(xié)議就是 3G 系統(tǒng)中用來實(shí)現(xiàn)用戶終端與認(rèn)證

3、服務(wù)器端的雙向認(rèn)證及密 鑰分配機(jī)制的一個安全協(xié)議。3GPP 為 3G 通信系統(tǒng)定義了 12 種鑒權(quán)算法:f0- f9,f1*和 f5*。AKA 利用了其中的 f0-f5*算法。本次設(shè)計(jì)為其中的 f1-f5 算法 在系統(tǒng)用戶終端(users equipment,UE 端)的實(shí)現(xiàn)。設(shè)計(jì)采用 AES 作為內(nèi)核 加密算法,即 Rijndael 算法。因此,本次設(shè)計(jì)從 AES 入手,通過對 AES 的具體 分析和代碼實(shí)現(xiàn),然后利用對 AES 的調(diào)用,實(shí)現(xiàn) f1-f5 的功能。 AKA 協(xié)議中的用戶終端一般指智能卡,在 3G 系統(tǒng)中,也就是第三代手機(jī)卡。 由于智能卡設(shè)備不像計(jì)算機(jī)系統(tǒng)那樣充夠足的資源,一般

4、都采用 8 位系統(tǒng)。因 此在設(shè)計(jì)內(nèi)核算法的時(shí)候,考慮到程序在實(shí)現(xiàn)上花費(fèi)的時(shí)間資源和硬件資源問 題,采用 8 位的 AES 實(shí)現(xiàn)算法,而不是 32 位。另外,由于此次設(shè)計(jì)采用 AES 為 核心算法,因此還對 AES 相關(guān)數(shù)學(xué)基礎(chǔ)知識,實(shí)現(xiàn)原理做了詳細(xì)的分析和了解。 關(guān)鍵詞關(guān)鍵詞:AKA ;f1-f5 ;Rijndael the UE Implement of F1 to F5 for 3G AKA Protocol Abstract Along with mobile communication system unceasing development, the third generation

5、 mobile communication system(3G) becomes the hot spot in the current mobile communication domain. In the 3G system, many new data services will open. Increases which while the service, the system safety question will become more and more important. The AKA protocol is a security protocol in the 3G s

6、ystem. It including seven algorithm: f1-f5, f1* and f5*. This design only involves f1-f5 on the users equipment (UE) implement. This design is based on the AES encryption algorithm. So, in this article, contains two sides:f1-f5 and AES. Because we design for the users equipment terminal, it involves

7、 a question about whether the system hardware resources sufficient. So, this design uses 8 bit AES encryption algorithm. Key words: AKA ; f1-f5 ; Rijndael 目目 錄錄 論文總頁數(shù):24 頁 1引言.1 1.1課題背景.1 1.2國內(nèi)外研究現(xiàn)狀.1 1.3本課題研究的意義.1 1.4本課題的研究方法.1 2AES 算法原理和 C 語言代碼設(shè)計(jì)實(shí)現(xiàn) .2 2.1分組密碼設(shè)計(jì)準(zhǔn)則.2 2.2RIJNDAEL算法綜述 .2 2.3RIJNDAEL加密

8、步驟及 C 語言代碼實(shí)現(xiàn) .4 2.3.1SubBytes.4 2.3.2ShiftRows.5 2.3.3MixColumns.7 2.3.4AddRoundKey.10 2.3.5加密過程主函數(shù).14 3F1-F5 算法介紹及 C 語言代碼設(shè)計(jì)實(shí)現(xiàn).14 3.1F1-F5 介紹 .14 3.2F1-F5 的 C 語言代碼實(shí)現(xiàn) .16 4代碼測試和案例.19 結(jié) 論.21 參考文獻(xiàn).22 致 謝.23 聲 明.24 第 1 頁 共 24 頁 4 4引言引言 4.14.1課題背景課題背景 隨著移動通信系統(tǒng)的不斷發(fā)展,第三代移動通信系統(tǒng)(3G)是當(dāng)前通信領(lǐng) 域研究開發(fā)的熱點(diǎn)。在 3G 系統(tǒng)中,除

9、了要開放語音業(yè)務(wù)外,還要開放電子商務(wù)、 電子貿(mào)易、網(wǎng)絡(luò)服務(wù)等新型的業(yè)務(wù)。為此,需要在網(wǎng)絡(luò)系統(tǒng)中增加安全保護(hù)措 施。若信息在網(wǎng)絡(luò)中傳輸沒有任何保護(hù)措施,就容易受到攻擊或被竊聽、被修 改等,而直接影響用戶的利益;若未經(jīng)授權(quán)的業(yè)務(wù)直接接入到網(wǎng)絡(luò)中來,也會 影響運(yùn)營商的利益。因此,保證系統(tǒng)的足夠高的安全性能就顯得尤其重要 4.24.2 國內(nèi)外研究現(xiàn)狀國內(nèi)外研究現(xiàn)狀 隨著移動通信系統(tǒng)的不斷發(fā)展,第三代移動通信系統(tǒng)(3G)正在成為當(dāng)前 通信領(lǐng)域研究開發(fā)的熱點(diǎn)。國際上,ETSI 與 3GPP 兩個基于 GSM/GPRS 網(wǎng)絡(luò)和 WCDMA 與 TD/SCDMA 系統(tǒng)標(biāo)準(zhǔn)化的組織,特別是 ETSI 的 SAG

10、E 與 3GPP 的 S3 工作 組專門對網(wǎng)絡(luò)安全方面的規(guī)范進(jìn)行了研究。通過標(biāo)準(zhǔn)的制定和不斷的研究,使 得 3G 技術(shù)在實(shí)際應(yīng)用上已經(jīng)逐步走向成熟。在國內(nèi),相對來說滯后一點(diǎn),不過 仍然取得不少成績。3G 時(shí)代正在一步步向人們走來。 4.34.3 本課題研究的意義本課題研究的意義 本畢業(yè)設(shè)計(jì)選擇就選擇 3G 中的一個安全協(xié)議(AKA)加以研究分析和實(shí)現(xiàn) 應(yīng)用,達(dá)到考查使學(xué)生綜合運(yùn)用以前所學(xué)知識的能力,包括以前所學(xué)的一些關(guān) 于通信、編程、信息安全等知識,同時(shí)也使學(xué)生了解當(dāng)前移動通訊系統(tǒng)發(fā)展的 新趨勢,同時(shí)還將實(shí)際研究加一應(yīng)用,鍛煉了學(xué)生的實(shí)際動手能力,又引導(dǎo)學(xué) 生進(jìn)行了一次模擬實(shí)際產(chǎn)品的開發(fā),對于

11、學(xué)生以后工作能力的培養(yǎng)具有重要的 意義。 4.44.4 本課題的研究方法本課題的研究方法 采用 AES 內(nèi)核加密算法,用 C 語言實(shí)現(xiàn)。 首先,弄清 AKA 協(xié)議機(jī)制過程,這里面需要用到 3G 的知識,著重弄清其中 的 F1-F5 的實(shí)現(xiàn)原理,步驟,方法。然后加入分組密碼學(xué)(采用 AES)的知識, 由于系統(tǒng)要求是在 UE 端實(shí)現(xiàn),考慮到系統(tǒng)硬件資源等原因,采用 8 位 AES 內(nèi)核 加密算法,完成代碼上的實(shí)現(xiàn)。最后,代碼測試,進(jìn)而完成整個設(shè)計(jì)。 另外,由于此次設(shè)計(jì)采用 AES 為核心算法,因此還對 AES 相關(guān)數(shù)學(xué)基礎(chǔ)知 識,實(shí)現(xiàn)原理進(jìn)行了詳細(xì)的分析。 第 2 頁 共 24 頁 5 5AESA

12、ES 算法原理和算法原理和 C C 語言代碼設(shè)計(jì)實(shí)現(xiàn)語言代碼設(shè)計(jì)實(shí)現(xiàn) 4.14.1分組密碼設(shè)計(jì)準(zhǔn)則分組密碼設(shè)計(jì)準(zhǔn)則 Rijndael 算法是分組密碼,也具有分組密碼的一般設(shè)計(jì)準(zhǔn)則,分組密碼的 設(shè)計(jì)就是要求算法能在密鑰控制下置換,對輸入的明文進(jìn)行加密變換。好的分 組密碼應(yīng)該是既難破譯高效又容易實(shí)現(xiàn)。 (1)安全性準(zhǔn)則 安全性原則主要是指由香農(nóng)提出的混亂和擴(kuò)散原則。 混亂原則是指人們所設(shè)計(jì)的密碼應(yīng)使得密鑰和明文以及密文之間的依賴關(guān) 系相當(dāng)復(fù)雜,以至于這種依賴關(guān)系對密碼分析者來說無法利用。 擴(kuò)散原則是指人們所設(shè)計(jì)的密碼應(yīng)使得密鑰的每一位數(shù)字影響密文的許多 位數(shù)字,以防止對密鑰進(jìn)行逐段破譯,而且明文的

13、每一位數(shù)字也應(yīng)該影響密文 的許多位數(shù)字,以便隱蔽明文數(shù)字的統(tǒng)計(jì)特性。 當(dāng)然這種密碼體制必須能抵抗現(xiàn)在所有的己知密碼攻擊。 (2)效率性準(zhǔn)則 效率準(zhǔn)則是與安全性準(zhǔn)則互補(bǔ)的,指的是算法在執(zhí)行加/解密時(shí)所要占用的 資源量,加密/解密在軟件的實(shí)現(xiàn)中,主要與所要求的內(nèi)存和存儲程序所占用的 內(nèi)存有關(guān),在硬件的實(shí)現(xiàn)中,與要求的芯片的面積有關(guān)。 (3)易實(shí)現(xiàn)準(zhǔn)則 分組密碼可以用軟件和硬件來實(shí)現(xiàn)。硬件實(shí)現(xiàn)的優(yōu)點(diǎn)是可獲得較高的加密 解密速度,軟件實(shí)現(xiàn)的優(yōu)點(diǎn)是靈活性強(qiáng)、代價(jià)低。 4.24.2RijndaelRijndael 算法綜述算法綜述 AES,高級數(shù)據(jù)加密標(biāo)準(zhǔn)的簡稱,由美國國家標(biāo)準(zhǔn)和技術(shù)研究所(NIST) 在

14、 1997 年宣布征集,最終,在 2000 年,它宣布采用了比利時(shí)的密碼專家 Joan Daemen 博士和 Vincent Rijmen 博士開發(fā)的 Rijndael 算法做為最終算法。 Rijndael 加密算法是分組長度可變、密鑰長度也可變的分組密碼。分組長度、 密鑰長度彼此獨(dú)立地確定為 128、192、256 比特。總體來說,AES 作為新一代的 數(shù)據(jù)加密標(biāo)準(zhǔn)匯聚了強(qiáng)安全性、高性能、高效率、易用和靈活等優(yōu)點(diǎn)。 Rijndael 是一個密鑰迭代分組密碼,包含了輪變換對狀態(tài)的重復(fù)作用。 輪數(shù) Nr 的值取決于分組和密鑰的長度。對于 AES,當(dāng)密鑰長度為 128 比特時(shí), Nr =10;當(dāng)密

15、鑰長度為 192 比特時(shí),Nr =12;當(dāng)密鑰長度為 256 比特時(shí),Nr =14。算法的加密過程如圖 1 所示。它包括一個初始密鑰加法,記作 AddRoundKey,接著進(jìn)行 Nr-1 次輪變換(Round),最后再使用一個輪變換 (FinalRound)。 輪變換由 4 個步驟組成:SubBytes,ShiftRows,MixColumns 和 AddRoundKey。最后一輪與前 Nr -1 次輪變換稍有不同,省掉了其中的 第 3 頁 共 24 頁 MixColumns 步驟。 圖 1 Rijndeal 加密 C 語言實(shí)現(xiàn)過程圖 相關(guān)的術(shù)語定義和表示相關(guān)的術(shù)語定義和表示 狀態(tài)(State

16、):密碼運(yùn)算的中間結(jié)果稱為狀態(tài)。 State 的表示:狀態(tài)用以字節(jié)為基本構(gòu)成元素的矩陣陣列來表示,該陣列 有 4 行,列數(shù)記為 Nb。 Nb=分組長度(bits) 32 Nb 可以取的值為 4,6,8,對應(yīng)的分組長度為 128,192,256bits。 密碼密鑰(Cipher Key)的表示: Cipher Key(簡稱 Key)類似地用一個 4 行的矩陣陣列來表示,列數(shù)記為 Nk。 讀進(jìn)明文 讀進(jìn)密鑰 (1)產(chǎn)生輪子密鑰 (2) AddRoundKey 變換 (3)輪變換 Round(State,RoundKey) ByteSub(State); ShiftRow(State); MixCo

17、lumn(State); AddRoundKey(State, RoundKey); (4)最后輪變換 FinalRound(State,RoundKey) ByteSub(State) ShiftRow(State) AddRoundKey(State,RoundKey); 密文 1 r N 圖 4.10 第 4 頁 共 24 頁 Nk=密鑰長度(bits)32 Nk 可以取的值為 4,6,8,對應(yīng)的密鑰長度為 128,192,256bits。 4.34.3RijndaelRijndael 加密步驟及加密步驟及 C C 語言代碼實(shí)現(xiàn)語言代碼實(shí)現(xiàn) 本次設(shè)計(jì)采用 128 位明文分組,128 位密

18、鑰,下面結(jié)合具體實(shí)現(xiàn)代碼,依 照加密流程,對加密的幾個具體步驟進(jìn)行分析。 2.3.12.3.1 SubBytesSubBytes ByteSubstitution 是一個非線性的字節(jié)替代,獨(dú)立地在每個狀態(tài)字節(jié)上進(jìn) 行運(yùn)算。它包括兩個變換。 1. 在有限域 GF(28)上求乘法逆, 00映射到它自身。 2. 在 GF(2)上進(jìn)行下面的仿射變換: 仿射變換,實(shí)際上是涉及一個矩陣乘法 圖 2 矩陣乘法示意圖 其中 Y=y7,y6,.y0為經(jīng) SubByte 作用后的值。這個變化,Rijndael 采 用一個 S 盒變化實(shí)現(xiàn) a0,0 a0,1 a0,2 a0,3 a1,0 a1,1 a1,2 a1,

19、3 a2,0 a2,1 a2,2 a2,3 a3,0 a3,1 a3,2 a3,3 b0,0 b0,1 b0,2 b0,3 b1,0 b1,1 b1,2 b1,3 b2,0 b2,1 b2,2 b2,3 b3,0 b3,1 b3,2 b3,3 ai,jbi,j S-box 圖 3 S 盒變換圖 代碼中具體定義的 S 盒如下 typedef unsigned char u8; u8 S256 = 99,124,119,123,242,107,111,197, 48, 1,103, 43,254,215,171,118, 202,130,201,125,250, 89, 71,240,173,21

20、2,162,175,156,164,114,192, 第 5 頁 共 24 頁 183,253,147, 38, 54, 63,247,204, 52,165,229,241,113,216, 49, 21, 4,199, 35,195, 24,150, 5,154, 7, 18,128,226,235, 39,178,117, 9,131, 44, 26, 27,110, 90,160, 82, 59,214,179, 41,227, 47,132, 83,209, 0,237, 32,252,177, 91,106,203,190, 57, 74, 76, 88,207, 208,239,

21、170,251, 67, 77, 51,133, 69,249, 2,127, 80, 60,159,168, 81,163, 64,143,146,157, 56,245,188,182,218, 33, 16,255,243,210, 205, 12, 19,236, 95,151, 68, 23,196,167,126, 61,100, 93, 25,115, 96,129, 79,220, 34, 42,144,136, 70,238,184, 20,222, 94, 11,219, 224, 50, 58, 10, 73, 6, 36, 92,194,211,172, 98,145,

22、149,228,121, 231,200, 55,109,141,213, 78,169,108, 86,244,234,101,122,174, 8, 186,120, 37, 46, 28,166,180,198,232,221,116, 31, 75,189,139,138, 112, 62,181,102, 72, 3,246, 14, 97, 53, 87,185,134,193, 29,158, 225,248,152, 17,105,217,142,148,155, 30,135,233,206, 85, 40,223, 140,161,137, 13,191,230, 66,1

23、04, 65,153, 45, 15,176, 84,187, 22, ; 通過 S 盒,具體實(shí)現(xiàn)代碼將變得非常簡單,通過定義一個四行四列矩陣, 很容易就能完成替換,如下: S 盒替換讀入 state44輸出 state44 圖 4 ByteSub 程序流程圖 int ByteSub(u8 state44) int i, j; for (i=0; i4; i+) for (j=0; j4; j+) stateij = Sstateij; return 0; 2.3.22.3.2 ShiftRowsShiftRows ShiftRows 操作同樣非常簡單,就是對狀態(tài)矩陣?yán)锏淖詈?3 行循環(huán)移位而

24、 來,所移位數(shù)跟其所在第幾行及分組長度 Nb 有關(guān),第 1 行循環(huán)移位 C1 字節(jié), 第 6 頁 共 24 頁 第 2 行循環(huán)移位 C2 字節(jié),第 3 行循環(huán)移位 C3 字節(jié)。如下表所示 圖 5 ShiftRows 移位圖 由于是采用 128 位明文和密鑰,故 Nb=4,C1,C2,C3 分別等于 1,2,3。 實(shí)現(xiàn)代碼如下: 圖 6 ShiftRow 程序流程圖 void ShiftRow(u8 state44) u8 temp; /* 對第二行移一位*/ temp = state10; state10 = state11; state11 = state12; state12 = stat

25、e13; state13 = temp; /* 對第三行移動二位 */ temp = state20; state20 = state22; state22 = temp; temp = state21; state21 = state23; state23 = temp; /* 對第四行移動三位 */ temp = state30; state30 = state33; NbC1C2C3 4123 6123 8134 S 盒替換讀入 state44輸出 state44 第 7 頁 共 24 頁 state33 = state32; state32 = state31; state31 = t

26、emp; return; 2.3.32.3.3 MixColumnsMixColumns MixColumns 變換稍顯復(fù)雜,在分析它之前,先解釋一下 GF(GF(2 28 8) )上 x 乘法。 具體定義如下: xb(x)b7x8+b6x7+b5x6+b4x5+b3x4+b2x3+b1x2+b0 x(mod p(x) 如果 b7=0,求模結(jié)果不變,否則為乘積結(jié)果減去 p(x),即求乘積結(jié)果與 p(x)的異或。由此得出十六進(jìn)制數(shù)02乘 b(x)可以先對 b(x)在字節(jié)內(nèi)左移一 位(最后一位補(bǔ) 0) 若 b7=1,則再與1B (其二進(jìn)制為 00011011)做逐比特異或來實(shí)現(xiàn),而 任意常數(shù)乘法可

27、以通過對中間結(jié)果相加實(shí)現(xiàn)。 而如果是*03,等于 b(x)*(02+01) ,即 b(x)*02 后再與它本身異或就是。 例如: b7b70 0 時(shí)時(shí) 02 54=(0000 0010) (0101 0100) =(x)(x6+x4+x2) =x7+ x5+x3 =x7+ x5+x3 x7+ x5+x3 (modp(x) =(1010 1000) 由上面的規(guī)則:把(0101 0100) 在字節(jié)內(nèi)左移一位即得(1010 1000) (最 后一位補(bǔ) 0) B7=1B7=1 時(shí)時(shí): 02 D4=(0000 0010) (1101 0100) =(x) (x7+x6+x4+x2) =x8+x7+ x5

28、+x3 (x4+x3+x+1)+x7+x5+x3(modp(x) *相當(dāng)(0001 1011)與(1010 1000)異或* x7+x5+x4+x+1(modp(x) =(1011 0011) 由上面的規(guī)則:先把(1101 0100) 在字節(jié)內(nèi)左移一位即得(10101000) (最 后一位補(bǔ) 0) ,因?yàn)?b71,故(1010 1000)再與(0001 1011)異或得(1011 第 8 頁 共 24 頁 0011) *03*03 時(shí)時(shí): 03 BF=(0000 0011) (1011 1111) =(x+1) (x7+x5+x4+x3+x2+x1+1) =x8+x6+x5+x4+x3+x2+

29、x1+x7+x5+x4+x3+x2+x1+1 = x8 + x7+ x6 +1 =(x4+x3+x+1)+ x7+ x6 +1 =(1101 1010) 而 MixColumns 它實(shí)際上是將狀態(tài)的列看作是有限域 GF(28)上的多項(xiàng)式 a(x), 與多項(xiàng)式 c(x) = 03 x3 + 01 x2 + 01 x +02 相乘(模 x41)。 令 b(x) = c(x) a(x),寫成矩陣形式為: b0 02 03 01 01 a0 b1 = 01 02 03 01 a1 b2 01 01 02 03 * a2 b3 03 01 01 02 a3 在具體加密過程中,例如針對具體一列數(shù)據(jù) Sta

30、tei,c(i=0;i4),有如下 State0,c = 0 x02 * State0,c + 0 x03 * State1,c + 0 x01 * State2,c +0 x01 * State3,c State1,c = 0 x01 * State0,c + 0 x02 * State1,c + 0 x03 * State2,c +0 x01 * State3,c State2,c = 0 x01 * State0,c + 0 x01 * State1,c + 0 x02 * State2,c +0 x03 * State3,c State3,c = 0 x03 * State0,c +

31、0 x01 * State1,c + 0 x01 * State2,c +0 x02 * State3,c 由于這里的乘法運(yùn)算只有 01.02.03 等 3 個十六進(jìn)制數(shù)字分別與 a(x)相 乘,因此可以采用到上面的 x 乘法,進(jìn)行異或移位運(yùn)算實(shí)現(xiàn)。而與 0 x02 相乘 是所有 GF(28) 乘法的基本運(yùn)算,可以通過定義一個 xtime 盒,達(dá)到簡化的目 的,如下 u8 Xtime256 = 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52

32、, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98,100,102,104,106,108,110,112,114,116,118,120,122,124,126, 128,130,132,134,136,138,140,142,144,146,148,150,152,154,156,158, 第 9 頁 共 24 頁 160,162,164,166,168,170,172,174,176,178,180,182,184,186,188,190, 192,194

33、,196,198,200,202,204,206,208,210,212,214,216,218,220,222, 224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,254, 27, 25, 31, 29, 19, 17, 23, 21, 11, 9, 15, 13, 3, 1, 7, 5, 59, 57, 63, 61, 51, 49, 55, 53, 43, 41, 47, 45, 35, 33, 39, 37, 91, 89, 95, 93, 83, 81, 87, 85, 75, 73, 79, 77, 67, 65

34、, 71, 69, 123,121,127,125,115,113,119,117,107,105,111,109, 99, 97,103,101, 155,153,159,157,147,145,151,149,139,137,143,141,131,129,135,133, 187,185,191,189,179,177,183,181,171,169,175,173,163,161,167,165, 219,217,223,221,211,209,215,213,203,201,207,205,195,193,199,197, 251,249,255,253,243,241,247,24

35、5,235,233,239,237,227,225,231,229 ; 通過 X 盒,采用下面的思想,可以很好的處理一列數(shù)據(jù),定義 t=a0 a1 a2 a3; u=a0; V=a0 a1;v=Xtime(v);a0=a0 Vt; V=a1 a2;v=Xtime(v);a1=a1 Vt; V=a2 a3;v=Xtime(v);a2=a2 Vt; V=a3 u ;v=Xtime(v);a3=a3 Vt; 這里,定義一個數(shù)組 a4,t 和 V 均為中間變量,u 為 a0。 i3? S 盒置換及移位操作 輸入 state44 輸出 state44 Y N 第 10 頁 共 24 頁 圖 7 MixC

36、olumn 程序流程圖 實(shí)現(xiàn)代碼如下: void MixColumn(u8 state44) u8 temp, tmp, tmp0; int i; for (i=0; i4;i+) temp = state0i state1i state2i state3i; tmp0 = state0i; tmp = Xtimestate0i state1i; state0i = temp tmp; tmp = Xtimestate1i state2i; state1i = temp tmp; tmp = Xtimestate2i state3i; state2i = temp tmp; tmp = Xti

37、mestate3i tmp0; state3i = temp tmp; return; /*列混合結(jié)束*/ 2.3.42.3.4 AddRoundKeyAddRoundKey Rijndael 中的密鑰機(jī)制是由初始密鑰產(chǎn)生輪子密鑰,然后將輪密鑰與狀態(tài) 按比特異或,從而完成加密效果。 因此,Rijneael 的密鑰方案很大一部分就在于輪密鑰的產(chǎn)生和選取過程, 輪密鑰的產(chǎn)生就是密鑰擴(kuò)展。 AES 中密鑰 bit 的總數(shù)分組長度(輪數(shù) Round1) 例如當(dāng)分組長度為 128bits 和輪數(shù) Round 為 10 時(shí),輪密鑰長度為 128(101)1408bits。 當(dāng)產(chǎn)生好一系列密鑰后,就涉及到輪

38、密鑰的選取過程。選取規(guī)則就是:第 一個輪密鑰由擴(kuò)展密鑰的第一個 Nb 個字(其實(shí)就是 Nb 列),第二個輪密鑰由 接下來的 Nb 個字組成,以此類推。 如:k0.k1.k2.k3.k4.k5.k6.k7一系列以列為下標(biāo)的密鑰數(shù)組,則 第 11 頁 共 24 頁 (k0.k1.k2.k3)為輪密鑰 0,(k4.k5.k6.k7)為輪密鑰 1,依次類推。 接下來就是輪密鑰產(chǎn)生過程了。密鑰每一輪同樣用一個個 4*4 矩陣來表示, 矩陣中的每列用 Wi表示 表 1 輪子密鑰表 W0 W1 W2 W3 K0,0K0,1K0,2K0,3 K1,0K1,1K1,2K1,3 K2,0K2,1K2,2K2,3

39、K3,0K3,1K3,2K3,3 然后從 W4 開始依次往下。 輪密鑰的產(chǎn)生,其實(shí)就是經(jīng)歷以下幾個步驟: a. 移位 對 Wi-1進(jìn)行左移一位操作,如 表 2 移位操作前矩陣表 K0,0K0,1K0,2K0,3 K1,0K1,1K1,2K1,3 K2,0K2,1K2,2K2,3 K3,0K3,1K3,2K3,3 經(jīng)變換后得到 表 3 移位操作后矩陣表 K0,0K0,1K0,2K1,3 K1,0K1,1K1,2K2,3 K2,0K2,1K2,2K3,3 K3,0K3,1K3,2K0,3 b. S 盒置換 c. 與 Rconi/NK異或 i 是列下標(biāo),而 Rconi = (RCi, 00, 00,

40、 00) RC1 = 1(即01) RCi = (02)(i-1);i=2,3,. 由于次處操作同樣的是 GF(28) 乘法的基本運(yùn)算,因此具體實(shí)現(xiàn)過程中,同 樣可以通過 Xtime 盒實(shí)現(xiàn)。 第 12 頁 共 24 頁 d. 與 Wi-NK異或,如 W4與 W0。 具體不同之處在于對 W4,W8.等列來說,需要經(jīng)歷 ad 四步,而對于其 他列而言,只需經(jīng)歷最后一步即可。 算法思想: rkr,0,0 = rkr-1,0,0 S-boxrkr-1,1,3 round_constr rkr,1,0 = rkr-1,1,0 S-boxrkr-1,2,3 rkr,2,0 = rkr-1,2,0 S-b

41、oxrkr-1,3,3 rkr,3,0 = rkr-1,3,0 S-boxrkr-1,0,3 (以下標(biāo) r 表示輪數(shù)) 圖 8 RijndaelKeySchedule 程序流程圖 具體實(shí)現(xiàn)代碼具體實(shí)現(xiàn)代碼: u8 roundKeys1144; void RijndaelKeySchedule( u8 key16 ) u8 roundConst; int i, j; /*第一輪密鑰不需要操作,直接輸入 */ for (i=0; i2 = keyi; S 盒替換,移位,異或運(yùn)算 產(chǎn)生第 i 輪子密鑰 i11 輸入 初 始 密 鑰 k e y 4 4 輪子密鑰輸出 N Y 第 13 頁 共 24 頁

42、 /*輸入過程,將 16 個輸入的數(shù)據(jù)轉(zhuǎn)換成以列為順序的矩陣存儲方式,如當(dāng) i=2 時(shí),應(yīng) 放入 roundKeys020中,而 i /* 下面產(chǎn)生輪子密鑰*/ for (i=1; i11; i+) roundKeysi00 = SroundKeysi-113 roundKeysi-100 roundConst; /*產(chǎn)生第 i 輪密鑰矩陣中的第一行第一列數(shù)據(jù),通過使用 roundKeysi-113,達(dá)到了 移位的效果*/ roundKeysi10 = SroundKeysi-123 roundKeysi-110; /*產(chǎn)生第 i 輪密鑰矩陣中的第 2 行第一列數(shù)據(jù)*/ roundKeysi2

43、0 = SroundKeysi-133 roundKeysi-120; /*產(chǎn)生第 i 輪密鑰矩陣中的第 3 行第一列數(shù)據(jù)*/ roundKeysi30 = SroundKeysi-103 roundKeysi-130; /*產(chǎn)生第 i 輪密鑰矩陣中的第 4 行第一列數(shù)據(jù)*/ for (j=0; j4; j+) roundKeysij1 = roundKeysi-1j1 roundKeysij0; /*依次產(chǎn)生第 i 輪密鑰矩陣中的第 2 列數(shù)據(jù)*/ roundKeysij2 = roundKeysi-1j2 roundKeysij1; /*依次產(chǎn)生第 i 輪密鑰矩陣中的第 3 列數(shù)據(jù)*/ r

44、oundKeysij3 = roundKeysi-1j3 roundKeysij2; /*依次產(chǎn)生第 i 輪密鑰矩陣中的第 4 列數(shù)據(jù)*/ roundConst = XtimeroundConst; /* 通過 X 盒實(shí)現(xiàn) Rconi/k功能*/ return; /* 加密過程,將輪密鑰分別與狀態(tài)進(jìn)行異或運(yùn)算 */ void KeyAdd(u8 state44, u8 roundKeys1144, int round) 第 14 頁 共 24 頁 int i, j; for (i=0; i4; i+) for (j=0; j4; j+) stateij = roundKeysroundij;

45、return; 2.3.52.3.5 加密過程主函數(shù)加密過程主函數(shù) void RijndaelEncrypt( u8 input16, u8 output16 ) u8 state44; int i, r; /*明文輸入 Input 及第一次密鑰加 */ KeyAdd(state, roundKeys, 0); for (r=1; r=9; r+)/* 進(jìn)行 9 輪循環(huán)*/ ByteSub(state); ShiftRow(state); MixColumn(state); KeyAdd(state, roundKeys, r); /* 最后一輪 */ ByteSub(state); Shif

46、tRow(state); KeyAdd(state, roundKeys, r); /*輸出*/ 6 6f1-f5f1-f5 算法算法介紹及介紹及 C C 語言代碼設(shè)計(jì)實(shí)現(xiàn)語言代碼設(shè)計(jì)實(shí)現(xiàn) 4.14.1f1-f5f1-f5 介紹介紹 AKA 協(xié)議是由與 GSM/GPRS 中的認(rèn)證及密鑰分配相類似的“請求-響應(yīng)” 式協(xié)議組成的。整個 AKA 過程分為兩個步驟。 (1) 認(rèn)證向量從本地環(huán)境/認(rèn)證中心(HE/AuC)到訪問位置寄存器 第 15 頁 共 24 頁 (VLR)的發(fā)布。此過程由 VLR 發(fā)起,HE/AuC 收到來自 VLR 的認(rèn)證請求后, 計(jì)算出認(rèn)證向量組 AV(1n)并通過響應(yīng)的方式發(fā)送

47、給 VLR。 認(rèn)證向量 AV=(RAND,XRES,CK,IK,AUTN) ,各參數(shù)分別為:隨機(jī)數(shù) RAND、預(yù)期響應(yīng) XRES、加密密鑰 CK、完整性密鑰 IK 和認(rèn)證令牌 AUTN,以及序列號 SQN、匿名密鑰 AK(可 選,用于隱藏序列號) 、認(rèn)證管理域碼 AMF(用于支持多種認(rèn)證算法和設(shè)置密 鑰生命期)和消息認(rèn)證碼 MAC-A。 (2) 認(rèn)證和密鑰建立過程。VLR 選擇新的認(rèn)證向一 AV(i) ,并向移動 臺(MS)發(fā)送其中的 RANDAUTN,用戶收到的 RANDAUTN 后,計(jì)算出 AK 并 恢復(fù) SQN,以及計(jì)算 XMAC-A 并將其與接收到的 MAC-A 進(jìn)行核對。 AKA為了

48、實(shí)現(xiàn)上述過程,利用f0-f5*算法。其中,本次設(shè)計(jì)所用到的,f1 算法為消息鑒權(quán)函數(shù),用于計(jì)算網(wǎng)絡(luò)鑒權(quán)時(shí)的XMAC-A;f2算法為消息鑒權(quán)函數(shù), 用語用戶鑒權(quán)計(jì)算XRES期望的響應(yīng)值;f3算法為密鑰生成函數(shù),用于計(jì)算加密 密鑰CK;f4為密鑰生成函數(shù),用于計(jì)算消息完整性密鑰IK;f5為密鑰生成函數(shù), 用語計(jì)算匿名密鑰AK,對鑒權(quán)序列號SQN加解密,防止被位置跟蹤。 對于 f1 到 f5 實(shí)現(xiàn)的問題,采用基于 AES 內(nèi)核的算法設(shè)計(jì),如下圖流程: : RAND EK SQN|AMF|SQN|AMF rotate by r1 EK rotate by r3 EK rotate by r2 EK r

49、otate by r5 EK rotate by r4 EK OPC c1 f1f1*f5f2f3f4f5* OPCOPCOPCOPC c2c3c4c5 OPCOPCOPCOPCOPC OPC EKOPOPC 圖 9 f1-f5 實(shí)現(xiàn)流程圖 具體示例: 取 r1=64,r2=0,r3=32,r4=64;c1=0,c2=1,c3=2,c4=4 SQN |AMF| SQN| AMF:長度為 128 位。 OPC = OP EOPK 5 個 128 位的輸出 OUT1, OUT2, OUT3, OUT4, OUT5 用表達(dá)式可如下表示: 第 16 頁 共 24 頁 OUT1 = ETEMP rot(

50、IN1 OPC, r1) c1K OPC OUT2 = Erot(TEMP OPC, r2) c2K OPC OUT3 = Erot(TEMP OPC, r3) c3K OPC OUT4 = Erot(TEMP OPC, r4) c4K OPC 則有: f1-f5 各個函數(shù)的輸出定義如下: Output of f1 = MAC-A, where MAC-A0 . MAC-A63 = OUT10 . OUT163 Output of f2 = RES, where RES0 . RES63 = OUT264 . OUT2127 Output of f3 = CK, where CK0 . CK1

51、27 = OUT30 . OUT3127 Output of f4 = IK, where IK0 . IK127 = OUT40 . OUT4127 Output of f5 = AK, where AK0 . AK47 = OUT20 . OUT247 關(guān)于 OP 與的 OPC說明: 一個 128 位的值 OP,可以理解為,不同的運(yùn)營商使用不同的 OP。無論 OP 是否公開,算法都是安全的。如果運(yùn)營者保密 OP 的值則更好。它是由運(yùn)營者自 己指定的 4.24.2f1-f5f1-f5 的的 C C 語言代碼實(shí)現(xiàn)語言代碼實(shí)現(xiàn) 算法算法 f1f1 主要代碼:主要代碼: 計(jì)算網(wǎng)絡(luò)認(rèn)證代碼 mac_

52、a。4 個輸入: 密鑰 K, 任意隨機(jī)詢問數(shù) rand、順 序編號 SQN 和認(rèn)證管理域 AMF 產(chǎn)生 OP_c 及中間數(shù)組 temp16,in116 產(chǎn)生rijndaelInputi16 并以此為加密產(chǎn)生 out16 輸入k.,round.,amf.,sqn out16前 64 位做為 f1 的輸出 圖 10 f1 程序流程圖 第 17 頁 共 24 頁 void f1 ( u8 k16, u8 rand16, u8 sqn6, u8 amf2, u8 mac_a8 ) u8 temp16; u8 in116; u8 rijndaelInputi16; RijndaelKeySchedule

53、( k ); ComputeOPc( op_c );/*產(chǎn)生 op_c*/ for (i=0; i16; i+) rijndaelInputi = randi op_ci; RijndaelEncrypt( rijndaelInput, temp );/*產(chǎn)生 temp 數(shù)組*/ /*將 sqn 和 amf 賦值給數(shù)組 in1 中*/ for (i=0; i16; i+) rijndaelInput(i+8) % 16 = in1i op_ci; for (i=0; i16; i+) rijndaelInputi = tempi; /*將 in1 和 op_c 異或后,循環(huán)左移 64 位后,與

54、 temp 數(shù)組異或,產(chǎn)生 rijndaelInput*/ RijndaelEncrypt( rijndaelInput, out1 ); for (i=0; i16; i+) out1i = op_ci; for (i=0; i8; i+) mac_ai = out1i; /* 將 rijndaelInput 作為輸入產(chǎn)生 out1,并將 out1 與 op_c 異或后,取其前 64 位做為 f1 輸出 */ return; /*f1 結(jié)束*/ 算法算法 f2-f5f2-f5 主要代碼:主要代碼: f2-f5 4 個輸出分別為 res,ck,ik,ak,以 round,k,op 為輸入,中間

55、變量 OPC = OP EOPK 第 18 頁 共 24 頁 產(chǎn)生 op_c,并與 round 異或后, 進(jìn)行加密 把 temp,op_c 進(jìn)行異或和移位 r2 操作并加密,之后取輸出 out2 把 temp,op_c 進(jìn)行異或和移位 r3 操作并加密,之后取輸出 out3 把 temp,op_c 進(jìn)行異或和移位 r4 操作并加密,之后取輸出 out4 輸入 round,k 取 out2 高 64 位為 f2 產(chǎn)生 temp 取 out2 低 48 位為 f5 取 out3 為 f3 輸出 取 out4 為 f4 輸出 圖 11 f2/f3/f4/f5 程序流程圖 主要代碼: void f23

56、45 ( u8 k16, u8 rand16,u8 res8, u8 ck16, u8 ik16, u8 ak6 ) u8 op_c16; u8 temp16; u8 out16; u8 rijndaelInput16; u8 i; RijndaelKeySchedule( k ); ComputeOPc( op_c ); /*產(chǎn)生 op_c 和輪子密鑰*/ for (i=0; i16; i+) rijndaelInputi = randi op_ci; RijndaelEncrypt( rijndaelInput, temp );/*產(chǎn)生 temp*/ /*f2,f5*/ for (i=0;

57、 i16; i+) rijndaelInputi = tempi op_ci; rijndaelInput15 = 1; /*c2 的 128 位只有最后一位為 1,其余全為 0*/ 第 19 頁 共 24 頁 RijndaelEncrypt( rijndaelInput, out ); for (i=0; i16; i+) outi = op_ci; /* temp 與 opc 的異或, 循環(huán)左移 r2=0 位, 然后與常數(shù) c2 異或*/ for (i=0; i8; i+) resi = outi+8; /*64 位的 f2 輸出*/ for (i=0; i6; i+) aki = out

58、i; /*48 位的 f5 輸出*/ /*f3,f4*代碼基本相同,區(qū)別就在于: f3:循環(huán)左移 r3=32 位, 然后與常數(shù) c3=2 異或。 f4:循環(huán)左移 r4=64 位,然后與常數(shù) c4=4 異或*/ for (i=0; i16; i+) cki = outi;/*取 128 位 ck 為 f3 輸出*/ for (i=0; i16; i+) iki = outi;/*取 128 位 ik 為 f4 輸出*/ return; 7 7代碼測試和案例代碼測試和案例 實(shí)現(xiàn)界面實(shí)現(xiàn)界面: 圖 12 界面示意圖 測試案例表:測試案例表: 案例表 1 第 20 頁 共 24 頁 參數(shù)參數(shù)值值 K

59、465b5ce8 b199b49f aa5f0a2e e238a6bc RAND 23553cbe 9637a89d 218ae64d ae47bf35 SQN ff9bb4d0 b607 AMF b9b9 OP cdc202d5 123e20f6 2b6d676a c72cb318 f1 4a9ffac3 54dfafb3 f2 a54211d5 e3ba50bf f5 aa689c64 8370 f3 b40ba9a3 c58b2a05 bbf0d987 b21bf8cb f4 f769bcd7 51044604 12767271 1c6d3441 案例表 2 參數(shù)參數(shù)值值 K fec86

60、ba6 eb707ed0 8905757b 1bb44b8f RAND 9f7c8d02 1accf4db 213ccff0 c7f71a6a SQN 9d027759 5ffc AMF 725c OP dbc59adc b6f9a0ef 735477b7 fadf8374 f1 9cabc3e9 9baf7281 f2 8011c48c 0c214ed2 f5 33484dc2 136b f3 5dbdbb29 54e8f3cd e665b046 179a5098 f4 59a92d3b 476a0443 487055cf 88b2307b 案例表 3 參數(shù)參數(shù)值值 K 9e5944ae a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論