一. 密碼學(xué)簡介
據(jù)記載,公元前400年,古希臘人發(fā)明了置換密碼。1881年世界上的第一個電話保密專利出現(xiàn)。在第二次世界大戰(zhàn)期間,德國軍方啟用“恩尼格瑪”密 碼機(jī),密碼學(xué)在戰(zhàn)爭中起著非常重要的作用。
隨著信息化和數(shù)字化社會的發(fā)展,人們對信息安全和保密的重要性認(rèn)識不斷提高,于是在1997年,美國國家標(biāo)準(zhǔn)局公布實(shí)施了“美國數(shù)據(jù)加密標(biāo)準(zhǔn) (DES)”,民間力量開始全面介入密碼學(xué)的研究和應(yīng)用中,采用的加密算法有DES、RSA、SHA等。隨著對加密強(qiáng)度需求的不斷提高,近期又出現(xiàn)了 AES、ECC等。我國也相應(yīng)提出了自己國家的ECC、SCB2、SCH等加密算法。
使用密碼學(xué)可以達(dá)到以下目的:
1. 保密性:防止用戶的標(biāo)識或數(shù)據(jù)被讀取。
2. 數(shù)據(jù)完整性:防止數(shù)據(jù)被更改。
3. 身份驗(yàn)證:確保數(shù)據(jù)發(fā)自特定的一方。
二. 加密算法介紹
根據(jù)密鑰類型不同將現(xiàn)代密碼技術(shù)分為兩類:對稱加密算法(秘密鑰匙加密)和非對稱加密算法(公開密鑰加密)。
兩者的區(qū)別在于:
對稱鑰匙加密系統(tǒng)是加密和解密均采用同一把秘密鑰匙,而且通信雙方都必須獲得這把鑰匙,并保持鑰匙的私密性。
非對稱密鑰加密系統(tǒng)采用的加密鑰匙(公鑰)和解密鑰匙(私鑰)是不同的。
2.1 對稱加密算法
對稱加密算法用來對敏感數(shù)據(jù)等信息進(jìn)行加密,現(xiàn)在,通常使用分組密碼(block cipher)或序列密碼(stream cipher)實(shí)現(xiàn)對稱密碼,由于序列密碼算法不常用,所以本文將只討論分組密碼,常用的分組密碼算法包括:
1. DES(Data Encryption Standard):數(shù)據(jù)加密標(biāo)準(zhǔn),速度較快,適用于加密大量數(shù)據(jù)的場合。
2. 3DES(Triple DES):是基于DES,對一塊數(shù)據(jù)用三個不同的密鑰進(jìn)行三次加密,強(qiáng)度更高。
3. AES(Advanced Encryption Standard):高級加密標(biāo)準(zhǔn),是下一代的加密算法標(biāo)準(zhǔn),速度快,安全級別高。
分組密鑰常見術(shù)語
置換(Permutation)與替代(Substitution)
置換與替代是對稱密鑰中常用的兩種手段。置換是對數(shù)據(jù)重新進(jìn)行排列,而替代是將一個數(shù)據(jù)單元替換為另一個。通常替代要借助非線性查找表來進(jìn)行,即 DES和AES中所稱的S-Box。
輪(Round)
對稱密鑰中經(jīng)常對輸入進(jìn)行多輪迭代,這些迭代通常操作相同,只是具體上有些許差異,對稱密鑰的這種特性使得對稱密鑰適于用流水結(jié)構(gòu)實(shí)現(xiàn),因而數(shù)據(jù)吞吐量 大,容易實(shí)現(xiàn)高速加解密。
2.1.1 DES
DES算法全稱為Data Encryption Standard,即數(shù)據(jù)加密算法,它是IBM公司于1975年研究成功并公開發(fā)表的。DES算法有三個輸入:Key、Data、Mode。其中 Key為8個字節(jié)共64位,是DES算法的工作密鑰;Data也為8個字節(jié)64位,是要被加密或被解密的數(shù)據(jù);Mode為DES的工作方式,有兩種:加密 或解密。
算法原理
DES算法把64位的明文輸入塊變?yōu)?4位的密文輸出塊,它所使用的密鑰也是64位,其算法主要分為兩步:
1 初始置換
其功能是把輸入的64位數(shù)據(jù)塊按位重新組合,并把輸出分為L0、R0兩部分,每部分各長3 2位,其置換規(guī)則為將輸入的第58位換到第一位,第50位換到第2位……依此類推,最后一位是原來的第7位。L0、R0則是換位輸出后的兩部分,L0是輸 出的左32位,R0是右32位,例:設(shè)置換前的輸入值為D1D2D3……D64,則經(jīng)過初始置換后的結(jié)果為:L0=D58D50……D8;R0= D57D49……D7。
2 逆置換
經(jīng)過16次迭代運(yùn)算后,得到L16、R16,將此作為輸入,進(jìn)行逆置換,逆置換正好是初始置換的逆運(yùn)算,由此即得到密文輸出。
2.1.2 3DES
3DES(即Triple DES)是DES向AES過渡的加密算法(1999年,NIST將3-DES指定為過渡的加密標(biāo)準(zhǔn)),是DES的一個更安全的變形。它以DES為基本模 塊,通過組合分組方法設(shè)計出分組加密算法。3DES一共有兩種,一種是使用兩個56位長度的密鑰key1和key2,這樣密碼強(qiáng)度提高到了112位;另一 種是使用三個56位長度的密鑰key1、key2和key3,這樣密碼強(qiáng)度提高到了168位。
使用兩個密鑰的3DES:
加密過程:用key1加密,用key2解密再用key1加密
解密過程:用key1解密,用key2加密再用key1解密
使用三個密鑰的3DES:
加密過程:用key1加密,用key2解密再用key3加密
解密過程:用key3解密,用key2加密再用key1解密
2.1.3 AES
2000年10月,NIST(美國國家標(biāo)準(zhǔn)和技術(shù)協(xié)會)宣布通過從15種侯選算法中選出的一項(xiàng)新的密匙加密標(biāo)準(zhǔn)。Rijndael被選中成為將來的 AES。 Rijndael是在 1999 年下半年,由研究員 Joan Daemen 和 Vincent Rijmen 創(chuàng)建的。AES 正日益成為加密各種形式的電子數(shù)據(jù)的實(shí)際標(biāo)準(zhǔn)。
美國標(biāo)準(zhǔn)與技術(shù)研究院 (NIST) 于 2002 年 5 月 26 日制定了新的高級加密標(biāo)準(zhǔn) (AES) 規(guī)范。
算法原理
AES 算法基于置換和替代運(yùn)算。AES 使用幾種不同的方法來執(zhí)行置換和替代運(yùn)算。
AES 是一個迭代的、對稱密鑰分組的密碼,它可以使用128、192 和 256 位長度的密鑰,并且用 128 位(16字節(jié))分組密鑰(輪密鑰)加密和解密數(shù)據(jù)。數(shù)據(jù)長度為128位。通過分組密碼返回的加密數(shù)據(jù)長度與輸入數(shù)據(jù)長度相同。迭代加密使用一個循環(huán)結(jié)構(gòu), 在該循環(huán)中重復(fù)置換(permutation)和替代(substitution)輸入數(shù)據(jù)。
密鑰擴(kuò)展(Key Expansion)
AES對原始密鑰進(jìn)行密鑰擴(kuò)展操作,將其擴(kuò)展并應(yīng)用到每輪迭代加密中。
State矩陣
AES將輸入和每輪迭代的中間結(jié)果表達(dá)為4×4矩陣,矩陣中每個元素為8位。AES算法的主循環(huán)對State矩陣執(zhí)行四種不同的操作,分別為 SubBytes(字節(jié)替換)、ShiftRows(行位移變換)、MixColumns(列混合變換)、AddRoundKey(輪密鑰相加)。
SubBytes:將State矩陣中的字節(jié)用S-box中相應(yīng)字節(jié)替換
ShiftRows:為置換操作,它將State矩陣每行中的字節(jié)向左移位。
MixColumns:為替代操作,它用State矩陣每列字節(jié)的值進(jìn)行GF(28)域中的加法和乘法操作,并替代對應(yīng)字 節(jié)。
AddRoundKey:用KeyExpansion中生成的KeySchedule前四行對State矩陣執(zhí)行字節(jié)異或(XOR)操作,并用輪密 鑰表中相應(yīng)值對State矩陣進(jìn)行操作,得到新的State矩陣
AES與3DES的比較
算法名稱 | 算法類型 | 密鑰長度 | 數(shù)據(jù)長度 |
AES | 對稱block密碼 | 128、192、256位 | 128位 |
3DES | 對稱feistel密碼 | 112位或168位 | 64位 |
2.1.4 分組密碼工作方式
分組密碼每次加密一個數(shù)據(jù)分組,這個分組的位數(shù)可以是隨意的,一般選擇64(DES、3DES)或者128位(AES)。
2.1.4.1 ECB(Electronic Code Book:電碼本)
ECB是最簡單的模式,同樣的明文分組總是加密成相同的密文分組。這對于發(fā)送單一的塊數(shù)據(jù)來說是非常好的,如密鑰。但對執(zhí)行一個加密的信息流來說不 是很好,因?yàn)槿绻嗤拿魑亩啻伟l(fā)送以后,同樣的密文也會被多次發(fā)送。
ECB最大的弱點(diǎn)是對每一個塊用相同的方式進(jìn)行加密。如果我們的密鑰或者數(shù)據(jù)不斷發(fā)生變化,ECB是完全安全的。但是如果類似的塊經(jīng)過同樣的密鑰加 密發(fā)出以后,攻擊者可能獲得一些我們并不想讓別人知道的信息。
優(yōu)點(diǎn):
1.簡單;
2.有利于并行計算;
3.誤差不會被傳送;
缺點(diǎn):
1.不能隱藏明文的模式;
2.可能對明文進(jìn)行主動攻擊;
2.1.4.2 CBC(Cipher Block Chaining:密碼分組鏈接)
CBC模式改變了加密方式,同樣的明文分組不一定加密或解密同樣的密文塊,因此解決了ECB存在的主要問題。CBC使用前一分組的信息加密當(dāng)前分 組。因此 和ECB模式大不相同。這個方法依然存在問題,那就是相同的信息仍然加密成相同的密文,因?yàn)樗械姆纸M是同時變成密文分組的。為了解決這個問題,我們引入 一個Initialization Vector(IV,初始化向量),也就是前不久有人問到的IV問題。IV僅僅是一個初始化加密程序的隨機(jī)數(shù)。它無需秘密保存,但隊每一個信息來說它都是 不同 的,通過這個方式,即使有兩條相同的信息,只要他們有不同的IV,那么他們加密后的密文也是不同的。從這個意義上來說,初始化向量無疑就和口令加密過程中 使用的鹽值是一樣的。
CBC很適合文本傳輸,但它每一次都需要傳送一個完整的數(shù)據(jù)塊,一般選8個字節(jié)。
優(yōu)點(diǎn):
1.不容易主動攻擊,安全性好于ECB,適合傳輸長度長的報文,是SSL、IPSec的標(biāo)準(zhǔn)。
缺點(diǎn):
1.不利于并行計算;
2.誤差傳遞;
3.需要初始化向量IV
CFB(Cipher FeedBack:密碼反饋)
CFB的工作方式與CBC類似,但它可以執(zhí)行更小的數(shù)據(jù)塊,典型的有8位,這非常適合加密像聊天對話這樣的信息,因?yàn)槊看慰梢园l(fā)送單一的字節(jié)數(shù)據(jù) 塊。
和CBC一樣,CFB也需要一個IV,且相同及鑰發(fā)送的每條信息的IV都必須是唯一的。
優(yōu)點(diǎn):
1.隱藏了明文模式;
2.分組密碼轉(zhuǎn)化為流模式;
3.可以及時加密傳送小于分組的數(shù)據(jù);
缺點(diǎn):
1.不利于并行計算;
2.誤差傳送:一個明文單元損壞影響多個單元;
3.唯一的IV;
OFB(Output FeedBack:輸出反饋)
OFB除了在傳輸中能給數(shù)據(jù)提供更好的保護(hù),防止數(shù)據(jù)丟失外,其他和CFB類似。密文中一位出錯,也只造成明文中的一位出錯,其他的方式會造成整個 塊丟失。
和CBC以及CFB一樣,OFB也需要一個IV。
優(yōu)點(diǎn):
1.隱藏了明文模式;
2.分組密碼轉(zhuǎn)化為流模式;
3.可以及時加密傳送小于分組的數(shù)據(jù);
缺點(diǎn):
1.不利于并行計算;
2.對明文的主動攻擊是可能的;
3.誤差傳送:一個明文單元損壞影響多個單元;
2.1.4.3 分組密碼的填充方式
分組密碼算法在ECB和CBC工作方式下需要明文輸入為分組大小的整數(shù)倍。如果要加密的明文不為分組大小的整數(shù)倍,就需要在加密之前使用填充位串對 明文進(jìn)行填充。當(dāng)解密時,接收方需要知道如何沒有二義性地移除填充位串。
方法1:將需要填充字節(jié)的個數(shù)作為填充值填充到分組中
這個方法適用于任何明文,ASCII或者二進(jìn)制。對于DES,分組大小為64位,所以填充值應(yīng)該在1到8之間,對于AES,分組大小為128位,所 以填充值在1到16之間。這也可以提供對解密是否正確進(jìn)行的一個額外校驗(yàn)(如果該值不對,則解密不對,但是如果該值對,也不保證解密一定是對的)。
方法2:用0x80后接數(shù)個0x00作為填充位串填充到分組中
這個方法適用于任何明文,ASCII或者二進(jìn)制。智能卡更傾向于使用這種填充方法。這也是NIST 800-38a中推薦的方法。
方法3:用0x00填充,最后一個字節(jié)用填充字節(jié)的個數(shù)作為填充值填充
這個是方法1的變形。在解密后,讀最后一個字節(jié)的值,如果在正確區(qū)間內(nèi)就扔掉最后一個字節(jié)所描述的那么多個字節(jié)。該方法適用于任何明文,ASCII 或者二進(jìn)制。
方法4:用全0填充
該方法局限性很大,在處理ASCII文本時沒有問題,但是在處理可能包含0x00值的二進(jìn)制明文時會不適用。
方法5:用空格字符0x20填充
該方法也只適用于簡單ASCII文本。
如果使用的是CFB或者OFB工作方式,那么密文可以與明文具有相同大小,不需要填充。序列加密算法如RC4或者PC1也不需要填充。
2.2公鑰密碼算法
公鑰密碼中的加密與解密過程如下圖所示:
公鑰密碼中的簽名與驗(yàn)證過程如下圖:
1.確實(shí)是用戶B在文件上簽了名(身份認(rèn)證)
2.別人無法偽造用戶B的簽名(不可抵賴)
3.所簽的信息在傳輸過程中沒有被篡改或替換(數(shù)據(jù)完整)
公鑰密碼中的密鑰交換過程:
1.數(shù)字信封:用公鑰密碼加密對稱密鑰
2.密鑰協(xié)商:根據(jù)雙方交互的信息各自計算出相同的對稱密鑰(ga, gb, gab)
2.2.1 RSA算法
2.2.1.1 簡介
當(dāng)前最著名、應(yīng)用最廣泛的公鑰系統(tǒng)RSA是在1978年,由美國麻省理工學(xué)院(MIT)的Rivest、Shamir和Adleman在題為《獲得 數(shù)字簽名和公開鑰密碼系統(tǒng)的方法》的論文中提出的。它是一個基于數(shù)論的非對稱(公開鑰)密碼體制,是一種分組密碼體制。其名稱來自于三個發(fā)明者的姓名首字 母。 它的安全性是基于大整數(shù)素因子分解的困難性,而大整數(shù)因子分解問題是數(shù)學(xué)上的著名難題,至今沒有有效的方法予以解決,因此可以確保RSA算法的安全性。 RSA系統(tǒng)是公鑰系統(tǒng)的最具有典型意義的方法,大多數(shù)使用公鑰密碼進(jìn)行加密和數(shù)字簽名的產(chǎn)品和標(biāo)準(zhǔn)使用的都是RSA算法。
RSA算法是第一個既能用于數(shù)據(jù)加密也能用于數(shù)字簽名的算法,因此它為公用網(wǎng)絡(luò)上信息的加密和鑒別提供了一種基本的方法。它通常是先生成一對RSA 密鑰,其中之一是保密密鑰,由用戶保存;另一個為公開密鑰,可對外公開,甚至可在網(wǎng)絡(luò)服務(wù)器中注冊,人們用公鑰加密文件發(fā)送給個人,個人就可以用私鑰解密 接受。為提高保密強(qiáng)度,RSA密鑰至少為500位長,一般推薦使用1024位。
該算法基于下面的兩個事實(shí),這些事實(shí)保證了RSA算法的安全有效性:
1) 已有確定一個數(shù)是不是質(zhì)數(shù)的快速算法;
2) 尚未找到確定一個合數(shù)的質(zhì)因子的快速算法。
2.2.1.2工作原理
1) 任意選取兩個不同的大質(zhì)數(shù)p和q,計算乘積r=p*q;
2) 任 意選取一個大整數(shù)e,e與(p-1)*(q-1)互質(zhì),整數(shù)e用做加密密鑰。注意:e的選取是很
容易的,例如,所有大于p和q的質(zhì)數(shù)都可用。
3) 確定解密密鑰d: d * e = 1 modulo(p - 1)*(q - 1) 根據(jù)e、p和q可以容易地計算出
d。
4) 公開整數(shù)r和e,但是不公開d;
5) 將明文P (假設(shè)P是一個小于r的整數(shù))加密為密文C,計算方法為:
C = Pe modulo r
6) 將密文C解密為明文P,計算方法為:
P = Cd modulo r
然而只根據(jù)r和e(不是p和q)要計算出d是不可能的。因此,任何人都可對明文進(jìn)行
加密,但只有授權(quán)用戶(知道d)才可對密文解密。
2.2.1.3優(yōu)點(diǎn)
RSA算法是第一個能同時用于加密和數(shù)字簽名的算法,也易于理解和操作。RSA是被研究得最廣泛的公鑰算法,從提出到現(xiàn)在已近二十年,經(jīng)歷了各種攻 擊的考驗(yàn),逐漸為人們接受,普遍認(rèn)為是目前最優(yōu)秀的公鑰方案之一。該算法的加密密鑰和加密算法分開,使得密鑰分配更為方便。它特別符合計算機(jī)網(wǎng)絡(luò)環(huán)境。對 于 網(wǎng)上的大量用戶,可以將加密密鑰用電話簿的方式印出。如果某用戶想與另一用戶進(jìn)行保密通信,只需從公鑰簿上查出對方的加密密鑰,用它對所傳送的信息加密發(fā) 出即可。對方收到信息后,用僅為自己所知的解密密鑰將信息脫密,了解報文的內(nèi)容。由此可看出,RSA算法解決了大量網(wǎng)絡(luò)用戶密鑰管理的難題,這是公鑰密碼 系統(tǒng)相對于對稱密碼系統(tǒng)最突出的優(yōu)點(diǎn)。
2.2.1.4缺點(diǎn)
1) 產(chǎn)生密鑰很麻煩,受到素數(shù)產(chǎn)生技術(shù)的限制,因而難以做到一次一密。
2) 安全性, RSA的安全性依賴于大數(shù)的因子分解,但并沒有從理論上證明破譯RSA的難度
與大數(shù)分解難度等價,而且密碼學(xué)界多數(shù)人士傾向于因子分解不是NPC問題。目前,人們已能分解140多個十進(jìn)制位的大素數(shù),這就要求使用更長的密 鑰,速度更慢;另外,目前人們正在積極尋找攻擊RSA的方法,如選擇密文攻擊,一般攻擊者是將某一信息作一下偽裝(Blind),讓擁有私鑰的實(shí)體簽署。 然后,經(jīng)過計算就可得到它所想要的信息。實(shí)際上,攻擊利用的都是同一個弱點(diǎn),即存在這樣一個事實(shí):乘冪保留了輸入的乘法結(jié)構(gòu):
( XM )d = Xd *Md mod n
前面已經(jīng)提到,這個固有的問題來自于公鑰密碼系統(tǒng)的最有用的特征--每個人都能使用公鑰。 但從算法上無法解決這一問題,主要措施有兩條:一條是采用好的公鑰協(xié)議,保證工作過程中實(shí)體不對其他實(shí)體任意產(chǎn)生的信息解密,不對自己一無所知的信息簽 名;另一條是決不對陌生人送來的隨機(jī)文檔簽名,簽名時首先使用One-Way Hash Function對文檔作HASH處理,或同時使用不同的簽名算法。除了利用公共模數(shù),人們還嘗試一些利用解密指數(shù)或φ(n)等等攻擊.
3) 速度太慢,由于RSA 的分組長度太大,為保證安全性,n 至少也要 600 bitx以上,使運(yùn)算代價很高,尤其是速度較慢,較對稱密碼算法慢幾個數(shù)量級;且隨著大數(shù)分解技術(shù)的發(fā)展,這個長度還在增加,不利于數(shù)據(jù)格式的標(biāo)準(zhǔn)化。目 前,SET(Secure Electronic Transaction)協(xié)議中要求CA采用2048比特長的密鑰,其他實(shí)體使用1024比特的密鑰。為了速度問題,目前人們廣泛使用單,公鑰密碼結(jié)合使 用的方法,優(yōu)缺點(diǎn)互補(bǔ):單鑰密碼加密速度快,人們用它來加密較長的文件,然后用RSA來給文件密鑰加密,極好的解決了單鑰密碼的密鑰分發(fā)問題。
2.2.2 ECC算法
2.2.2.1 簡介
1985年Neal Koblitz和Victor Miller分別獨(dú)立提出基于ECDLP(橢圓曲線離散對數(shù)問題)的ECC密碼系統(tǒng),自此ECC在密碼學(xué)界數(shù)學(xué)界引起了廣泛的越來越熱烈的研究興趣。經(jīng)過 諸多知名密碼學(xué)家和數(shù)學(xué)家近二十年的研究表明,ECC所基于的ECDLP較IFP和DLP(離散對數(shù)問題)更難解,目前人們能找到最有效的求解ECDLP 的算法(Pollard rho)也是指數(shù)級時間復(fù)雜度的。而近幾年數(shù)學(xué)家和密碼學(xué)家們已經(jīng)證明的一些結(jié)論暗示著ECDLP甚至可能不存在亞指數(shù)時間復(fù)雜度的求解算法,這暗示著 ECC可能是唯一無法用亞指數(shù)算法破解的公鑰密碼。
在已知的公鑰密碼體制中,橢圓曲線密碼體制具有每bit 最高強(qiáng)度的安全性,最快的處理速度和最低的開銷,至今解決橢圓曲線離散對數(shù)最好的算法是完全指數(shù)時間算法。 而IFP 和DLP 都有亞指數(shù)時間算法,這意味著隨著長度的增加,求解ECDLP 的難度比求解IFP 和DLP 的難度增加得快得多。 因此ECC僅需要更小的密鑰長度就可以提供跟RSA 和DSA 相當(dāng)?shù)陌踩浴?研究證明 ,基于橢圓曲線上的密碼體制使用160bit 的密鑰提供的安全性相當(dāng)于RSA 和DSA 使用1024bit 密鑰提供的安全性,210bit 與2048bit 相當(dāng)。 而且在私鑰運(yùn)算(簽名和解密) 方面橢圓曲線上的密碼體制要比RSA 和DSA 快很多,但它的簽名驗(yàn)證和加密速度太慢。 另外,ECC 系統(tǒng)的密鑰生成速度比RSA 快百倍以上。 同時,橢圓曲線資源豐富,同一個有限域上存在著大量不同的橢圓曲線,這為安全性增加了額外的保證。
另外,ECC從實(shí)現(xiàn)的角度來看也有更高的效率。因?yàn)槠渚哂忻荑€短這一天然的優(yōu)勢,就比RSA有著更多的應(yīng)用領(lǐng)域。由于橢圓曲線密碼的密鑰較短(如 160位ECC的私鑰長度僅為1024位RSA的1/6。4,160位公鑰長度僅為1024位RSA的1/3。2),這可以為智能卡這類資源極度受限的嵌 入式系統(tǒng)節(jié)省較多的存儲空間,使得其它程序可利用更多的存儲器來完成復(fù)雜的任務(wù)。而對于像芯片這樣的實(shí)現(xiàn)方式,密鑰短也能使整個生產(chǎn)的成本下降。在使用的 過程中也會由于密鑰短而得到更高的速度。
2.2.2.2原理——橢圓曲線上的難題
橢圓曲線上離散對數(shù)問題ECDLP定義如下:給定素數(shù)p和橢圓曲線E,對Q=kP,在已知P,Q 的情況下求出小于p的正整數(shù)k??梢宰C明由k和P計算Q比較容易,而由Q和P計算k則比較困難。
將橢圓曲線中的加法運(yùn)算與離散對數(shù)中的模乘運(yùn)算相對應(yīng),將橢圓曲線中的乘法運(yùn)算與離散對數(shù)中的模冪運(yùn)算相對應(yīng),我們就可以建立基于橢圓曲線的對應(yīng)的 密碼體制。
例如,對應(yīng)Diffie-Hellman公鑰系統(tǒng),我們可以通過如下方式在橢圓曲線上予以實(shí)現(xiàn):在E上選取生成元P,要求由P產(chǎn)生的群元素足夠多, 通信雙方A和B分別選取a和b,a和b 予以保密,但將aP和bP公開,A和B間通信用的密鑰為abP,這是第三者無法得知的。
對應(yīng)ELGamal密碼系統(tǒng)可以采用如下的方式在橢圓曲線上予以實(shí)現(xiàn):
將明文m嵌入到E上Pm點(diǎn),選一點(diǎn)B∈E,每一用戶都選一整數(shù)a,0<a<N,N為階數(shù)已知,a保密,aB公開。欲向A送m,可送去下面一對數(shù)偶: [kB,Pm+k(aAB)],k是隨機(jī)產(chǎn)生的整數(shù)。A可以從kB求得k(aAB)。通過:Pm+k(aAB)- k(aAB)=Pm恢復(fù)Pm。同樣對應(yīng)DSA,考慮如下等式:
K=kG [其中 K,G為Ep(a,b)上的點(diǎn),k為小于n(n是點(diǎn)G的階)的整數(shù)]
不難發(fā)現(xiàn),給定k和G,根據(jù)加法法則,計算K很容易;但給定K和G,求k就相對困難了。
這就是橢圓曲線加密算法采用的難題。我們把點(diǎn)G稱為基點(diǎn)(base point),k(k<n,n為基點(diǎn)G的階)稱為私有密鑰(privte key),K稱為公開密鑰(public key)。
2.2.2.3 RSA與ECC的比較
ECC和RSA相比,在許多方面都有對絕對的優(yōu)勢,主要體現(xiàn)在以下方面:
1)抗攻擊性強(qiáng)。相同的密鑰長度,其抗攻擊性要強(qiáng)很多倍。
2)計算量小,處理速度快。ECC總的速度比RSA、DSA要快得多。
3)存儲空間占用小。ECC的密鑰尺寸和系統(tǒng)參數(shù)與RSA、DSA相比要小得多,意味著它所占的存貯空間要小得多。這對于加密算法在IC卡上的應(yīng)用 具有特別重要的意義。
4)帶寬要求低。當(dāng)對長消息進(jìn)行加解密時,三類密碼系統(tǒng)有相同的帶寬要求,但應(yīng)用于短消息時ECC帶寬要求卻低得多。帶寬要求低使ECC在無線網(wǎng)絡(luò) 領(lǐng)域具有廣泛的應(yīng)用前景。
ECC的這些特點(diǎn)使它必將取代RSA,成為通用的公鑰加密算法。比如SET協(xié)議的制定者已
把它作為下一代SET協(xié)議中缺省的公鑰密碼算法。
下面兩張表示是RSA和ECC的安全性和速度的比較。
攻破時間(MIPS年) | RSA/DSA(密鑰長度) | ECC密鑰長度 | RSA/ECC密鑰長度比 |
104 | 512 | 106 | 5:1 |
108 | 768 | 132 | 6:1 |
1011 | 1024 | 160 | 7:1 |
1020 | 2048 | 210 | 10:1 |
1078 | 21000 | 600 | 35:1 |
RSA和ECC安全模長得比較
功能 | Security Builder 1.2 | BSAFE 3.0 |
163位ECC(ms) | 1,023位RSA(ms) |
密鑰對生成 | 3.8 | 4,708.3 |
簽名 | 2.1(ECNRA) | 228.4 |
3.0(ECDSA) |
認(rèn)證 | 9.9(ECNRA) | 12.7 |
10.7(ECDSA) |
Diffie—Hellman密鑰交換 | 7.3 | 1,654.0 |
RSA和ECC速度比較
2.3 散列算法(Hash)
2.3.1簡介
散列是信息的提煉,通常其長度要比信息小得多,且為一個固定長度。加密性強(qiáng)的散列一定是不可逆的,這就意味著通過散列結(jié)果,無法推出任何部分的原始 信息。任何輸入信息的變化,哪怕僅一位,都將導(dǎo)致散列結(jié)果的明顯變化,這稱之為雪崩效應(yīng)。散列還應(yīng)該是防沖突的,即找不出具有相同散列結(jié)果的兩條信息。具 有這些特性的散列結(jié)果就可以用于驗(yàn)證信息是否被修改。
2.3.1.1 Hash算法的功能和安全特性
1.輸入報文的長度沒有限制;
2.相同的輸入產(chǎn)生相同的輸出;
3.對輸入任何報文,能生成固定長度的消息摘要(數(shù)字指紋);
4.從報文能方便地算出摘要。
5.隨機(jī)性:消息摘要看起來隨機(jī),難以確定輸入/輸出的關(guān)系;
6.唯一性:幾乎不可能找到兩個消息產(chǎn)生相同的消息摘要;
7.單向性:即如果給出輸出,則很難確定出輸入消息。
2.3.1.2 hash算法用途
1)計算消息摘要
2)用于數(shù)字簽名或公開信息的完整性驗(yàn)證。計算MAC(Message Authentication Code)
將保密信息和雙方共享的密鑰一起計算摘要,用于保密信息的完整性驗(yàn)證。
2.3.2 SHA-1
在1993年,安全散列算法(SHA)由美國國家標(biāo)準(zhǔn)和技術(shù)協(xié)會(NIST)提出,并作為聯(lián)邦信息處理標(biāo)準(zhǔn)(FIPS PUB 180)公布;1995年又發(fā)布了一個修訂版FIPS PUB 180-1,通常稱之為SHA-1。SHA-1是基于MD4算法的,并且它的設(shè)計在很大程度上是模仿MD4的?,F(xiàn)在已成為公認(rèn)的最安全的散列算法之一,并 被廣泛使用。
NIST 發(fā)布了三個額外的 SHA 變體,每個都有更長的訊息摘要。以它們的摘要長度 (以位元計算) 加在原名后面來命名:"SHA-256", "SHA-384" 和 "SHA-512"。它們發(fā)布于 2001年的 FIPS PUB 180-2 草稿中,隨即通過審查和評論。包含 SHA-1 的 FIPS PUB 180-2,于 2002年以官方標(biāo)準(zhǔn)發(fā)布。這些新的散列函數(shù)并沒有接受像 SHA-1 一樣的公眾密碼社群做詳細(xì)的檢驗(yàn),所以它們的密碼安全性還不被大家廣泛的信任。2004年2月,發(fā)布了一次 FIPS PUB 180-2 的變更通知,加入了一個額外的變種 "SHA-224",定義了符合雙金鑰 3DES 所需的金鑰長度。
三、加密算法的選擇
前面的章節(jié)已經(jīng)介紹了對稱解密算法和非對稱加密算法,有很多人疑惑:那我們在實(shí)際使用的過程中究竟該使用哪一種比較好呢?
我們應(yīng)該根據(jù)自己的使用特點(diǎn)來確定,由于非對稱加密算法的運(yùn)行速度比對稱加密算法的速度慢很多,當(dāng)我們需要加密大量的數(shù)據(jù)時,建議采用對稱加密算 法,提高加解密速度。
對稱加密算法不能實(shí)現(xiàn)簽名,因此簽名只能非對稱算法。
由于對稱加密算法的密鑰管理是一個復(fù)雜的過程,密鑰的管理直接決定著他的安全性,因此當(dāng)數(shù)據(jù)量很小時,我們可以考慮采用非對稱加密算法。
在實(shí)際的操作過程中,我們通常采用的方式是:采用非對稱加密算法管理對稱算法的密鑰,然后用對稱加密算法加密數(shù)據(jù),這樣我們就集成了兩類加密算法的 優(yōu)點(diǎn),既實(shí)現(xiàn)了加密速度快的優(yōu)點(diǎn),又實(shí)現(xiàn)了安全方便管理密鑰的優(yōu)點(diǎn)。
如果在選定了加密算法后,那采用多少位的密鑰呢?一般來說,密鑰越長,運(yùn)行的速度就越慢,應(yīng)該根據(jù)的我們實(shí)際需要的安全級別來選擇,一般來 說,RSA建議采用1024位的數(shù)字,ECC建議采用160位,AES采用128為即可。
四、密碼學(xué)在現(xiàn)代的應(yīng)用
隨著密碼學(xué)商業(yè)應(yīng)用的普及,公鑰密碼學(xué)受到前所未有的重視。除傳統(tǒng)的密碼應(yīng)用系統(tǒng)外,PKI系統(tǒng)以公鑰密碼技術(shù)為主,提供加密、簽名、認(rèn)證、密鑰管 理、分配等功能。
保密通信:保密通信是密碼學(xué)產(chǎn)生的動因。使用公私鑰密碼體制進(jìn)行保密通信時,信息接收者只有知道對應(yīng)的密鑰才可以解密該信息。
數(shù)字簽名:數(shù)字簽名技術(shù)可以代替?zhèn)鹘y(tǒng)的手寫簽名,而且從安全的角度考慮,數(shù)字簽名具有很好的防偽造功能。在政府機(jī)關(guān)、軍事領(lǐng)域、商業(yè)領(lǐng)域有廣泛的應(yīng) 用環(huán)境。
秘密共享:秘密共享技術(shù)是指將一個秘密信息利用密碼技術(shù)分拆成n個稱為共享因子的信息,分發(fā)給n個成員,只有k(k≤n)個合法成員的共享因子才可 以恢復(fù)該秘密信息,其中任何一個或m(m≤k)個成員合作都不知道該秘密信息。利用秘密共享技術(shù)可以控制任何需要多個人共同控制的秘密信息、命令等。
認(rèn)證功能:在公開的信道上進(jìn)行敏感信息的傳輸,采用簽名技術(shù)實(shí)現(xiàn)對消息的真實(shí)性、完整性進(jìn)行驗(yàn)證,通過驗(yàn)證公鑰證書實(shí)現(xiàn)對通信主體的身份驗(yàn)證。
密鑰管理:密鑰是保密系統(tǒng)中更為脆弱而重要的環(huán)節(jié),公鑰密碼體制是解決密鑰管理工作的有力工具;利用公鑰密碼體制進(jìn)行密鑰協(xié)商和產(chǎn)生,保密通信雙方 不需要事先共享秘密信息;利用公鑰密碼體制進(jìn)行密鑰分發(fā)、保護(hù)、密鑰托管、密鑰恢復(fù)等。
基于公鑰密碼體制可以實(shí)現(xiàn)以上通用功能以外,還可以設(shè)計實(shí)現(xiàn)以下的系統(tǒng):安全電子商務(wù)系統(tǒng)、電子現(xiàn)金系統(tǒng)、電子選舉系統(tǒng)、電子招投標(biāo)系統(tǒng)、電子彩票 系統(tǒng)等。
公鑰密碼體制的產(chǎn)生是密碼學(xué)由傳統(tǒng)的政府、軍事等應(yīng)用領(lǐng)域走向商用、民用的基礎(chǔ),同時互聯(lián)網(wǎng)、電子商務(wù)的發(fā)展為密碼學(xué)的發(fā)展開辟了更為廣闊的前景。
五、加密算法的未來
隨著計算方法的改進(jìn),計算機(jī)運(yùn)行速度的加快,網(wǎng)絡(luò)的發(fā)展,越來越多的算法被破解。
在2004年國際密碼學(xué)會議(Crypto’2004)上,來自中國山東大學(xué)的王小云教授做的破譯MD5、HAVAL-128、MD4和 RIPEMD算法的報告,令在場的國際頂尖密碼學(xué)專家都為之震驚,意味著這些算法將從應(yīng)用中淘汰。隨后,SHA-1也被宣告被破解。
歷史上有三次對DES有影響的攻擊實(shí)驗(yàn)。1997年,利用當(dāng)時各國 7萬臺計算機(jī),歷時96天破解了DES的密鑰。1998年,電子邊境基金會(EFF)用25萬美元制造的專用計算機(jī),用56小時破解了DES的密鑰。 1999年,EFF用22小時15分完成了破解工作。因此。曾經(jīng)有過卓越貢獻(xiàn)的DES也不能滿足我們?nèi)找嬖鲩L的需求了。
最近,一組研究人員成功的把一個512位的整數(shù)分解因子,宣告了RSA的破解。
我們說數(shù)據(jù)的安全是相對的,可以說在一定時期一定條件下是安全的,隨著硬件和網(wǎng)絡(luò)的發(fā)展,或者是另一個王小云的出現(xiàn),目前的常用加密算法都有可能在 短時間內(nèi)被破解,那時我們不得不使用更長的密鑰或更加先進(jìn)的算法,才能保證數(shù)據(jù)的安全,因此加密算法依然需要不斷發(fā)展和完善,提供更高的加密安全強(qiáng)度和運(yùn) 算速度。
縱觀這兩種算法一個從DES到3DES再到AES,一個從RSA到ECC。其發(fā)展角度無不是從密鑰的簡單性,成本的低廉性,管理的簡易 性,算法的復(fù)雜性,保密的安全性以及計算的快速性這幾個方面去考慮。因此,未來算法的發(fā)展也必定是從這幾個角度出發(fā)的,而且在實(shí)際操作中往往把這兩種算法 結(jié)合起來,也需將來一種集兩種算法優(yōu)點(diǎn)于一身的新型算法將會出現(xiàn),到那個時候,電子商務(wù)的實(shí)現(xiàn)必將更加
的快捷和安全