意義:公鑰密碼學的發展是整個密碼學發展歷史中最偉大的一次革命,也許可以說是唯一的一次革命。輪轉機和DES是密碼學發展的重要標志,但是它們都是基於代替和置換這些初等方法上。
提出背景:為了解決傳統密碼中最困難的兩個問題而提出。1、密碼分配;2、數字簽名
特點:1、公鑰算法是基於數學函數而不是基於代替和置換;2、公鑰密碼是非對稱的,使用兩個獨立的密鑰。
傳統密碼和公鑰密碼的區別
幾個誤解:
1、公鑰密鑰比傳統密碼安全
任何加密方法的安全性依賴於密鑰長度和破譯密文所需要的計算量
2、公鑰密碼將替代傳統密碼
由於現有公鑰密碼計算量大,不太可能取代傳統密碼,主要用在密鑰管理和簽名中
公鑰密碼體制
公鑰算法依賴於一個加密密鑰和一個與之相關的解密密鑰,這些算法具有如下特點:
1、僅根據密碼算法和加密密鑰來確定解密密鑰在計算上是不可行的;
2、對於有些算法(如RSA)還滿足以下特點
兩個密鑰中的任何一個都可用來加密,另一個用來解密。
公鑰密碼體制有6個組成部分:明文、加密算法、公鑰、私鑰、密文、解密算法
其加密的主要操作步驟如下:
1、每個用戶產生一對密鑰,其中一個存於公開的寄存器或文件中以供訪問,稱為公鑰。另一個則保持私密,稱為私鑰。每個用戶都可以擁有很多其他用戶的公鑰。
2、若A要發消息給B,則A用B的公鑰來加密消息,由於只有B有私鑰,故而也只有B可以對消息解密,其他任何接受者都不能解密消息。
此外公鑰體制還可以用於認證,具體操作如下:
1、A向B發送消息前,先用A的私鑰對消息加密,因為B只有用A的公鑰才能對消息解密,因此該消息可以用於認證源和數據完整性。
由於對整個消息的認證加密過於耗費計算時間和存儲空間,可以對此進行改進。只對一個稱為認證符的小數據塊進行加密,該認證塊是整個消息的函數,對該消息的任何修改必然會引起認證符的變化,因此用發送方的私鑰對認證符進行加密,加密的結果可作為數字簽名,它能驗證消息源、消息和通信序列的有效性。
為了同時保證加密和認證,則需要先用發送方的私鑰進行數字簽名,再用接收方的公鑰對整個消息進行加密。不過這種方法的缺點是每次通信中要執行四次復雜的公鑰算法。
公鑰密碼體制的應用
一般,公鑰密碼體制的應用分三類:
1、加密/解密:發送方用接收方公鑰對信息加密
2、數字簽名:發送方用自身的私鑰對消息“簽名”
3、密鑰交換:通信雙方交換會話密鑰(傳統密碼的密鑰)
對公鑰密碼的要求
1、接收方B產生一對密鑰在計算上是容易的
2、已知公鑰和要加密的消息M,發送方A產生相應的密文在計算上是容易的
C = E(PUb,M)
3、接收方B使用私鑰對接收的密文解密以恢復明文在計算上是容易的
M = D(PRb,C) = D(PRb,E(PUb,M))
4、已知公鑰PUb,攻擊者要確定私鑰PRb在計算上是不可行的
5、已知公鑰PUb和密文C,攻擊者要恢復明文M在計算上是不可行的
6、對於部分公鑰密碼應用,還應滿足加密和解密函數的順序可以交換
M = D(PUb,E(PRb,M)) = D(PRb,E(PUb,M))
事實上,要滿足上述條件即是要找到一個單向陷門函數。單向陷門函數滿足下列性質:
若k和X已知,求Y = fk(X) 容易計算
若k和Y已知,求X = fk-1(Y) 容易計算
若Y已知但k未知,則求X = fk-1(Y)是不可行的
以上計算上容易是指:一個問題可以在輸入長度的多項式時間內得到解決,即若輸入長度為n位,計算的時間復雜度為na,a為常數。
計算上不可行是指:解決一個問題所需時間比輸入規模的多項式增長更快。如輸入長度是n位,計算時間復雜度是2n。
公鑰密碼分析
1、窮舉攻擊:解決辦法是使用長密鑰,但是長密鑰將使加密/解密變慢(公鑰密碼加密/解密時間對密鑰長度的非線性增長),因此限制了公鑰密碼的應用。
2、根據公鑰計算私鑰:目前未能做數學上的證明確定該攻擊不可行,但也沒有可行的辦法做這樣的攻擊。
3、窮舉消息攻擊(公鑰體制特有):根據消息本身的特點(公鑰經常用來傳遞傳統密碼的密鑰)來進行對消息的窮舉攻擊,如發送56位DES密鑰。解決辦法就是在要發送的消息后附加一個隨機數。