RSA加密算法和簽名算法

RSA加密算法

RSA公鑰加密體制包含以下3個算法:KeyGen(密鑰生成算法),Encrypt(加密算法)以及Decrypt(解密算法)。算法

  • (PK, SK)\leftarrow KeyGen(\lambda)。密鑰生成算法以安全常數\lambda做爲輸入,輸出一個公鑰PK,和一個私鑰SK。安全常數用於肯定這個加密算法的安全性有多高,通常以加密算法使用的質數p的大小有關。\lambda越大,質數p通常越大,保證體制有更高的安全性。在RSA中,密鑰生成算法以下:算法首先隨機產生兩個不一樣大質數p和q,計算N=pq。隨後,算法計算歐拉函數\varphi(N)=(p-1)(q-1)。接下來,算法隨機選擇一個小於\varphi(N)的整數e,並計算e關於\varphi(N)的模反元素d。最後,公鑰爲PK=(N, e),私鑰爲SK=(N, d)。
  • CT \leftarrow Encrypt(PK,M)。加密算法以公鑰PK和待加密的消息M做爲輸入,輸出密文CT。在RSA中,加密算法以下:算法直接輸出密文爲CT=M^e \bmod N
  • M \leftarrow Decrypt(SK,CT)。解密算法以私鑰SK和密文CT做爲輸入,輸出消息M。在RSA中,解密算法以下:算法直接輸出明文爲M=CT^d \bmod N。因爲e和d在\varphi(N)下互逆,所以咱們有:CT^d=M^{ed}=M \bmod N

因此,從算法描述中咱們也能夠看出:公鑰用於對數據進行加密,私鑰用於對數據進行解密。固然了,這個也能夠很直觀的理解:公鑰就是公開的密鑰,其公開了你們才能用它來加密數據。私鑰是私有的密鑰,誰有這個密鑰纔可以解密密文。不然你們都能看到私鑰,就都能解密,那不就亂套了。安全

RSA簽名算法

簽名算法一樣包含3個算法:KeyGen(密鑰生成算法),Sign(簽名算法),Verify(驗證算法)。函數

  • (PK,SK) \leftarrow KeyGen(\lambda)。密鑰生成算法一樣以安全常數\lambda做爲輸入,輸出一個公鑰PK和一個私鑰SK。在RSA簽名中,密鑰生成算法與加密算法徹底相同。
  • \sigma \leftarrow Sign(SK,M)。簽名算法以私鑰SK和待簽名的消息M做爲輸入,輸出簽名\sigma。在RSA簽名中,簽名算法直接輸出簽名爲\sigma = M^d \bmod N。注意,簽名算法和RSA加密體制中的解密算法很是像。
  • b \leftarrow Verify(PK,\sigma,M)。驗證算法以公鑰PK,簽名\sigma以及消息M做爲輸入,輸出一個比特值b。b=1意味着驗證經過。b=0意味着驗證不經過。在RSA簽名中,驗證算法首先計算M'=\sigma^e \bmod N,隨後對比M'與M,若是相等,則輸出b=1,不然輸出b=0。注意:驗證算法和RSA加密體制中的加密算法很是像。

因此,在簽名算法中,私鑰用於對數據進行簽名,公鑰用於對簽名進行驗證。這也能夠直觀地進行理解:對一個文件簽名,固然要用私鑰,由於咱們但願只有本身才能完成簽字。驗證過程固然但願全部人都可以執行,你們看到簽名都能經過驗證證實確實是我本身籤的。加密

參考:https://www.zhihu.com/question/25912483
相關文章
相關標籤/搜索