公鑰加密準確來說就是加密的過程
而私鑰加密準確來說是簽名的過程
沒有搞明白這一點,在平時工作當中雖然用的飛起,和別的公司對接介面的時候,貌似都是用公鑰加密,私鑰解密。卻沒有深入思考這些流程。今天在這裡記錄一下,以後記得把加密和簽名流程分開看待。
我們來回顧一下rsa的加密演算法。我們從公鑰加密演算法和簽名演算法的定義出發,用比較規範的語言來描述這一演算法。rsa公鑰加密體制包含如下3個演算法:keygen(金鑰生成演算法),encrypt(加密演算法)以及decrypt(解密演算法)。。金鑰生成演算法以安全常數作為輸入,輸出乙個公鑰pk,和乙個私鑰sk。安全常數用於確定這個加密演算法的安全性有多高,一般以加密演算法使用的質數p的大小有關。越大,質數p一般越大,保證體制有更高的安全性。在rsa中,金鑰生成演算法如下:演算法首先隨機產生兩個不同大質數p和q,計算n=pq。隨後,演算法計算尤拉函式。接下來,演算法隨機選擇乙個小於的整數e,並計算e關於的模反元素d。最後,公鑰為pk=(n, e),私鑰為sk=(n, d)。。加密演算法以公鑰pk和待加密的訊息m作為輸入,輸出密文ct。在rsa中,加密演算法如下:演算法直接輸出密文為。解密演算法以私鑰sk和密文ct作為輸入,輸出訊息m。在rsa中,解密演算法如下:演算法直接輸出明文為。由於e和d在下互逆,因此我們有:所以,從演算法描述中我們也可以看出:公鑰用於對資料進行加密,私鑰用於對資料進行解密。當然了,這個也可以很直觀的理解:公鑰就是公開的金鑰,其公開了大家才能用它來加密資料。私鑰是私有的金鑰,誰有這個金鑰才能夠解密密文。否則大家都能看到私鑰,就都能解密,那不就亂套了。
我們再來回顧一下rsa簽名體制。簽名體制同樣包含3個演算法:keygen(金鑰生成演算法),sign(簽名演算法),verify(驗證演算法)。。金鑰生成演算法同樣以安全常數作為輸入,輸出乙個公鑰pk和乙個私鑰sk。在rsa簽名中,金鑰生成演算法與加密演算法完全相同。。簽名演算法以私鑰sk和待簽名的訊息m作為輸入,輸出簽名。在rsa簽名中,簽名演算法直接輸出簽名為。注意,簽名演算法和rsa加密體制中的解密演算法非常像。。驗證演算法以公鑰pk,簽名以及訊息m作為輸入,輸出乙個位元值b。b=1意味著驗證通過。b=0意味著驗證不通過。在rsa簽名中,驗證演算法首先計算,隨後對比m』與m,如果相等,則輸出b=1,否則輸出b=0。注意:驗證演算法和rsa加密體制中的加密演算法非常像。所以,在簽名演算法中,私鑰用於對資料進行簽名,公鑰用於對簽名進行驗證。這也可以直觀地進行理解:對乙個檔案簽名,當然要用私鑰,因為我們希望只有自己才能完成簽字。驗證過程當然希望所有人都能夠執行,大家看到簽名都能通過驗證證明確實是我自己籤的。
我們可以看到,rsa的加密/驗證,解密/簽字過程太像了。同時,rsa體制本身就是對稱的:如果我們反過來把e看成私鑰,d看成公鑰,這個體制也能很好的執行。我想正是由於這個原因,題主在學習rsa體制的時候才會出現這種混亂。那麼解決方法是什麼呢?建議題主可以學習一下其他的公鑰加密體制以及簽名體制。其他的體制是沒有這種對稱性質的。舉例來說,公鑰加密體制的話可以看一看elgamal加密,以及更安全的cramer-shoup加密。簽名體制的話可以進一步看看elgamal簽名,甚至是bls簽名,這些體制可能能夠幫助題主更好的弄清加密和簽名之間的區別和潛在的聯絡。至於題主問的加密和簽名是怎麼結合的。這種體制叫做籤密方案(signcrypt),rsa中,這種籤密方案看起來特別特別像,很容易引起混亂。在此我不太想詳細介紹rsa中的加密與簽字結合的方案。我想提醒題主的是,加密與簽字結合時,兩套公私鑰是不同的
私鑰,公鑰,加密
在密碼學中,金鑰 key,又常稱金鑰 是指某個用來完成加密 解密 完整性驗證等密碼學應用的秘密資訊。在對稱密碼學中,加密和解密用的是同乙個鑰匙,因此鑰匙需要保密。而在非對稱密碼學中,加密和解密用的鑰匙不同 通常乙個是公開的,稱為公鑰 另乙個保密,稱為私鑰。這類演算法在加密和解密時使用相同的金鑰,或是...
公鑰,私鑰,加密和簽名
加密和簽名是兩個不同的概念,又都涉及公鑰和私鑰的概念。公鑰和私鑰相當於鑰匙和鎖,鎖可以用來鎖住東西,鑰匙可以用來開啟對應的鎖,一把鑰匙只能開一把鎖,當然鑰匙和鎖都可以複製。加密相當於我自己生成一把鎖和一把鑰匙,然後把鎖發給你,你用我的鎖把想發給我的東西鎖上再發給我,我收到之後用鑰匙開啟鎖。天下人都能...
公鑰加密和私鑰簽名
本文 自感謝逆水行舟,不進則退的分享。一 公鑰加密 假設一下,我找了兩個數字,乙個是1,乙個是2。我喜歡2這個數字,就保留起來作為私鑰,不告訴你們,然後我告訴大家,1是我的公鑰。我有乙個檔案,不能讓別人看,我就用1加密了。別人找到了這個檔案,但是他不知道2就是解密的私鑰啊,所以他解不開,只有我可以用...