這是Coursera課程Cryptography的第六週的筆記。
本週講的是關於Public Key Cryptography的概念,也就是公鑰密碼學,也稱爲非對稱密碼學。以前我只知道RSA算法。我知道RSA算法是怎麼來的,它可以作什麼,侷限性是什麼。然而把它放在一個大的概念裏,將RSA只看作非對稱加密算法中的一種,這仍是第一次。若是數學家沒有提出利用大質數難分解的性質製做密碼,天然就不會有RSA算法了。那麼還會有公鑰密碼嗎?基本的密碼體系會有變化嗎?git
生詞本算法
chicken-and-egg problem
asymmetry 不對稱
factor 因式分解
Indistinguishability 不可分辨
spoof 欺騙
discrete 離散的
logarthm 對數
subtlety 細微的差異
derivation 派生
disseminate 散佈,傳播
legitimate 合法的數據庫
如何在加密通訊前交換密鑰呢?
雖然能夠經過物理方法交換,但物理交換一般價格很高,並且效率低下。安全
有N我的,若是容許他們跟其餘人通訊,他們就須要預先交換O(N2)的密鑰,這是很是大量的工做。oracle
兩我的預先沒有關係,如何交換密鑰呢?
例如一個顧客想要在網上使用信用卡購買物品,例如你想給老師發一封關於課程的郵件,你預先沒有在這家網上商店購買過東西,也不認識老師,可是你仍然但願用安全的信道進行通訊。函數
私鑰密碼不可以解決在信道不安全時私鑰如何交換的問題。
1976 《New Directions in Cryptography》ui
利用不對稱的問題。例如因式分解:將兩個質數相乘很容易,將相乘後的結果分開很難。
利用不對稱性來讓兩方在公開討論的狀況下交換一個共享的不公開密鑰。
也就是說,在一個全是人的房間,A和B在房間的兩端喊話,卻交換了一對除A與B之外無人知曉得密鑰。加密
假設攻擊者是個竊聽者,能夠聽到信道,不可改變信息
攻擊者獲得傳輸數據的機率不大於1/2+eorm
沒法計算出密鑰是個弱的保證
密鑰從所選集合中徹底沒法辨認(indistinguishable)纔是個強的保證ip
僅針對被動竊聽者的安全是不夠的
須要帶驗證的密鑰交換,例如,兩房預先知道對方的ID,而且這種ID不得被欺騙
安全目標:當竊聽者獲取全部通訊文本後,密鑰K仍然是不可辨認的。
對竊聽者沒法計算出key
咱們本須要的是某個長度的不可辨認的k1,可是咱們卻得到了某個組下的key2,因而就有了從key2到k1的映射問題。
解決方法:key derivation 密鑰派生
用一個合適的hash函數作映射,將某個組下的密鑰映射到指定的區段內。
一方生成了一對密鑰:公鑰和私鑰。
公鑰普遍傳播,私鑰本身保留,不向任何人傳播
也被稱爲非對稱加密
Gen keygen
Enc 加密
Dec 解密
沒有encryption oracle。
沒有perfectly secure的公鑰加密。
沒有肯定性的公鑰加密體系是CPA-Secure的。
攻擊者是一個合法用戶
攻擊者更容易得到它所選定的明文和對應的密文
延展性問題:知道明文和對應的密文後,可能派生出另外一對相關的明文和密文
因爲非對稱加密效率低下,咱們能夠用非對稱加密方法去加密一個對稱加密密鑰,而後用對稱加密密鑰去加密明文。
發送時,將加密的對稱加密密鑰和密文一塊兒發送。
gen The public key is (G, q, g, gx), the secret key is x
enc ciphertext is gy, hy·m
Dec c2/c1x
若是DDH是難的,那麼El Gamal是CPA-Secure的。
離散對數難度的假設對公鑰加密是不夠的。
G, q, g是標準算法,而且與全世界共享
把消息做爲組來對待並不方便,這就須要使用密鑰派生。
使用混合算法
El Gamal Encryption不是CCA安全的
使用密鑰派生可使算法變成CCA安全
DHIES/ECIES
這個體系是決定性的,因此不多是CPA Secure的
RSA假設僅僅指算均勻的c得第e個根,只有當m是均勻的時候,c纔是均勻的
RSA假設僅僅指徹底計算的狀況,事實上能夠得到關於第e個根得一部分信息
RSA Labs, 1993
加密時,加入隨機的padding
問題:
1. 沒法證實是CPA-Secure的,除非m很是短
2. 當r很小的時候,已知已經有Chosen-plaintext attacks
3. 已知有Chosen-ciphertext attack
OAEP
引入冗餘
當RSA假設成立時,RSA-OAEP是CCA-Secure的。 在實踐中普遍使用。