對稱密碼可以實現(xiàn)對任意明文的高效加密,通常用于通信會話的加密,但隨著對稱加密應用越來越廣,會話密鑰的管理問題也隨之面臨挑戰(zhàn)。假設網(wǎng)絡中有n個實體需要兩兩通信,那么每個實體必須維護一把與其他任意一個實體之間的會話密鑰,總的會話密鑰數(shù)量為圖片,即達到O(n2)的量級,密鑰管理的復雜度明顯增加。另一方面,分組加密主要依賴于多輪復合的擴散和混淆運算,安全強度有待進一步增強。
公鑰密碼也稱非對稱密碼,即加密密鑰和解密密鑰不同,一個可被公開的密鑰被稱為公鑰,一個私人專用保管的密鑰被稱為私鑰。公鑰與私鑰在數(shù)學上是有緊密關系的,用公鑰加密的信息只能用對應的私鑰解密,反之亦然。由于公鑰算法不需要聯(lián)機密鑰服務器,密鑰分配變得簡單。一個人可以在與許多人交往時使用相同的密鑰對,而不必與每個人分別使用不同的密鑰。只要私鑰是保密的,就可以隨意分發(fā)其公鑰,用戶可以與任意數(shù)目的人員共享一個密鑰對,而不必為每個人單獨設立一個密鑰,顯著降低了密鑰管理復雜度,簡化了密鑰管理操作,有效提高了密碼學的可用性。
公鑰加密是一種干擾信息的方法,使用該方法的雙方擁有一對密鑰,其中一個可以公開分享,而另一個只有預定的目標接收方才知曉。任何人都可能使用私人的公開密鑰對信息進行加密。但是,只要預定接收方的解密密鑰被安全地保護起來,信息就無法被解密。一般而言,公鑰算法的設計依賴于經(jīng)典的數(shù)論難題,即將攻擊者在沒有私鑰的情況下,破解一個公鑰加密系統(tǒng),等效映射到求解數(shù)論難題。這樣,攻擊者若能在沒有私鑰的情況下破解公鑰加密,等效于其求解了公知的數(shù)論難題。這樣的模型假設也因此成為公鑰密碼安全的保障基石。
1976年,Whitfield Diffie和Martin Hellman共同發(fā)表了學術論文《New Direction in Cryptography》,創(chuàng)建了公鑰加密體制。公鑰加密是重大的創(chuàng)新,從根本上改變了加密和解密的過程,也成為40年來信息安全應用領域的一項核心技術。2015年,Diffie和Hellman兩位密碼學家也因創(chuàng)立發(fā)明公鑰加密技術而獲得有著計算機領域諾貝爾美譽的圖靈獎。
1.Diffie-Hellman密鑰交換算法
下面以Alice和Bob為例介紹以Diffie和Hellman命名的DH密鑰交換原理。
(1)選定一個可公開的大質(zhì)數(shù)p和底數(shù)g。
(2)Alice和Bob分別選定一個私有的素數(shù)a和b。
圖1給出了Alice和Bob通過公開交換g、p、A、B,最終各自計算獲得共享密鑰K=gab的基本過程。DH密鑰協(xié)商的目的是讓Alice和Bob安全獲得共享密鑰,任何第三方實體即使截獲雙方通信數(shù)據(jù),也無法計算得到相同的密鑰。
圖1 DH密鑰交換原理
下面再看一個簡單的實例,來說明Alice和Bob協(xié)商計算會話密鑰K的過程。
1)Alice與Bob協(xié)定使用p=23,g=5。
2)Alice選擇一個秘密整數(shù)a=6,計算A=gamodp并發(fā)送給Bob:A=56mod 23=8。
3)Bob選擇一個秘密整數(shù)b=15,計算B=gbmodp并發(fā)送給Alice:B=515mod 23=19。
4)Alice計算K=Bamodp,即196mod 23=2。
5)Bob計算K=Abmodp,即815mod 23=2。
DH是一個公鑰算法,應用的數(shù)論難題是大數(shù)的離散對數(shù)求解難題,即已知g、a,計算A=ga是容易的,但反之,已知A和g,求解a是困難的。這樣,攻擊者即便截獲得到A和B,也無法計算得到a和b,因而也無法計算獲得K。
2.RSA公鑰算法
公開密鑰算法是在1976年由當時在美國斯坦福大學的Diffie和Hellman兩人首先發(fā)明的,但是目前最流行的RSA算法則是1977年由MIT教授Ronald L.Rivest、Adi Shamir和Leonard M.Adleman共同發(fā)明的。RSA也是分別取自3名數(shù)學家人名的第一個字母。RSA算法依賴于大數(shù)因子分解難題,即給定兩個大素數(shù)p、q,計算它們的乘積n=pq是容易的,但反之,給定n,求解p和q是一個經(jīng)典的數(shù)論難題。
(1)密鑰生成
①選擇兩個大素數(shù):p和q。
②計算歐拉函數(shù):φ(n)=(p−1)(q−1)。
③選擇一個正整數(shù)e,使gcd(e,φ(n))=1,即e和φ(n)互為素數(shù)。
④根據(jù)de=1(modφ(n)),利用Euclid算法計算出d。
⑤公鑰即為K=<e,n>。
⑥私鑰即為S=<d,p,q>。
(2)公鑰加密
①記明文信息為m(二進制),將m分成等長數(shù)據(jù)塊m1,m2,…,mi,塊長s,其中2s≤n。
②加密:ci≡mi^e(modn)
③解密:mi≡ci^d(modn)
一開始,RSA選用的n長度達到512 bit時,以當時的計算機運算能力,安全性已公認足夠強大。隨著并行計算水平的飛速發(fā)展以及量子計算等新型計算的出現(xiàn),RSA的安全強度也開始受到威脅。目前,RSA選用的公鑰長度已達到了4 096 bit。
相比于對稱密碼,公鑰密碼具有實現(xiàn)難度大、安全強度大、計算耗費大等特點。因此,在日常應用時,RSA算法和AES算法混合使用,通常被稱作數(shù)字信封技術,如圖2所示。
圖2數(shù)字信封技術
雖然安全強度大,但由于RSA公鑰加密需耗費較大資源,因此通常會話加密采用的是AES分組密碼,而AES會話密鑰則可通過RSA公鑰加密,AES密鑰的加密結果隨會話密文一起發(fā)送給接收方,這樣的技術就叫數(shù)字信封,可以確保僅有持有RSA私鑰的合法的接收方才能解開AES密鑰,從而獲得最終的會話明文。