關於公鑰和私鑰,通俗易懂

2021-08-26 21:44:11 字數 2277 閱讀 7265

經常聽到有人說,在使用公鑰密碼學加密與簽名時,一定要知道是使用公鑰還是使用私鑰,否則容易鬧笑話。可是,對於乙個學過一點密碼學的人來說,真的就那麼難嗎?下面就來討論一下這個問題。

密碼學中要使用key,而在公鑰密碼學中,有兩個key,乙個公鑰pk(publickey),乙個私鑰sk(secretkey),其中公鑰pk公開,任何人都可以查到,而私鑰sk保密,理論上只應該有你乙個人知道。這一點是與分組密碼演算法(des,aes)不同的,因為在分組密碼演算法中,只有乙個key,且是在通訊雙方共享的,並且需要保密。下面以公鑰密碼演算法rsa為例,來講一講在公鑰密碼學,加密與簽名時,key的選擇問題。

首先要說一說通訊,通訊自然要涉及通訊雙方,當然,你也可以自己和自己通訊(如果你這時還加密簽名的話,你這是閒得……)。密碼學的大師給了通訊雙方兩個好聽的名字a(lice),b(ob)。下面約定一下pk(a),pk(b)分別代表alice和bob的公鑰,是完全公開的,任何人都可以查到;sk(a)為alice的私鑰,只有alice自己知道,sk(b)為bob的私鑰,只有bob乙個人知道。下面從bob的角度來討論。

加密:加密,為什麼要加密?因為通訊的雙方使用的是公開的通道,而通道上是可能有者的,如果使用明文傳輸訊息,即不加密,那麼者就可以知道訊息的內容了,如果你傳輸的是什麼**訊息的話,你就悲劇了。所以為防止訊息被不應該知道的人知道,傳輸時要加密。

在公鑰密碼學中,乙個訊息m,在key1的控制下,經過密碼演算法,得到密文c,是為加密;而密文c,在另乙個key2的控制下,經過密碼演算法,可以得到對應的明文m,是為解密。其中乙個是公鑰pk,乙個是私鑰sk,這是與分組密碼不同的。下面來說bob要傳輸訊息給alice,該使用那個key。這裡使用列舉,這個辦法很好用。總共用四個key。(你不會還想用其他人的key吧。。。)

1)使用pk(b)嗎(自己的公鑰)?這個,來分析分析。使用pk(b)加密的訊息,只能使用對於的sk(b)來解密,而sk(b)只有你自己知道,alice不知道,者也不知道。使用這個key的效果最好,別的人都不能知道訊息的內容,者也拿它沒辦法,但是,通訊的另一方alice也不知道訊息的內容了,這樣的通訊就沒有意義了。所以,否定掉。

2)使用sk(b)嗎(自己的私鑰)?我們來看看,使用sk(b)加密的訊息,要使用pk(b)來加密。而pk(b)是公開的,alice知道,恩,alice可以解密訊息了,這個可以吧!這個真的可以嗎?正是因為pk(b)是公開的,alice知道,者也知道,所以alice能解密,者也能解密,所以根本就沒有保密性。和明文傳輸沒多大的差別了。這個乙個悲劇的選擇。pass掉。

3)使用sk(a)嗎(對方的私鑰)?sk(a)是alice的私鑰,只有alice知道,bob不知道,這個不行。假設alice將私鑰偷偷告訴了你,這樣你就可以使用了吧。原理和結局同2中的分析。同樣……

4)使用pk(a)嗎(對方的公鑰)?排除法告訴我們,只有這個可以選了,那就選它吧。原理什麼的就不用講了吧,大家也沒興趣的。不行,老夫子教導我們,知其然必知其所以然。我們要知道原理。好吧,講一講。使用pk(a)加密的訊息,要使用sk(a)來解密,而sk(a)對方是知道的,所以訊息是可以解密的;而又因為sk(a)只有alice知道,別的人包括者是不知道的,所以訊息的保密性是可以保證的。滿足要求。恩,終於弄懂了。

下面將簽名。

簽名:簽名,現實生活中,我們可以使用自己的筆跡來簽名的。而電子世界呢?簽名,這個是公鑰密碼學提供的而分組密碼是無法與他比的特性。簽名,為什麼要簽名?舉個例子,假如你傳送一條訊息給銀行,從你的賬號中轉1億出去(反正是舉例子,說這麼大的數額也沒什麼關係),銀行執行了這條訊息,轉了賬,事後,你跟銀行說,你沒有轉過賬,要讓銀行賠償,如果銀行拿不出證據,那銀行就悲劇了、破產了,而銀行是可以拿出證據的,證據就在那條訊息中,因為你對它簽名了,而簽名在法律上是有效的證據的。好吧。那麼,bob要對訊息簽名,他該使用哪個key?列舉法再次閃亮登場……

1)使用pk(a)嗎(對方的公鑰)?假設可以的話,由於pk(a)是公開的,那麼任何都是可以偽造你的簽名的,你的銀行卡就爆了。。。

2)使用sk(a)嗎(對方是私鑰)?同樣這個你是不知道的。就是對方告訴了你,還是有問題的,因為這個和你的另乙個key不匹配,簽名是不能驗證的,這個問題同樣出現在1中。所以,不妥。。。

3)使用pk(b)嗎(自己的公鑰)?同樣有問題,第一,原理同1,由於是公開的,任何人都可以偽造,銀行卡再次爆掉了;第二,原理同2,要驗證,就需要使用你的另乙個key,即你的私鑰,而這個只有你自己知道,所以簽名無法驗證。這又是乙個失敗的例子。。。

4)私鑰sk(b)嗎(自己的私鑰)?還是說說原理吧。簽名要使用唯一能確認是你的東西來簽名,譬如筆跡。因為sk(b)只有你自己知道,所以滿足要求的;其次,使用sk(b)簽名的東西,是可以用pk(b)驗證的,因為它是公開的。所以也滿足要求。

結論:在公鑰密碼學中,加密使用對方的公鑰,簽名使用自己的私鑰。

關於公鑰和私鑰,通俗易懂

經常聽到有人說,在使用公鑰密碼學加密與簽名時,一定要知道是使用公鑰還是使用私鑰,否則容易鬧笑話。可是,對於乙個學過一點密碼學的人來說,真的就那麼難嗎?下面就來討論一下這個問題。密碼學中要使用key,而在公鑰密碼學中,有兩個key,乙個公鑰pk public key 乙個私鑰sk secret key...

公鑰私鑰,HTTPS,HTTP通俗講解

公鑰私鑰小灰講解通俗易懂 公鑰私鑰簡單講解 嘗試使用一段話來總結https https要使客戶端與伺服器端的通訊過程得到安全保證,必須使用的對稱加密演算法,但是協商對稱加密演算法的過程,需要使用非對稱加密演算法來保證安全,然而直接使用非對稱加密的過程本身也不安全,會有中間人篡改公鑰的可能性,所以客戶...

公鑰私鑰,HTTPS,HTTP通俗講解

公鑰私鑰小灰講解通俗易懂 公鑰私鑰簡單講解 嘗試使用一段話來總結https https要使客戶端與伺服器端的通訊過程得到安全保證,必須使用的對稱加密演算法,但是協商對稱加密演算法的過程,需要使用非對稱加密演算法來保證安全,然而直接使用非對稱加密的過程本身也不安全,會有中間人篡改公鑰的可能性,所以客戶...