分析比較分組密碼AES-CFB 或 OFB與流密碼RC4的特點_第1頁
分析比較分組密碼AES-CFB 或 OFB與流密碼RC4的特點_第2頁
分析比較分組密碼AES-CFB 或 OFB與流密碼RC4的特點_第3頁
分析比較分組密碼AES-CFB 或 OFB與流密碼RC4的特點_第4頁
分析比較分組密碼AES-CFB 或 OFB與流密碼RC4的特點_第5頁
已閱讀5頁,還剩5頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、作業二、分析比較分組密碼AES-CFB 或 OFB與流密碼RC4的特點一、RC4算法介紹RC4是一種對稱密碼算法,它屬于對稱密碼算法中的序列密碼(streamcipher,也稱為流密碼),它是可變密鑰長度,面向字節操作的流密碼。RC4是流密碼streamcipher中的一種,為序列密碼。RC4加密算法是Ron Rivest在1987年設計出的密鑰長度可變的加密算法簇。起初該算法是商業機密,直到1994年,它才公諸于眾。由于RC4具有算法簡單,運算速度快,軟硬件實現都十分容易等優點,使其在一些協議和標準里得到了廣泛應用。流密碼也屬于對稱密碼,但與分組加密算法不同的是,流密碼不對明文數據進行分組,

2、而是用密鑰生成與明文一樣長短的密碼流對明文進行加密,加解密使用相同的密鑰。RC4算法特點:(1)、算法簡潔易于軟件實現,加密速度快,安全性比較高;(2)、密鑰長度可變,一般用256個字節。  對稱密碼的工作方式有四種:電子密碼本(ECB, electronic codebook)方式、密碼分組鏈接(CBC, cipherblock chaining)方式、密文反饋(CFB, cipher-feedback)方式、輸出反饋(OFB, output-feedback)方式。   RC4算法采用的是輸出反饋工作方式,所以可以用一個短的密鑰產生一個相對較長的密鑰

3、序列。   OFB方式的最大的優點是消息如果發生錯誤(這里指的是消息的某一位發生了改變,而不是消息的某一位丟失),錯誤不會傳遞到產生的密鑰序列上;缺點是對插入攻擊很敏感,并且對同步的要求比較高。 RC4的執行速度相當快,它大約是分塊密碼算法DES的5倍,是3DES的15倍,且比高級加密算法AES也快很多。RC4算法簡單,實現容易。RC4的安全保證主要在于輸入密鑰的產生途徑,只要在這方面不出現漏洞,采用128bit的密鑰是非常安全的。 RC4算法加密流程:包括密鑰調度算法KSA和偽隨機子密碼生成算法PRGA兩大部分(以密鑰長度為256個字節為例)。 密鑰調

4、度算法:首先初始化狀態矢量S,矢量S中元素的值被按升序從0到255排列,即S0=00, S1=1, , S255=255.同時建立一個臨時矢量T,如果密鑰K的長度為256字節,則將K賦給T。否則,若密鑰長度為keylen字節,則將K的值賦給T的前keylen個元素,并循環重復用K的值賦給T剩下的元素,直到T的所有元素都被賦值。這些預操作可概括如下:  /*初始化*/     fori = 0 to 255 do     Si= i;     Ti= Ki mod k

5、eylen;   然后用T產生S的初始置換,從S0到S255,對每個Si,根據由Ti確定的方案,將Si置換為S中的另一字節:   /*S的初始序列*/    j= 0     fori = 0 to 255 do    j= (j + Si + Ti) mod 256     swap(Si,Sj);因為對S的操作僅是交換,所以惟一的改變就是順序的改變。S仍然包含從0到255的所有元素,在初始化的過程中,密鑰的主要功

6、能是將S-box攪亂,代碼中的變量i確保S-box的每個元素都得到處理,變量j保證S-box的攪亂是隨機的。因此不同的S-box在經過偽隨機子密碼生成算法的處理后可以得到不同的子密鑰序列,并且該序列是隨機的。偽隨機序列生成算法:矢量S一旦完成初始化,輸入密鑰就不再被使用。密鑰流的生成是從S0到S255,對每個Si,根據當前S的值,將Si與S中的另一字節置換。當S255完成置換后,操作繼續重復,從S0開始:     /*密鑰流的產生*/         i,j = 0;

7、0;        while(true)       i= (i + 1) mod 256;         j= (j + Si) mod 256;         swap(Si,Sj);         t= (Si +

8、sj) mod 256;         k= St   偽隨機序列一旦生成,就得到子密碼sub_k,把子密鑰和明文進行異或運算,得到密文。解密過程也完全相同。加密中,只需將k的值與下一明文字節異或;相反解密中,將k的值與下一密文字節異或就可以還原出明文信息。算法描述為:         for(i = 0; i < textlength; i +)     &

9、#160;   ciphertexti=keystreamiplaintexti RC4算法存在的問題:因為RC4算法具有實現簡單,加密速度快,對硬件資源耗費低等優點,使其躋身于輕量級加密算法的行列。但是其簡單的算法結構也容易遭到破解攻擊,RC4算法的加密強度完全取決于密鑰,即偽隨機序列生成,而真正的隨機序列是不可能實現,只能實現偽隨機。這就不可避免出現密鑰的重復。RC4算法不管是加密還是解密,都只進行了異或運算,這就意味著,一旦子密鑰序列出現了重復,密文就極有可能被破解。 具體破解過程如下:若明文、密鑰是任意長的字節,可以用重合碼計數法(counting coi

10、ncidence)找出密鑰長度。把密文進行各種字節的位移,并與原密文進行異或運算,統計那些相同的字節。如果位移是密鑰長度的倍數,那么超過60%的字節將是相同的;如果不是,則至多只有0.4%的字節是相同的,這叫做重合指數(index of coincidence)。找出密鑰長度倍數的最小位移,按此長度移到密文,并且和自身異或。由于明文每字節有1.3位的實際信息,因此有足夠的冗余度去確定位移的解密。對所有的密鑰,輸出密鑰流的前幾個字節不是隨機的,因此極有可能會泄露密鑰的信息。如果一個長期使用的密鑰與一個隨機數串聯產生RC4算法密鑰,那么可以通過分析大量由該密鑰加密的密文得到這個長期使用的密鑰。解決

11、該問題的辦法是:拋棄密鑰流最初的那部分數據。RC4 is a stream cipher with variable key length. Typically, 128 bit (16 byte) keys are used for strong encryption, butshorter insecure key sizes have been widely used due to export restrictions.1.RC4_set_key:sets up theB<RC4_KEY> B<key> using the B<len> b

12、ytes long key atB<data>.2.RC4: encrypts or decrypts the B<len>bytes of data at B<indata> using B<key> and places the result atB<outdata>.  Repeated RC4() callswith the same B<key> yield a continuous key stream. Since RC4 is a streamcipher (the input is X

13、ORed with a pseudo-random key stream to produce theoutput), decryption uses the same function calls as encryption.以下是測試代碼:cryptotest.h:cpp view plaincopy1. #ifndef _CRYPTOTEST_H_  2. #define _CRYPTOTEST_H_  3.   4. #include <string>  

14、5.   6. using namespace std;  7.   8. typedef enum   9.     GENERAL = 0,  10.     ECB,  11.     CBC,  12.     CFB, 

15、 13.     OFB,  14.     TRIPLE_ECB,  15.     TRIPLE_CBC  16. CRYPTO_MODE;  17.   18. string DES_Encrypt(const string cleartext, const string key, CRYPT

16、O_MODE mode);  19. string DES_Decrypt(const string ciphertext, const string key, CRYPTO_MODE mode);  20.   21. string RC4_Encrypt(const string cleartext, const string key);  22. string&

17、#160;RC4_Decrypt(const string ciphertext, const string key);  23.   24. #endif /_CRYPTOTEST_H_  rc4test.cpp:cpp view plaincopy1. #include "stdafx.h"  2. #include <iostream>  3. #include

18、0;<string>  4. #include <vector>  5. #include <openssl/rc4.h>  6. #include "cryptotest.h"  7.   8. using namespace std;  9.   10. string RC4_Encrypt(const string 

19、cleartext, const string key)  11.   12.     RC4_KEY rc4key;  13.     unsigned char* tmp = new unsigned charcleartext.length() + 1;  14.     

20、memset(tmp, 0, cleartext.length() + 1);  15.   16.     RC4_set_key(&rc4key, key.length(), (const unsigned char*)key.c_str();  17.     RC4(&rc4key, cleartext.length(), (cons

21、t unsigned char*)cleartext.c_str(), tmp);  18.   19.     string str = (char*)tmp;  20.   21.     delete  tmp;  22.   23.     return str

22、;  24.   25.   26. string RC4_Decrypt(const string ciphertext, const string key)  27.   28.     RC4_KEY rc4key;  29.     unsigned char* tmp = new

23、 unsigned charciphertext.length() + 1;  30.     memset(tmp, 0, ciphertext.length() + 1);  31.   32.     RC4_set_key(&rc4key, key.length(), (const unsigned char*)key.c

24、_str();  33.     RC4(&rc4key, ciphertext.length(), (const unsigned char*)ciphertext.c_str(), tmp);  34.   35.     string str = (char*)tmp;  36.   37.   

25、0; delete  tmp;  38.   39.     return str;  40.   main.cpp:cpp view plaincopy1. #include "stdafx.h"  2. #include "cryptotest.h"  3. #include "TestMemory.h&

26、quot;  4. #include <iostream>  5. #include <string>  6.   7. using namespace std;  8.   9. void test_RC4()  10.   11.     string cleartext = "中

27、國北京12345$abcde%ABCDE!"  12.     string ciphertext = ""  13.     string key = "beijingchina1234567890ABCDEFGH!"  14.   15.     ciphertext =&#

28、160;RC4_Encrypt(cleartext, key);  16.     string decrypt = RC4_Decrypt(ciphertext, key);  17.   18.     cout<<"src cleartext: "<<cleartext<<endl;  19.  

29、   cout<<"genarate ciphertext: "<<ciphertext<<endl;  20.     cout<<"src ciphertext: "<<ciphertext<<endl;  21.     cout<<"genarate cle

30、artext: "<<decrypt<<endl;  22.   23.     if (strcmp(cleartext.c_str(), decrypt.c_str() = 0)  24.         cout<<"RC4 crypto ok!"<<endl;&#

31、160; 25.     else  26.         cout<<"RC4 crypto error!"<<endl;  27.   二、分組密碼AES的模式分組密碼是最基本的密碼技術之一, 其處理消息的長度是固定的, 如 DES為 64比特、AES 為 128比特, 但是在實際中需要處理的消息通常是任意長的 ,且要求密文盡量不確定 ,

32、而分組密碼自身不能做到 ,因此,引出了如何利用分組密碼處理任意長度消息的問題. 解決這個問題的技術就是分組密碼工作模式. 分組密碼工作模式的設計理念為了闡述分組密碼工作模式的設計理念,我們首先介紹如何評價一個分組密碼工作模式. 工作模式的評價指標有三個方面 : 安全性、性能、模式 /執行特點.安全性評價指標包括: 抵抗現有攻擊的能力 ; 可證明安全性,在合理的假設下 ,是否有安全性的證明結果 ; 和類似模式安全性的比較 , 和現在用的模式(如 CBC)的比較; 隨機性 ,輸出的統計特性 ; 是否擁有合理的數學背景等.性能評價指標包括計算的有效性、空間需求 、可并行性和預處理能力等.模式 /執行特點評價指標包括可提供的密碼服務、靈活性 、錯誤特性、模式本身抗錯性和簡單性等.安全性是所有評價指標中最重要的 , 因為其它性能的評估相對容易、相對直觀. 安全性評價中的第一條類似于分組密

溫馨提示

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

評論

0/150

提交評論