1. 程式人生 > >https : rsa 簽名和加密理解

https : rsa 簽名和加密理解

加密的目的是保證資料沒有被竊取。

簽名的目的是保證資料完整性。

rsa 私鑰簽名可以保證資料來源和資料完整性。

1 : 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在下互逆,因此我們有:

所以,從演算法描述中我們也可以看出:公鑰用於對資料進行加密,私鑰用於對資料進行解密。當然了,這個也可以很直觀的理解:公鑰就是公開的金鑰,其公開了大家才能用它來加密資料。私鑰是私有的金鑰,誰有這個金鑰才能夠解密密文。否則大家都能看到私鑰,就都能解密,那不就亂套了。

=================分割線=================

2 : 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加密體制中的加密演算法非常像

所以,在簽名演算法中,私鑰用於對資料進行簽名,公鑰用於對簽名進行驗證

。這也可以直觀地進行理解:對一個檔案簽名,當然要用私鑰,因為我們希望只有自己才能完成簽字。驗證過程當然希望所有人都能夠執行,大家看到簽名都能通過驗證證明確實是我自己籤的。
=================分割線=================

3 使用場景:

其實公鑰和私鑰都可以用來加密或解密---只要能保證用A加密,就用B解密就行。至於A是公鑰還是私鑰,其實可以根據不同的用途而定。
例如說,如果你想把某個訊息祕密的發給某人,那你就可以用他的公鑰加密。因為只有他知道他的私鑰,所以這訊息也就只有他本人能解開,於是你就達到了你的目的。

目前證書的製作過程中,需要ca 用自己的私鑰加密,作為證書的數字簽名。


但是如果你想釋出一個公告,需要一個手段來證明這確實是你本人發的,而不是其他人冒名頂替的。那你可以在你的公告開頭或者結尾附上一段用你的私鑰簽名的內容(例如說就是你公告正文的一段話),那所有其他人都可以用你的公鑰來驗證簽名,如果是成功,那就說明這公告確實是你發的---因為只有你的公鑰才能驗證你的私鑰簽名的內容,而其他人是拿不到你的私鑰的。
ras數字簽名無非就兩個目的:
證明這訊息是你發的
證明這訊息內容確實是完整的---也就是沒有經過任何形式的篡改(包括替換、缺少、新增)。