RSA加解密及簽名學習筆記

  最近換了工作,由於新公司是做個人和企業徵信業務的,所以對數據的隱私性看的非常重要,所有涉及隱私的數據一律都要進行加密進行傳輸。
  那麼問題來了,對我要做的工作,就是要實現我們接口自動化,免不了要接觸加密-簽名-解密-驗籤等一系列過程。這時候就覺得大學真的白學密碼學了。。。

  不過好在,重新撿起來也很快,那我就把最近的學習結果整理一下,方便後續溫故知新。

 RSA是一種非對稱的加密算法,可以用於解決數據在傳輸過程中的完整性和私密性。即簽名和加解密。
 RSA主要涉及的概念有:公鑰、私鑰,簽名、驗籤。
  
以下是我個人的一些理解。

必知必唸的幾個概念

  • 公鑰:公開透明
  • 私鑰:私密不公開
  • 簽名:防假冒抵賴
  • 加密:防信息泄露
  • 關係:公鑰和私鑰是成對存在,可以互相用來加解密

原理圖

來自:shu_lin
RSA通訊原理圖

示例說明:

假如有,A、B、C三個人,其公鑰私鑰對分別爲[A1,A2],[B1,B2],[C1,C2],即下標1爲私鑰,下標2爲公鑰。

利用公鑰私鑰的自身特點,上述描述中可知A、B、C三人分別掌握的信息爲:
A知曉A1,A2,B2,C2;
B知曉A2,B1,B2,C2;
C知曉A2,B2,C1,C2。

利用公鑰和私鑰可以互相加解密,可知:
A:
A1加密,僅限A2可以用來解密,由於A1僅限A知道,故該項操作僅限A能進行,並且由於A2公開,故大家都可以用A2來解密A1加密後的數據,因此如果A2能解密,那麼該數據一定是A1加密的,即是A操作的。 ==> (通信簽名:防抵賴假冒)

A2加密,僅限A1可以用來解密,由於A1僅限A知道,故該操作是自己給自己加密,然後僅限自己解密,用作一般的加密,非通信加密。

B2加密,僅限B1可以用來解密,由於B1僅限B知道,故該操作可以用來A發給B的通信數據加密。 ==> (通信加密:防信息泄露)

C2加密,僅限C1可以用來解密,由於C1僅限C知道,故該操作可以用來A發給C的通信數據加密。 ==> (通信加密:防信息泄露)

B:
A2加密,僅限A1可以用來解密,由於A1僅限A知道,故該操作可以用來B發給A的通信數據加密。 ==> (通信加密:防信息泄露)

B1加密,僅限B2可以用來解密,由於B1僅限B知道,故該項操作僅限B能進行,並且由於B2公開,故大家都可以用B2來解密B1加密後的數據,因此如果B2能解密,那麼該數據一定是B1加密的,即是B操作的。 ==> (通信簽名:防抵賴假冒)

B2加密,僅限B1可以用來解密,由於B1僅限C知道,故該操作是自己給自己加密,然後僅限自己解密,用作一般的加密,非通信加密。

C2加密,僅限C1可以用來解密,由於C1僅限C知道,故該操作可以用來A發給C的通信數據加密。 ==> (通信加密:防信息泄露)

C:
A2加密,僅限A1可以用來解密,由於A1僅限A知道,故該操作可以用來B發給A的通信數據加密。 ==> (通信加密:防信息泄露)

B2加密,僅限B1可以用來解密,由於B1僅限B知道,故該操作可以用來A發給B的通信數據加密。 ==> (通信加密:防信息泄露)

C1加密,僅限C2可以用來解密,由於C1僅限C知道,故該項操作僅限C能進行,並且由於C2公開,故大家都可以用C2來解密C1加密後的數據,因此如果C2能解密,那麼該數據一定是C1加密的,即是C操作的。 ==> (通信簽名:防抵賴假冒)

C2加密,僅限C1可以用來解密,由於C1僅限C知道,故該操作是自己給自己加密,然後僅限自己解密,用作一般的加密,非通信加密。

ABC:
如果A作爲廣播者,需要播報廣播信息,那麼爲了防信息抵賴和假冒,A需要用A1給廣播信息簽名,作爲接收方的B和C可以通過A2來驗證收到的廣播是否爲A發出。(簽名

如果A作爲註冊中心,需要爲所有用戶支持保密及註冊服務,那麼所有用戶爲了防止信息泄露,需要將註冊信息用A2加密後發送給A,保證該信息僅限註冊中心用A1解密後查看。(通信加密

如果A作爲註冊中心,需要爲所有用戶支持保密、身份驗證及註冊服務,那麼作爲用戶B需要對發送數據先用自身私鑰B1簽名,然後用A2加密,最後發送給A,保證A能在A1解密數據後再用B2驗證用戶B的身份。(通信簽名加密

因此,在數據通信過程中:

1.用私鑰加密後,僅限可以用對應公鑰解密,可以用來簽名,防數據抵賴假冒,因有且僅有的一個私鑰擁有者即爲簽名方。

2.用公鑰加密後,僅限可以用對應私鑰解密,可以給該私鑰擁有者發送數據,用作通信數據加密,這樣即使別人竊取了通信數據,因爲無私鑰,不能解密查看通信數據。