1. 程式人生 > >【安全】公鑰和私鑰的理解學習

【安全】公鑰和私鑰的理解學習

參考

原因

今天在看某個區塊鏈開源框架原始碼的時候看到了RSA相關的加密和解密操作,想起來以前用git的時候也遇到過生成公鑰和私鑰,用了幾次,但是沒有深入的研究過,所以這次要弄明白這兩個鑰匙的左右。看了上面參考的兩個老哥的解釋,大致上有一個簡單的瞭解,雖然不知道內部的實際加密方式是怎麼樣的,但是這個體系的工作原理可以疏通了。

場景

在加密通訊的場景中,有兩個重要的條件需要滿足。如A向B傳送加密訊息時:

  • 確認訊息是A傳送的
  • 確認只有B能解密

總結下來就是收發雙方都要是能夠互相確認的,沒有其他人的干擾。所以RSA的公鑰和私鑰就是解決這個問題。

RSA演算法

公鑰、私鑰

從名字上就可以看出來,公鑰是對外公佈的,任何人都可以知道這個字串。私鑰是隻有自己知道的重要字串,絕不執行洩露出去。如一些虛擬幣的錢包的私鑰要是暴露出去,那麼你錢包裡的錢就不安全了。公鑰和私鑰是成對出現的,是RSA演算法生成的時候同時生成的。生成的時候可以傳一個安全係數進去,安全係數越大,那麼生成的鑰匙就越安全,大概是這樣吧,這個我沒有驗證過。

生成的方法據說是通過兩個很大的素數進行相乘,這樣就會導致質因數分解的時候需要大量的時間,不過我覺得在現在計算能力越來越強的今後,這種方式是否也能被破解,或者說是快速破解。

RSA加密

RSA加密主要有3個方法,生成公鑰和私鑰、公鑰加密、私鑰解密。這部分主要是對於資訊的接受者來說的。假如想要傳送給B資訊,只有B能看到,那麼這個過程就是用B的公鑰進行加密,傳送給B後B可以用自己的私鑰進行解密得到原來的資訊。

RSA簽名

RSA簽名主要也是3個方法,生成公鑰和私鑰、私鑰簽名、公鑰解密。這部分主要是對於資訊的傳送者來說的。假如A想要傳送加密資訊,那麼A可以通過私鑰進行簽名,其他人都可以用A的公鑰進行驗證。得到的結果是二進位制數1和0表示是否是A傳送的訊息。

解決問題

回到剛才A想傳送加密訊息給B的事情上,這時候就可以這麼處理:

  1. A用自己的私鑰對訊息M進行加密得到簽名S,然後用B的公鑰對訊息M進行加密得到加密後的訊息HM

  2. B得到HM後可以用自己的私鑰進行解密得到M,然後用M、A的公鑰和A的簽名S進行驗證看M是否是A發出的

以上的過程就解決了A和B之間需要解決的兩個問題,保證了訊息來源和訊息的不洩露。