1. 程式人生 > >加密和解密,(數字)簽名和驗證,公鑰私鑰

加密和解密,(數字)簽名和驗證,公鑰私鑰

網路安全中最知名的人物大概就是Bob和Alice了,因為很多安全原理闡述中都用這兩個虛擬人物來進行例項說明。

我們來看看Bob是怎麼從CA中心獲得一個數字證書的:

1、Bob首先建立他自己的金鑰對(key pair),包含公鑰和私鑰;

2、Bob通過網路把他的公鑰送到CA中心,公鑰中包含了Bob的個人鑑別資訊(他的名字、地址、所用裝置的序列號等等)。這些資訊是證書所必需的;

3、這個證書申請在CA中心伺服器上會一直處於等待(pending)狀態,直到CA中心的某人開始處理Bob的請求;

4、在CA中心的某人鑑定並確認了Bob確實是那個提交公鑰的人。為了確定Bob和金鑰之間的對應關係,這個確認過程會通過某種人和人之間、帶外的方式進行;

5、Bob定期地對CA伺服器進行查詢,希望他的證書申請過程能完成並已可取回;

6、CA中心建立並簽署一個包含Bob的公鑰及個人資訊的證書,從而保證金鑰的確實性;

7、Bob查詢CA伺服器,發現證書已準備好,馬上下載證書並將證書儲存起來;

8、Bob現在可以使用證書來發布他的公鑰,而其他使用Bob證書的人可以通過檢驗CA中心的簽名(檢驗CA簽名需要CA的公鑰)來驗證證書的確實性。 
 

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
一,公鑰私鑰
1,公鑰和私鑰成對出現
2,公開的金鑰叫公鑰,只有自己知道的叫私鑰
3,用公鑰加密的資料只有對應的私鑰可以解密
4,用私鑰加密的資料只有對應的公鑰可以解密
5,如果可以用公鑰解密,則必然是對應的私鑰加的密
6,如果可以用私鑰解密,則必然是對應的公鑰加的密
明白了?
假設一下,我找了兩個數字,一個是1,一個是2。我喜歡2這個數字,就保留起來,不告訴你們,然後我告訴大家,1是我的公鑰。
我有一個檔案,不能讓別人看,我就用1加密了。別人找到了這個檔案,但是他不知道2就是解密的私鑰啊,所以他解不開,只有我可以用數字2,就是我的私鑰,來解密。這樣我就可以保護資料了。
我的好朋友x用我的公鑰1加密了字元a,加密後成了b,放在網上。別人偷到了這個檔案,但是別人解不開,因為別人不知道2就是我的私鑰,只有我才能解密,解密後就得到a。這樣,我們就可以傳送加密的資料了。
現在我們知道用公鑰加密,然後用私鑰來解密,就可以解決安全傳輸的問題了。

如果我用私鑰加密一段資料(當然只有我可以用私鑰加密,因為只有我知道2是我的私鑰),結果所有的人都看到我的內容了,因為他們都知道我的公鑰是1,那麼這種加密有什麼用處呢?
但是我的好朋友x說有人冒充我給他發信。怎麼辦呢?

(1)我把我要發的信,內容是 c,用我的私鑰2,加密,加密後的內容是d。

(2)把內容d發給x,再告訴他解密看是不是c。他用我的公鑰1解密,發現果然是c。

這個時候,他會想到,能夠用我的公鑰解密的資料,必然是用我的私鑰加的密。只有我知道我得私鑰,因此他就可以確認確實是我發的東西。這樣我們就能確認傳送方身份了。這個過程叫做數字簽名。當然具體的過程要稍微複雜一些。

用私鑰來加密資料,用途就是數字簽名。

好,我們複習一下:
1,公鑰私鑰成對出現
2,私鑰只有我知道
3,大家可以用我的公鑰給我發加密的信了
4,大家用我的公鑰解密信的內容,看看能不能解開,能解開,說明是經過我的私鑰加密了,就可以確認確實是我發的了。
總結一下結論:
1,用公鑰加密資料,用私鑰來解密資料
2,用私鑰加密資料(數字簽名),用公鑰來驗證數字簽名。
在實際的使用中,公鑰不會單獨出現,總是以數字證書的方式出現,這樣是為了公鑰的安全性和有效性。
二,SSL
我和我得好朋友x,要進行安全的通訊。這種通訊可以是QQ聊天,很頻繁的。用我的公鑰加密資料就不行了,因為:
1,我的好朋友x沒有公私鑰對,我怎麼給他發加密的訊息啊?(注:實際情況中,可以雙方都有公私鑰對)
2,用公私鑰加密運算很費時間,很慢,影響QQ效果。
好了,好朋友x,找了一個數字3,用我的公鑰1,加密後發給我,說,我們以後就用這個數字來加密資訊吧。我解開後,得到了數字3。這樣,只有我們兩個人知道這個祕密的數字3,別的人都不知道,因為他們既不知x挑了一個什麼數字,加密後的內容他們也無法解開,我們把這個祕密的數字叫做會話金鑰。
然後,我們選擇一種對稱金鑰演算法,比如DES,(對稱演算法是說,加密過程和解密過程是對稱的,用一個金鑰加密,可以用同一個金鑰解密。使用公私鑰的演算法是非對稱加密演算法),來加密我們之間的通訊內容。別人因為不知道3是我們的會話金鑰,因而無法解密。
好,複習一下:
1,SSL實現安全的通訊
2,通訊雙方使用一方或者雙方的公鑰來傳遞和約定會話金鑰(這個過程叫做握手)
3,雙方使用會話金鑰,來加密雙方的通訊內容
上面說的是原理。大家可能覺得比較複雜了,實際使用中,比這還要複雜。不過慶幸的是,好心的先行者們在作業系統或者相關的軟體中實現了這層(Layer),並且起了一個難聽的名字叫做SSL,(Secure Socket Layer)。

加密和解密:

                    傳送方利用接收方的公鑰對要傳送的明文進行加密,接受方利用自己的   
                    私鑰進行解密,其中公鑰和私鑰匙相對的,任何一個作為公鑰,則另一個 
                    就為私鑰.但是因為非對稱加密技術的速度比較慢,所以,一般採用對稱 
                    加密技術加密明文,然後用非對稱加密技術加密對稱金鑰,即數字信封 
                    技術. 
(數字)簽名和驗證:

                    傳送方用特殊的hash演算法,由明文中產生固定長度的摘要,然後利用 
                    自己的私鑰對形成的摘要進行加密,這個過程就叫簽名。接受方利用 
                    傳送方的公鑰解密被加密的摘要得到結果A,然後對明文也進行hash操 
                    作產生摘要B.最後,把A和B作比較。此方式既可以保證傳送方的身份不 
                    可抵賴,又可以保證資料在傳輸過程中不會被篡改。