SSL算法庫的理解與測試

SSL算法庫包含3類算法,這裏分別說明SSH所用到和我們可能用到的算法:
對稱加密算法——DES、AES、RC4;
非對稱加密算法——RSA、DH;
信息摘要算法(單向哈希算法)——MD5、SHA;
在SSH中,使用RSA算法加密SSH v1的密鑰交換過程;使用DH算法加密SSH v2的密鑰交換過程,通過DH算法獲得會話密鑰;使用DES算法加密SSH的會話過程。
 
DES算法
DES算法屬於對稱加密算法,使用塊加密方式,每次加密64bit(8字節)的數據塊。
對稱加密算法使用同一密鑰進行加/解密,可分爲塊加密和流加密2種方式。其中,塊加密可分爲4種模式:
1、ECB(Electronic Code Book,電子密碼本):在ECB模式中,每塊明文都是獨立於其他塊加密的。雖然這樣做比較高效(可以並行執行多個數據塊的加密),但是易受攻擊,因爲對相同明文塊的加密總是產生相同的密文塊。在SSL算法庫中這是DES基本的加密方式。
2、CBC(Cipher Block Chaining,密碼塊鏈接):在CBC模式中,塊是連續加密的,在加密當前明文塊之前,用前一次塊加密的結果修改當前明文塊。這個過程改進了加密的一些特徵(例如,相同的明文塊不會產生相同的密文塊),但是由於其加密過程是連續的,CBC方式不支持加密的並行化。CBC方式使用初始向量(Initialization Vector,IV)來開始鏈接過程。IV 用於修改被加密的第一個明文塊。在SSL算法庫中這是DES爲SSL提供的加密方式。
3、CFB(Cipher Feedback,密碼反饋)
4、OFB(Output Feedback,輸出反饋)
對於DES算法的擴展,有3DES和DESX兩種算法。
3DES簡單的說是使用DES算法進行3重加密,其做法有4種:
1、DES-EEE3:使用3把不同的密鑰,依次進行加密-加密-加密。
2、DES-EDE3:使用3把不同的密鑰,依次進行加密-解密-加密。
3、DES-EEE3:使用2把不同的密鑰,依次進行加密-加密-加密,第3次和第1次使用的密鑰相同。
4、DES-EDE3:使用2把不同的密鑰,依次進行加密-解密-加密,第3次和第1次使用的密鑰相同。
但是3DES做了3次DES加密,所以其效率只有DES的1/3,DESX算法可以不損失效率,同時提高密鑰長度。
DESX使用3把不同的密鑰,第1把密鑰用來對準備加密的塊做XOR運算,第2把密鑰再對已經作過XOR運算的塊再做一次XOR運算,第3把密鑰用來進行DES加密。這樣,只做了1次DES加密,但是密鑰長度是3把密鑰的總長度。
 
AES算法
AES算法是美國新的對稱數據加密算法,它是作爲DES的替代者推出的。相對於DES而言,其特點主要是速度快、保密性高。
AES也採用塊加密方式,AES處理的基本塊是128bits,即16字節;DES處理的基本塊是64bits,即8字節。
AES的密鑰長度有3種,128bits、192bits、256bits;DES的密鑰長度爲56bits,加上8bits的校驗位,通常看上去是64bits。
但是AES出來的時間不長,把AES當作註冊算法還沒有得到大量普及,其實際效果還需要時間的檢驗
 
RC4算法
RC4算法通常用於密鑰長度可變的流加密,其特點是算法簡捷、速度快。不過目前已經發現了RC4比較大的安全漏洞,正在逐步被RC5取代。
 
RSA算法
RSA算法大家應該比較熟悉,這裏提下PKCS和OAEP,PKCS padding和OAEP padding是RSA的兩種比較安全的padding方法。
在RSA加密時,是對每個加密塊進行加密,加密塊在格式化時有一個padding的概念。我們簡稱:填充字符串爲PS,加密塊爲EB,加密塊類型爲BT,明文數據爲D,則EB格式化表示爲:EB = 00||BT||PS||00||D。PS必須由k-3-||D||個字節組成,其中k爲模數的長度。
 
DH算法
DH算法通常用於雙方協商加密密鑰,同時需要DH協商流程的配合。在SSH中用於密鑰交換的過程。
 
MD5算法
MD5算法是常用的信息摘要算法(或者說哈希算法)之一,其典型應用是對一段信息產生信息摘要,防止信息被篡改。MD5可以把一個任意長度的字節串變換成一定長的大整數,從而壓縮成一種保密的格式。
MD5的哈希值長度是128bits。
目前MD5算法已經被實際破解了——呵呵,那是中國山東的王小云牛人。
 
SHA算法
SSL算法庫中的SHA算法包含了SHA和SHA1,以及SHA256、SHA384、SHA512。
SHA是SHA算法的早期版本,存在安全問題。
廣泛應用的是SHA1,它也是常用的信息摘要算法之一。SHA1的哈希值長度是160bits,比128bits哈希值算法(如MD5)更安全,但是速度也更慢。
目前SHA1也被理論破解了(破解需要的時間長了點,6000年)——呵呵,還是中國山東的王小云牛人。
SHA256、SHA384、SHA512對應的哈希值長度,顧名思義則是256bits、384bits、512bits。
算法庫的測試主要就是針對這7種算法的測試,測試環境是CPU=PPC440,OS=vxworks,Platform=6503

DES測試
測試程序給出16組弱密鑰(目前已知64組),當然不是用來測試,而是排除,以及相應的測試數據。
1、cbcm方式
測試數據:1組,初始向量cbc_iv,三把密鑰cbc_key,cbc2_key,cbc3_key,明文cbc_data
測試過程:把明文和初始向量進行異或,再進行3des加密,再進行3des解密,再和初始向量進行異或,比較輸出和明文。全部一致就成功。
2、ecb方式
測試數據:34組,密鑰數據key_data,明文plain_data,密文cipher_data,一組密鑰數據產生一把密鑰。
測試過程:使用密鑰對明文進行des加密,比較輸出和密文;再把使用同一密鑰進行des解密,比較輸出和明文。全部一致就成功。
3、ede ecb方式
測試數據:34組,密鑰數據key_data,明文plain_data,密文cipher_ecb2,一組密鑰數據產生一把密鑰。
測試過程:使用2把密鑰,對明文進行3des-ede加密,比較輸出和密文;再進行3des-ede解密,比較輸出和明文。全部一致就成功。
4、cbc方式
測試數據:1組,初始向量cbc_iv,一把密鑰cbc_key,明文cbc_data,密文cbc_ok
測試過程:把明文和初始向量進行異或,再進行des加密,比較輸出和密文;再使用同一密鑰進行des解密,再和初始向量進行異或,比較輸出和明文。全部一致就成功。
5、desx cbc方式
測試數據:1組,初始向量cbc_iv,三把密鑰cbc_key,明文cbc_data,密文xcbc_ok
測試過程:把明文和初始向量進行異或,再進行desx加密,比較輸出和密文;再進行desx解密,再和初始向量進行異或,比較輸出和明文。全部一致就成功。
6、ede cbc方式
測試數據:1組,初始向量cbc_iv,三把密鑰cbc_key,明文cbc_data,密文cbc3_ok
測試過程:把明文和初始向量進行異或,再進行3des-ede加密,比較輸出和密文;再進行3des-ede解密,再和初始向量進行異或,比較輸出和明文。全部一致就成功。
7、pcbc方式
基本同cbc方式,只是進行des加密前的運算方式不同。
8、cfb方式
進行了cfb8、cfb16、cfb32、cfb48、cfb64、ede_cfb64的測試。
9、ofb方式
進行了ofb、ofb64、ede_ofb64的測試。
測試結果:
1、正確性測試:全部通過。
2、速度測試:結果比較穩定,數據如下
2.1、密鑰安裝:每秒進行298千次,每次耗時3.35us。
2.2、DES-ECB流加密,針對DES基本塊:每秒進行353千次,每次耗時2.83us,加密速度2.83M字節/秒。
2.3、DES-CBC塊加密,針對1024字節塊:每秒進行2.5千次,每次耗時400us,加密速度2.56M字節/秒。
2.4、DES-ED
E-CBC塊加密,針對1024字節塊:每秒進行0.89千次,每次耗時1120us,加密速度0.91M字節/秒。
 
AES測試
測試數據
來自
http://csrc.nist.gov/,一個龐大的測試向量包,其中包含了4種通用塊加密模式(ECB、CBC、CFB、OFB),AES的6種測試模式(GFSbox、KeySbox、MCT、MMT、VarKey、VarTxt),以及3種密鑰長度(128、192、256bits)的測試向量文件,共4*6*3=72個文件,每個文件含10-100組不等的測試向量。測試主要針對ECB和CBC這2種模式。
測試過程:
1、根據密鑰數據,構造加密密鑰。
2、對明文進行加密,獲得密文,比較密文和已知密文。
3、根據密鑰數據,構造解密密鑰。
4、對密文進行解密,獲得明文,比較明文和已知明文。
5、如果採用了CBC模式,則需要初始向量iv,在加密前使用iv和加密數據作指定運算。
測試注意事項:
1、如果採用了ECB-MMT模式,測試向量給出的明文和密文將超過基本塊長度128bits。由於ECB模式下是對固定塊加密,而且各塊加密是獨立的,所以加密時需要將明文分割成固定的128bits塊,依次送入加密後,比較時也是按照順序依次比較128bits密文塊數據;反之亦然。如果在CBC模式下,則需要給出加密數據長度。
2、如果採用CBC模式,加密函數會改變送入的初始向量iv。如果不注意這點,解密時送入改變後的iv,則解密會失敗。所以需要自己事先保存iv副本,加/解密時送入相同的iv。

測試結果:
1、正確性測試:其中關於MCT的測試向量都失敗了,其餘的全部通過。
2、速度測試:結果比較穩定,數據如下
對於128位密鑰而言
2.1、加密密鑰安裝:每秒進行368千次,每次耗時2.71us。
2.2、解密密鑰安裝:每秒進行98千次,每次耗時10.18us。
2.3、AES-ECB塊加密,針對AES基本塊:每秒進行228千次,每次耗時4.38us,加密速度3.66M字節/秒。
2.4、AES-CBC塊加密,針對AES基本塊:每秒進行182千次,每次耗時5.50us,加密速度2.91M字節/秒。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章