密码学基础知识(七)公钥密码
公鑰密碼體制:
??????????? 自從deffie和hellman發(fā)表了密碼學(xué)的新方向后,公鑰密碼體制就以任我行吸星大法的速度廣泛使用,其中有三個魔頭:RSA,ElGamal和Menezs-Vanston。
??????????? 可是江湖上為什么在對稱密碼一統(tǒng)江湖的時候出現(xiàn)公鑰密碼呢?
不用想,就是小說里的情節(jié),對稱密碼派面臨巨大的困難:
1.??? 密鑰分配,由于其密鑰分發(fā)是通過秘密信道,而安全的秘密信道不好弄。
2.??? 密鑰管理:密鑰量太大,不是指密鑰長度太長,而是和一個人通信就一個密鑰,和n個人就n-1個密鑰。
3.??? 數(shù)字簽名:對稱密碼密鑰相同,所以接收方可以偽造簽名,理所當(dāng)然發(fā)送方可以否認(rèn)。
公鑰密碼體制基于:陷門單向函數(shù),記得前面說過,陷門的意思是有個參數(shù)t,計算y=f(x)就容易了。沒有t就顯示單向性。
再說下公鑰密碼體制有意思的把:
??????????? 每個人一個公鑰,一個私鑰,公鑰公開。
??????????? 首先,公鑰密碼的通信過程:
??????????????????????????????????? 一個消息,用B的公鑰加密,密文傳遞過去,B私鑰解密。
??????????? 然后是數(shù)字簽名:
??????????????????????????????????? 一個消息,用A的私鑰加密,密文傳過去,B用A的公鑰解密。
??????????? 那要是我兩個一起用呢:即先A的私鑰加密,然后再B的公鑰加密,密文傳過去,B就先A的公鑰解密,再B的私鑰解密,這種雙重加密實現(xiàn)了機密性和(真實性)可認(rèn)證性。
下面講下三個魔頭的故事:
首先講RSA:
??????????? RSA,基于大整數(shù)素分解問題。
1.??? 選兩個保密的大素數(shù)p , q。
2.??? 公開n=p q,保密φ(n)。為啥公開n,φ(n)還能保密,很簡單啊,因為數(shù)太大,素數(shù)求解很不容易。
3.??? 選取個e作為公開加密密鑰,要求e和φ(n)最大公約數(shù)為1。
4.??? 核心:解密密鑰d,d e=1 mod φ(n)。
加密: c=memod n;
解密: m=cd modn;
看完這兩個公式你就明白了為啥是基于大整數(shù)素分解問題了吧,解密得有n,被人不知道你p 和q是多少,n歐拉值就不能得出,那就求不了d。咱們求解可以簡單點,不用歐幾里得擴展算法,d e=t φ(n) +1 ,t從0開始試,d就很容易求。
?
RSA的安全性:
???? 基于大整數(shù)素分解,因式分解公認(rèn)很難,是個NP問題,現(xiàn)在pq已經(jīng)大到n長度位1024-2048位了,跟對稱密碼都不是一個量級的了。
除了p q 要大,我們一般還要其長度大致一樣,n是1024的話,那兩個就都512位左右;他倆差值也不能小,要不直接根號n啥都出來了;p q 應(yīng)為起強素數(shù),即:p-1 q-1 也有大的素因數(shù),而且兩者最大公約數(shù)也要小,1肯定最好了。
??????????? RSA承受著 共模攻擊和低指數(shù)攻擊。
?
EIGamal:
??????????? 基于有限域乘法群上離散對數(shù)問題
DSS美國數(shù)字簽名標(biāo)準(zhǔn)就是其變形
??????????? 隨機選擇一個大素數(shù)p,再隨機個d, 計算β=αd mod p .β是公開的加密密鑰,d是保密的解密密鑰。
??????????? 加密時隨機選取一個整數(shù)k, c1=αk mod p;c2=m βk mod p;c=(c1,c2)。
??????????? 解密就是解密了:m=c2(c1d)-1mod p .
這個K就是攪屎棍,將一個明文可以對應(yīng)出不同的密文,很好。
安全性:p至少768位,建議1024位,且是強素數(shù),k也要是一次性的。
???????????
最后一個,橢圓曲線上的Menezs-Vanston:
??????????? 基于橢圓曲線上離散對數(shù)問題。且比上兩個還難解。
(1) 設(shè)p > 3是一個素數(shù),E是有限域Zp上的橢圓曲線。α∈E是橢圓曲線上的一個點,并且α的階足夠大,使得在由α生成的循環(huán)子群中的離散對數(shù)問題是難解的。
p和E以及α都公開。
(2)隨機選取整數(shù)d,1≤d≤ord(α)-1,計算
β=dα
β是公開的加密密鑰,d是保密的解密密鑰。
(3)明文空間為Zp*×Zp* ,密文空間為E×Zp*×Zp*。
(4)加密變換:對任意明文x=(x1,x2)∈Zp*×Zp* ,秘密隨機選取一個整數(shù)k,1≤k≤ord(α)-1 ,
密文為: ? ???y=(y0, y1, y2),
其中y0=kα,(c1 , c2) = kβ,
??????????? y1=c1 x1 modp,
??????????? y2=c2 x2 modp,
(5)解密變換:對任意密文y=(y0, y1, y2)∈ E×Zp*×Zp*,明文為:
???? x=(y1c1-1mod p, y2c2-1 mod p) ,其中(c1 , c2)= d y0 。
160位的橢圓曲線就相當(dāng)于RSA的1024位了。
總結(jié)
以上是生活随笔為你收集整理的密码学基础知识(七)公钥密码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 密码学基础知识(六)Hash函数与消息认
- 下一篇: 密码学基础知识(八)略说数字签名