直到現(xiàn)代以前,密碼學(xué)幾乎專指加密算法:將普通信息(明文)轉(zhuǎn)換成難以理解的資料(密文)的過(guò)程;解密算法則是其相反的過(guò)程:由密文轉(zhuǎn)換回明文;密碼機(jī)(cipher或cypher)包含了這兩種算法,一般加密即同時(shí)指稱加密與解密的技術(shù)。密碼機(jī)的具體運(yùn)作由兩部分決定:一個(gè)是算法,另一個(gè)是鑰匙。鑰匙是一個(gè)用于密碼機(jī)算法的秘密參數(shù),通常只有通訊者擁有。歷史上,鑰匙通常未經(jīng)認(rèn)證或完整性測(cè)試而被直接使用在密碼機(jī)上,密鑰來(lái)源于密碼技術(shù)領(lǐng)域。

背景簡(jiǎn)介

在漢語(yǔ)口語(yǔ)中,電腦系統(tǒng)或網(wǎng)絡(luò)使用的個(gè)人帳戶口令(password)也常被以密碼代稱,雖然口令亦屬密碼學(xué)研究的范圍,但學(xué)術(shù)上口令與密碼學(xué)中所稱的鑰匙并不相同,即使兩者間常有密切的關(guān)連。

密鑰定義

【mì yuè】讀音下的“密鑰”的意思:緊密的鎖閉。這里的用法用了“密鑰”的動(dòng)詞性質(zhì)。

【 mì yào】讀音下的“密鑰”的意思:密碼學(xué)中的專有名詞,指解密所需要的特殊代碼。這里用了“密鑰”的名詞性。

密鑰發(fā)展

對(duì)于普通的對(duì)稱密碼學(xué),加密運(yùn)算與解密運(yùn)算使用同樣的密鑰。通常,使用的加密算法比較簡(jiǎn)便高效,密鑰簡(jiǎn)短,破譯極其困難,由于系統(tǒng)的保密性主要取決于密鑰的安全性,所以,在公開(kāi)的計(jì)算機(jī)網(wǎng)絡(luò)上安全地傳送和保管密鑰是一個(gè)嚴(yán)峻的問(wèn)題。正是由于對(duì)稱密碼學(xué)中雙方都使用相同的密鑰,因此無(wú)法實(shí)現(xiàn)數(shù)據(jù)簽名和不可否認(rèn)性等功能。此即為對(duì)稱密鑰體系,又稱通用密鑰體系。

20世紀(jì)70年代以來(lái),一些學(xué)者提出了公開(kāi)密鑰體制,即運(yùn)用單向函數(shù)的數(shù)學(xué)原理,以實(shí)現(xiàn)加、解密密鑰的分離。加密密鑰是公開(kāi)的,解密密鑰是保密的。這種新的密碼體制,引起了密碼學(xué)界的廣泛注意和探討,不像普通的對(duì)稱密碼學(xué)中采用相同的密鑰加密、解密數(shù)據(jù),此即為非對(duì)稱密鑰體系,又稱公用密鑰體系。

密鑰分類

密鑰分為兩種:對(duì)稱密鑰與非對(duì)稱密鑰,所以密鑰密碼體系就分為兩個(gè)領(lǐng)域,通用密鑰體系和公用密鑰體系。

對(duì)稱密鑰加密

對(duì)稱密鑰加密,又稱私鑰加密,即信息的發(fā)送方和接收方用一個(gè)密鑰去加密和解密數(shù)據(jù)。它的最大優(yōu)勢(shì)是加/解密速度快,適合于對(duì)大數(shù)據(jù)量進(jìn)行加密,但密鑰管理困難。

非對(duì)稱密鑰加密系統(tǒng)

非對(duì)稱密鑰加密,又稱公鑰密鑰加密。它需要使用一對(duì)密鑰 來(lái)分別完成加密和解密操作,一個(gè)公開(kāi)發(fā)布,即公開(kāi)密鑰,另一 個(gè)由用戶自己秘密保存,即私用密鑰。信息發(fā)送者用公開(kāi)密鑰去 加密,而信息接收者則用私用密鑰去解密。公鑰機(jī)制靈活,但加密和解密速度卻比對(duì)稱密鑰加密慢得多。

通用密鑰體系

通用密鑰密碼體系的加密密鑰Ke和解密密鑰Kd是通用的,即發(fā)送方和接收方使用同樣密鑰的密碼體制,也稱之為“傳統(tǒng)密碼體制”。

例如,人類歷史上最古老的“愷撒密碼”算法,是在古羅馬時(shí)代使用的密碼方式。由于無(wú)論是何種語(yǔ)言文字,都可以通過(guò)編碼與二進(jìn)制數(shù)字串對(duì)應(yīng),所以經(jīng)過(guò)加密的文字仍然可變成二進(jìn)制數(shù)字串,不影響數(shù)據(jù)通信的實(shí)現(xiàn)。

現(xiàn)以英語(yǔ)為例來(lái)說(shuō)明使用愷撒密碼方式的通用密鑰密碼體系原理。

例如:愷撒密碼的原理是,對(duì)于明文的各個(gè)字母,根據(jù)它在26個(gè)英文字母表中的位置,按某個(gè)固定間隔n變換字母,即得到對(duì)應(yīng)的密文。這個(gè)固定間隔的數(shù)字n就是加密密鑰,同時(shí)也是解密密鑰。例cryptography是明文,使用密鑰n=3,加密過(guò)程如圖所示:

明文: C R Y P T O G R A P H Y

| | |

| |................. | 密鑰:n=3

| | |

密文: F U B S W R J U D S K B

明文的第一個(gè)字母C在字母表中的位置設(shè)為1,以4為間隔,往后第4個(gè)字母是F,把C置換為F;同樣,明文中的第二個(gè)字母R的位置設(shè)為1,往后第4個(gè)字母是U,把R置換為U;依此類推,直到把明文中的字母置換完畢,即得到密文。密文是意思不明的文字,即使第三者得到也毫無(wú)意義。通信的對(duì)方得到密文之后,用同樣的密文n=4,對(duì)密文的每個(gè)字母,按往前間隔4得到的字母進(jìn)行置換的原則,即可解密得到明文。

愷撒密碼方式的密鑰只有26種,只要知道了算法,最多將密鑰變換26次做試驗(yàn),即可破解密碼。因此,愷撒密碼的安全性依賴于算法的保密性。

在通用密碼體制中,目前得到廣泛應(yīng)用的典型算法是DES算法。DES是由“轉(zhuǎn)置”方式和“換字”方式合成的通用密鑰算法,先將明文(或密文)按64位分組,再逐組將64位的明文(或密文),用56位(另有8位奇偶校驗(yàn)位,共64位)的密鑰,經(jīng)過(guò)各種復(fù)雜的計(jì)算和變換,生成64位的密文(或明文),該算法屬于分組密碼算法。

DES算法可以由一塊集成電路實(shí)現(xiàn)加密和解密功能。該算法是對(duì)二進(jìn)制數(shù)字化信息加密及解密的算法,是通常數(shù)據(jù)通信中,用計(jì)算機(jī)對(duì)通信數(shù)據(jù)加密保護(hù)時(shí)使用的算法。DES算法在1977年作為數(shù)字化信息的加密標(biāo)準(zhǔn),由美國(guó)商業(yè)部國(guó)家標(biāo)準(zhǔn)局制定,稱為“數(shù)據(jù)加密標(biāo)準(zhǔn)”,并以“聯(lián)邦信息處理標(biāo)準(zhǔn)公告”的名稱,于1977年1月15日正式公布。使用該標(biāo)準(zhǔn),可以簡(jiǎn)單地生成DES密碼。

公用密鑰體系

1976年提出公共密鑰密碼體制,其原理是加密密鑰和解密密鑰分離。加密技術(shù)采用一對(duì)匹配的密鑰進(jìn)行加密、解密,具有兩個(gè)密鑰,一個(gè)是公鑰一個(gè)是私鑰,它們具有這種性質(zhì):每把密鑰執(zhí)行一種對(duì)數(shù)據(jù)的單向處理,每把的功能恰恰與另一把相反,一把用于加密時(shí),則另一把就用于解密。用公鑰加密的文件只能用私鑰解密,而私鑰加密的文件只能用公鑰解密。公共密鑰是由其主人加以公開(kāi)的,而私人密鑰必須保密存放。為發(fā)送一份保密報(bào)文,發(fā)送者必須使用接收者的公共密鑰對(duì)數(shù)據(jù)進(jìn)行加密,一旦加密,只有接收方用其私人密鑰才能加以解密。相反地,用戶也能用自己私人密鑰對(duì)數(shù)據(jù)加以處理。換句話說(shuō),密鑰對(duì)的工作是可以任選方向的。這提供了"數(shù)字簽名"的基礎(chǔ),如果要一個(gè)用戶用自己的私人密鑰對(duì)數(shù)據(jù)進(jìn)行了處理,別人可以用他提供的公共密鑰對(duì)數(shù)據(jù)加以處理。由于僅僅擁有者本人知道私人密鑰,這種被處理過(guò)的報(bào)文就形成了一種電子簽名----一種別人無(wú)法產(chǎn)生的文件。數(shù)字證書(shū)中包含了公共密鑰信息,從而確認(rèn)了擁有密鑰對(duì)的用戶的身份。

這樣,一個(gè)具體用戶就可以將自己設(shè)計(jì)的加密密鑰和算法公諸于眾,而只保密解密密鑰。任何人利用這個(gè)加密密鑰和算法向該用戶發(fā)送的加密信息,該用戶均可以將之還原。公共密鑰密碼的優(yōu)點(diǎn)是不需要經(jīng)安全渠道傳遞密鑰,大大簡(jiǎn)化了密鑰管理。它的算法有時(shí)也稱為公開(kāi)密鑰算法或簡(jiǎn)稱為公鑰算法。

公鑰本身并沒(méi)有什么標(biāo)記,僅從公鑰本身不能判別公鑰的主人是誰(shuí)。

在很小的范圍內(nèi),比如A和B這樣的兩人小集體,他們之間相互信任,交換公鑰,在互聯(lián)網(wǎng)上通訊,沒(méi)有什么問(wèn)題。這個(gè)集體再稍大一點(diǎn),也許彼此信任也不成問(wèn)題,但從法律角度講這種信任也是有問(wèn)題的。如再大一點(diǎn),信任問(wèn)題就成了一個(gè)大問(wèn)題。

證書(shū)

互聯(lián)網(wǎng)絡(luò)的用戶群決不是幾個(gè)人互相信任的小集體,在這個(gè)用戶群中,從法律角度講用戶彼此之間都不能輕易信任。所以公鑰加密體系采取了另一個(gè)辦法,將公鑰和公鑰的主人名字聯(lián)系在一起,再請(qǐng)一個(gè)大家都信得過(guò)有信譽(yù)的公正、權(quán)威機(jī)構(gòu)確認(rèn),并加上這個(gè)權(quán)威機(jī)構(gòu)的簽名。這就形成了證書(shū)。

由于證書(shū)上有權(quán)威機(jī)構(gòu)的簽字,所以大家都認(rèn)為證書(shū)上的內(nèi)容是可信任的;又由于證書(shū)上有主人的名字等身份信息,別人就很容易地知道公鑰的主人是誰(shuí)。

1978年提出公共密鑰密碼的具體實(shí)施方案,即RSA方案。

1991年提出的DSA算法也是一種公共密鑰算法,在數(shù)字簽名方面有較大的應(yīng)用優(yōu)勢(shì)

公開(kāi)密鑰密碼體制是現(xiàn)代密碼學(xué)的最重要的發(fā)明和進(jìn)展。

在公鑰體制中,加密密鑰不同于解密密鑰。人們將加密密鑰公之于眾,誰(shuí)都可以使用;而解密密鑰只有解密人自己知道。迄今為止的所有公鑰密碼體系中,RSA系統(tǒng)是最著名、使用最廣泛的一種。

CA(Certificate Authority)

電子簽證機(jī)關(guān)(即CA)。CA也擁有一個(gè)證書(shū)(內(nèi)含公鑰),當(dāng)然,它也有自己的私鑰,所以它有簽字的能力。網(wǎng)上的公眾用戶通過(guò)驗(yàn)證CA的簽字從而信任CA,任何人都應(yīng)該可以得到CA的證書(shū)(含公鑰),用以驗(yàn)證它所簽發(fā)的證書(shū)。

如果用戶想得到一份屬于自己的證書(shū),他應(yīng)先向CA提出申請(qǐng)。在CA判明申請(qǐng)者的身份后,便為他分配一個(gè)公鑰,并且CA將該公鑰與申請(qǐng)者的身份信息綁在一起,并為之簽字后,便形成證書(shū)發(fā)給那個(gè)用戶(申請(qǐng)者)。

如果一個(gè)用戶想鑒別另一個(gè)證書(shū)的真?zhèn)?,他就用CA的公鑰對(duì)那個(gè)證書(shū)上的簽字進(jìn)行驗(yàn)證(如前所述,CA簽字實(shí)際上是經(jīng)過(guò)CA私鑰加密的信息,簽字驗(yàn)證的過(guò)程還伴隨使用CA公鑰解密的過(guò)程),一旦驗(yàn)證通過(guò),該證書(shū)就被認(rèn)為是有效的。

CA除了簽發(fā)證書(shū)之外,它的另一個(gè)重要作用是證書(shū)和密鑰的管理。

由此可見(jiàn),證書(shū)就是用戶在網(wǎng)上的電子個(gè)人身份證,同日常生活中使用的個(gè)人身份證作用一樣。CA相當(dāng)于網(wǎng)上公安局,專門發(fā)放、驗(yàn)證身份證。

密鑰算法

公開(kāi)密鑰算法是在1976年由當(dāng)時(shí)在美國(guó)斯坦福大學(xué)的迪菲(Diffie)和赫爾曼(Hellman)兩人首先發(fā)明的(論文"New Direction in Cryptography")。但目前最流行的RSA是1977年由MIT教授Ronald L.Rivest,Adi Shamir和Leonard M.Adleman共同開(kāi)發(fā)的,分別取自三名數(shù)學(xué)家的名字的第一個(gè)字母來(lái)構(gòu)成的。

1976年提出的公開(kāi)密鑰密碼體制思想不同于傳統(tǒng)的對(duì)稱密鑰密碼體制,它要求密鑰成對(duì)出現(xiàn),一個(gè)為加密密鑰(e),另一個(gè)為解密密鑰(d),且不可能從其中一個(gè)推導(dǎo)出另一個(gè)。自1976年以來(lái),已經(jīng)提出了多種公開(kāi)密鑰密碼算法,其中許多是不安全的,一些認(rèn)為是安全的算法又有許多是不實(shí)用的,它們要么是密鑰太大,要么密文擴(kuò)展十分嚴(yán)重。多數(shù)密碼算法的安全基礎(chǔ)是基于一些數(shù)學(xué)難題,這些難題專家們認(rèn)為在短期內(nèi)不可能得到解決。因?yàn)橐恍﹩?wèn)題(如因子分解問(wèn)題)至今已有數(shù)千年的歷史了。

公鑰加密算法也稱非對(duì)稱密鑰算法,用兩對(duì)密鑰:一個(gè)公共密鑰和一個(gè)專用密鑰。用戶要保障專用密鑰的安全;公共密鑰則可以發(fā)布出去。公共密鑰與專用密鑰是有緊密關(guān)系的,用公共密鑰加密的信息只能用專用密鑰解密,反之亦然。由于公鑰算法不需要聯(lián)機(jī)密鑰服務(wù)器,密鑰分配協(xié)議簡(jiǎn)單,所以極大簡(jiǎn)化了密鑰管理。除加密功能外,公鑰系統(tǒng)還可以提供數(shù)字簽名。

公鑰加密算法中使用最廣的是RSA。RSA使用兩個(gè)密鑰,一個(gè)公共密鑰,一個(gè)專用密鑰。如用其中一個(gè)加密,則可用另一個(gè)解密,密鑰長(zhǎng)度從40到2048bit可變,加密時(shí)也把明文分成塊,塊的大小可變,但不能超過(guò)密鑰的長(zhǎng)度,RSA算法把每一塊明文轉(zhuǎn)化為與密鑰長(zhǎng)度相同的密文塊。密鑰越長(zhǎng),加密效果越好,但加密解密的開(kāi)銷也大,所以要在安全與性能之間折衷考慮,一般64位是較合適的。RSA的一個(gè)比較知名的應(yīng)用是SSL,在美國(guó)和加拿大SSL用128位RSA算法,由于出口限制,在其它地區(qū)(包括中國(guó))通用的則是40位版本。

RSA算法研制的最初理念與目標(biāo)是努力使互聯(lián)網(wǎng)安全可靠,旨在解決DES算法秘密密鑰的利用公開(kāi)信道傳輸分發(fā)的難題。而實(shí)際結(jié)果不但很好地解決了這個(gè)難題;還可利用RSA來(lái)完成對(duì)電文的數(shù)字簽名以抗對(duì)電文的否認(rèn)與抵賴;同時(shí)還可以利用數(shù)字簽名較容易地發(fā)現(xiàn)攻擊者對(duì)電文的非法篡改,以保護(hù)數(shù)據(jù)信息的完性。公用密鑰的優(yōu)點(diǎn)就在于,也許你并不認(rèn)識(shí)某一實(shí)體,但只要你的服務(wù)器認(rèn)為該實(shí)體的CA是可靠的,就可以進(jìn)行安全通信,而這正是Web商務(wù)這樣的業(yè)務(wù)所要求的。例如信用卡購(gòu)物。服務(wù)方對(duì)自己的資源可根據(jù)客戶CA的發(fā)行機(jī)構(gòu)的可靠程度來(lái)授權(quán)。目前國(guó)內(nèi)外尚沒(méi)有可以被廣泛信賴的CA。美國(guó)Natescape公司的產(chǎn)品支持公用密鑰,但把Natescape公司作為CA。由外國(guó)公司充當(dāng)CA在我國(guó)是一件不可想象的事情。

公共密鑰方案較保密密鑰方案處理速度慢,因此,通常把公共密鑰與專用密鑰技術(shù)結(jié)合起來(lái)實(shí)現(xiàn)最佳性能。即用公共密鑰技術(shù)在通信雙方之間傳送專用密鑰,而用專用密鑰來(lái)對(duì)實(shí)際傳輸?shù)臄?shù)據(jù)加密解密。另外,公鑰加密也用來(lái)對(duì)專用密鑰進(jìn)行加密。

在這些安全實(shí)用的算法中,有些適用于密鑰分配,有些可作為加密算法,還有些僅用于數(shù)字簽名。多數(shù)算法需要大數(shù)運(yùn)算,所以實(shí)現(xiàn)速度很慢,不能用于快的數(shù)據(jù)加密。以下將介紹典型的公開(kāi)密鑰密碼算法-RSA。

RSA算法很好的完成對(duì)電文的數(shù)字簽名以抗對(duì)數(shù)據(jù)的否認(rèn)與抵賴;利用數(shù)字簽名較容易地發(fā)現(xiàn)攻擊者對(duì)電文的非法篡改,以保護(hù)數(shù)據(jù)信息的完整性。目前為止,很多種加密技術(shù)采用了RSA算法,比如PGP(PrettyGoodPrivacy)加密系統(tǒng),它是一個(gè)工具軟件,向認(rèn)證中心注冊(cè)后就可以用它對(duì)文件進(jìn)行加解密或數(shù)字簽名,PGP所采用的就是RSA算法。由此可以看出RSA有很好的應(yīng)用。

密鑰產(chǎn)生

1. 選擇兩個(gè)大素?cái)?shù),p 和q 。

2. 計(jì)算: n = p * q (p,q分別為兩個(gè)互異的大素?cái)?shù),p,q 必須保密,一般要求p,q為安全素?cái)?shù),n的長(zhǎng)度大于512bit ,這主要是因?yàn)镽SA算法的安全性依賴于因子分解大數(shù)問(wèn)題)。有歐拉函數(shù) (n)=(p-1)(q-1)。

3. 然后隨機(jī)選擇加密密鑰e,要求 e 和 ( p - 1 ) * ( q - 1 ) 互質(zhì)。

4. 最后,利用Euclid 算法計(jì)算解密密鑰d, 滿足de≡1(mod φ(n))。其中n和d也要互質(zhì)。數(shù)e和n是公鑰,d是私鑰。兩個(gè)素?cái)?shù)p和q不再需要,應(yīng)該丟棄,不要讓任何人知道。

加密與解密

1. 加密信息 m(二進(jìn)制表示)時(shí),首先把m分成等長(zhǎng)數(shù)據(jù)塊 m1 ,m2,..., mi ,塊長(zhǎng)s,其中 2^s <= n, s 盡可能的大。

2. 對(duì)應(yīng)的密文是:ci ≡mi^e ( mod n ) ( a )

3. 解密時(shí)作如下計(jì)算:mi ≡ci^d ( mod n ) ( b ) RSA 可用于數(shù)字簽名,方案是用 ( a ) 式簽名, ( b )式驗(yàn)證。