rsa加密簽名
1. RSA加密及數字簽名詳解
RSA是廣泛使用的非對稱加密演算法,其安全基礎在於大整數因數分解的難度。與對稱秘鑰加密不同,RSA使用一對秘鑰進行加密和解密,公鑰用於加密,私鑰用於解密。RSA演算法由Rivest、Shamir和Adleman在1977年提出,其可靠性取決於大整數分解的困難性。若找到快速分解演算法,RSA加密信息可靠性將大幅降低。
生成RSA秘鑰包括以下步驟:
- 選擇兩個等長質數p和q。
- 計算n=p*q,n長度至少為1024位。
- 計算φ(n)=(p-1)*(q-1)。
- 隨機選擇e,滿足0<e<φ(n)且e與φ(n)互質。
- 計算d,使ed模φ(n)=1。
- 公鑰為(e, n),私鑰為(d, n)。
加密和解密過程如下:
加密:C=Me mod n
解密:M=Cd mod n
數字簽名基於RSA加密,包括簽名和驗證兩部分,確保信息完整性和來源真實性。
舉例:假設x=4,Alice和Bob利用RSA秘鑰對進行通信。加密過程將數據x用Bob的公鑰加密,解密過程則用Bob的私鑰解密,確保信息的機密性和完整性。
RSA簽名過程具體如下:
- Alice使用Bob的公鑰對信息進行加密,生成簽名。
- Bob收到信息後,使用自己的私鑰對簽名進行驗證,確保信息未被篡改且來源可靠。
綜上,RSA作為非對稱加密演算法,其密鑰生成、加密解密和數字簽名機制確保了通信的機密性和完整性。通過選擇大整數和使用公鑰加密,RSA提供了強大的數據安全保護。
2. 密碼學問題 為什麼RSA數字簽名一定要先簽名、後加密我是初學者,謝謝!!!
我是這么覺得:
簽名的一個目的是:防止簽名雙方抵賴。
如果先加密的話,到時候他有可能不認賬。
而且,特別是針對RSA簽名演算法,有一種專門針對先加密後簽名的攻擊。為了防止這種攻擊,推薦採用先簽名後加密。
這種攻擊方法為:
假設簽名者A用先加密後簽名的方法把消息x發給B,他是先用B的公鑰eb對x加密,然後用自己的私鑰da簽名,設A的模數為na,B的為nb,那麼,A發給B的密文為: (x^eb mod nb)^da mod na
如果B不誠實,那麼B可能偽造A的簽名。謊稱收到的是x1.因為nb是B的模數,所以B知道nb的分解,於是可以計算模nb的離散對數。 (x1)^k=x mod nb
之後,B再公布他的新公鑰。然後宣布收到的是x1不是x。
3. RSA加密、解密、簽名、驗簽的原理及方法
RSA加密是一種非對稱加密。可以在不直接傳遞密鑰的情況下,完成解密。這能夠確保信息的安全性,避免了直接傳遞密鑰所造成的被破解的風險。是由一對密鑰來進行加解密的過程,分別稱為公鑰和私鑰。兩者之間有數學相關,該加密演算法的原理就是對一極大整數做因數分解的困難性來保證安全性。通常個人保存私鑰,公鑰是公開的(可能同時多人持有)。
加密和簽名都是為了安全性考慮,但略有不同。常有人問加密和簽名是用私鑰還是公鑰?其實都是對加密和簽名的作用有所混淆。簡哪睜單的說,加密是為了防止信息被泄露,而簽名是為了防止信息被篡改。這里舉2個例子說明。
RSA的加密過程如下:
RSA簽名的過程如下:
總結:公鑰加密、私鑰解密、私鑰簽名、公鑰驗簽。
RSA加密對明文的長度有所限制,規定需加密的明文最大長度=密鑰長度-11(單位是位元組,即byte),所以在加密和解密的過程中需要分塊進行。而密鑰默認是1024位,即1024位/8位-11=128-11=117位元組。所以默認加密前的明文最大長度117位元組,解密密文最大長度為128字。那指知么李逗歲為啥兩者相差11位元組呢?是因為RSA加密使用到了填充模式(padding),即內容不足117位元組時會自動填滿,用到填充模式自然會佔用一定的位元組,而且這部分位元組也是參與加密的。