首先要先理解壹些概念,這樣才能更好的理解。
公鑰和私鑰
在現代密碼體制中加密和解密是采用不同的密鑰(公開密鑰),也就是非對稱密鑰密碼系統,每個通信方均需要兩個密鑰,即公鑰和私鑰,這兩把密鑰可以互為加解密。公鑰是公開的,不需要保密,而私鑰是由個人自己持有,並且必須妥善保管和註意保密。
公鑰私鑰的原則:
壹個公鑰對應壹個私鑰。
密鑰對中,讓大家都知道的是公鑰,不告訴大家,只有自己知道的,是私鑰。
如果用其中壹個密鑰加密數據,則只有對應的那個密鑰才可以解密。
如果用其中壹個密鑰可以進行解密數據,則該數據必然是對應的那個密鑰進行的加密。
舉個例子來說,就好比銀行裏的保險櫃,妳申請該業務後銀行會給妳壹把鑰匙,也就是私鑰,但光有這壹把鑰匙是開不了的,還有壹把在銀行那裏,而且這把鑰匙適用於所有的保險櫃,也就是公鑰,只有先用銀行的鑰匙開啟,然後再用妳的鑰匙開啟才能完全打開保險櫃。
加密算法的分類
對稱加密:
對稱加密是最早和著名的技術。機密密鑰可以是數字、 壹詞或隨機字母的字符串,只需,應用於以特定方式更改該內容的消息的文本。
舉個例子來說,我有壹段文本需要加密,文本內容是ABCD,我設置的密鑰(也可以稱作加密算法)是位移算法,把字母向後位移2位,那麽加密後的內容應該是CDEF,然後接收方也需要知道這個密鑰,通過它來推導出文本的原始內容。這樣的加密方法的特點是算法公開、計算量小、加密速度快、加密效率高。但是有個缺點,接收雙方都需要使用這個密鑰,而且如果有n個人都需要加密的話,那麽就需要n個密鑰,因為不可能每個人的密鑰都壹樣,要不就無保密性可言。對於網銀來說,用戶數量是相當多的,如果使用這種加密方法,那麽對於網站來說密鑰的數量是災難性的,根本無法管理。
非對稱加密:
與對稱加密算法不同,非對稱加密算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是壹對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那麽只有用對應的公開密鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法。
非對稱加密算法實現機密信息交換的基本過程是:A要向B發送壹段機密信息,首先B會生成壹對密鑰並將其中的壹把作為公鑰(B的公鑰)向A公開;得到該公用密鑰的A使用該密鑰(B的公鑰)對機密信息進行加密後再發送給B,B再用自己保存的另壹把專用密鑰(B的私鑰)對加密後的信息進行解密。B只能用其私鑰解密由其公鑰加密後的任何信息。畫了個簡單的圖作為參考。
探討:網銀數字證書加密解密原理 - patrickyan2008 - patrickyan2008的博客
數字證書與數字簽名
數字證書就是互聯網通訊中標誌通訊各方身份信息的壹系列數據,提供了壹種在Internet上驗證您身份的方式,其作用類似於司機的駕駛執照或日常生活中的身份證。它是由壹個由權威機構—CA機構,稱為證書授權(Certificate Authorit y)中心發行的,人們可以在網上用它來識別對方的身份。數字證書是壹個經證書授權中心數字簽名的包含公開密鑰擁有者信息以及公開密鑰的文件。最簡單的證書包含壹個公開密鑰、名稱以及證書授權中心的數字簽名。壹般情況下證書中還包括密鑰的有效時間,發證機關(證書授權中心)的名稱,該證書的序列號等信息,證書的格式遵循 ITUT X.509國際標準。
那麽,數字證書怎樣完成網上身份的認證呢?
把數字證書說成是網上身份證,這是壹種形象的比喻。實際上,數字證書所證明的是公鑰的真實性。
認證中心對用戶的身份進行嚴格的審核後,為用戶頒發數字證書。它通過公鑰加密技術對用戶的公鑰信息和用戶的身份信息作了數字簽名,把用戶所宣稱的身份信息與公鑰綁定在壹起。數字簽名也就相當於敲了個公章,用來證明妳的信息是真實有效的。於是,包含有用戶個人身份信息、公鑰和數字簽名的壹個特殊的電子文件就形成了數字證書。數字證書可以存儲在硬盤裏,也可以存儲在軟盤或USB Key裏。
CA
CA是Certificate Authority的縮寫,也叫證書授權中心。
它是負責管理和簽發證書的第三方機構。壹般來說,CA必須是所有行業和所有公眾都信任的、認可的。因此它必須具有足夠的權威性,就好比身份證的發型機關公安局壹樣,公安局所頒發的身份證壹定是可以信任的。但是妳自己制作身份證,但是做出來的身份證是沒啥用處的,因為妳不是權威的公安機關,妳自己搞的身份證不具有權威性,其實就是假證。
CA證書,就是CA頒發的證書。
證書之間的信任關系和證書鏈
證書間的信任關系,就是用壹個證書來證明另壹個證書是真實可信的。
實際上,證書之間的信任關系,是可以嵌套的。比如,C信任A1,A1信任A2,A2信任A3......這個叫做證書的信任鏈。只要妳信任鏈上的頭壹個證書,那後續的證書,都是可以信任的。
根證書
根證書叫Root Certificate。
例如,假設C證書信任A和B;然後A信任A1和A2;B信任B1和B2,則它們之間,構成如下的壹個樹形關系。
探討:網銀數字證書加密解密原理 - patrickyan2008 - patrickyan2008的博客
處於最頂上的樹根位置的那個證書,就是“根證書”。除了根證書,其它證書都要依靠上壹級的證書,來證明自己。那誰來證明“根證書”可靠呢?實際上,根證書自己證明自己是可靠滴(或者換句話說,根證書是不需要被證明,就像我們的ZF壹樣,呵呵)。所以,根證書是整個證書體系安全的根本。所以,如果某個證書體系中,根證書出了問題(不再可信了),那麽所有被根證書所信任的其它證書,也就不再可信了,這個後果是相當相當的嚴重。
Hash(哈希)算法
剛才我們說到了加密,我們在傳送信息的時候對信息內容進行加密,但是如果信息內容龐大,那麽對內容本身加解密會花去很長的時間,為了提高效率,因此需要使用壹種數學算法—哈希算法,先對這段信息作壹次數學變換,把這段信息進行壓縮,形成了壹段短短的“數字摘要”,讓數字摘要來“代表”信息本身。可以通過檢驗數字摘要,借以判斷信息本身是否發生了改變。
比方說我們用網上銀行向B用戶轉賬100元,但是萬壹B利用黑客技術更改了妳發送的信息內容,把100改成了1000,那怎麽辦?所以Hash算法就是來驗證數據是否被更改。我們可以用Hash值換算工具來舉個例子,我有個TXT的文檔,裏面的內容是100,然後我把數字改成了1000,我們再看壹下它的Hash值對比:
310b86e0b62b828562fc91c7be5380a992b2786a
e3cbba8883fe746c6e35783c9404b4bc0c7ee9eb
完全不壹樣,所以它能有效的驗證數據是否完整有效。
說了那麽多概念,接下來我們來探討壹下網上銀行的加解密流程吧。
首先先探討壹下用USB Key作為證書的網銀流程。
前面提到,USB Key就是包含有用戶個人身份信息、公鑰和數字簽名的壹個特殊的電子文件的壹種數字證書,只不過這個證書是存放在USB介質裏,而不存放在個人的電腦上。假設有個用戶Bob要使用USB Key模式的網上銀行,那麽我們用壹張圖來解釋壹下:
探討:網銀數字證書加密解密原理 - patrickyan2008 - patrickyan2008的博客
我再來解釋壹遍,首先,Bob已經有了自己的USB Key,這個Key裏包含了Bob的公鑰、私鑰以及銀行頒發的數字證書(這張證書是用來證明Bob身份的),當Bob需要向網銀傳送數據的時候,先把數據用Hash算法算出Hash值H,然後用自己的私鑰加密Hash值H,最後再用銀行的公鑰加密(用銀行的公鑰加密是為了防止數據不會傳送到錯誤的地方,因為只有銀行用自己的私鑰來解密,任何其他偽造的站點是不具有銀行的私鑰的,也就無法解密數據)後發送給銀行。
銀行收到數據後首先用自己的私鑰解密,解密後得到加密後的Hash值H,因為這個H是用Bob的私鑰來加密的,所以用Bob的公鑰來解密,解密後得到H,銀行再用同樣的算法算出數據的Hash值H',對比H和H',如果壹致,說明數據沒有被中途更改,才能繼續通訊,這樣交易雙方都互相經過驗證並互信,交易才可以進行。
還有壹種是沒有USB Key的網上銀行,只用數字證書,比如浦發銀行的數字證書版就是這樣。其實原理都是壹樣的,只不過這種方式用戶的私鑰是存放在本地的,它和USB Key的區別就是安全性上的區別。
舉例來說,如果我用的只是數字證書版,數字證書是安裝在我的筆記本上,而且的我記比較差,為了方便記憶,我把我的用戶名和密碼都記錄在壹個文本文件上。某天我的筆記本丟了,被某個別有用心的人撿到後找到了我存放用戶名密碼的文件,並且當時我粗心大意,並沒有向銀行掛失,因為我比較傳統,以為卡還在錢包裏就沒問題,那麽這個別有用心的人就可以用我的筆記本登錄網上銀行並進行轉賬等操作了。
那麽USB key呢,因為使用USB證書後我的私鑰是存放在USB盤裏的,而且USB Key使用時還需輸入壹個PIN碼,相當於密碼,雖然我還是有可能把這個密碼存放在那個文件中,但是壹般我也不會筆記本和USB Key壹塊丟掉,因為這個USB也只有用網上銀行的時候使用,平時肯定會收起來的,而且這個USB Key只能在壹臺電腦上使用,換臺電腦也不行,它記錄了機器的硬件碼,只要不是筆記本、USB、密碼本壹起丟掉,那麽安全度還是相當高的,如果這幾樣同時都丟了,那真的沒辦法了,我想送錢給別人,那妳們也別攔我了,呵呵。
經過那麽多篇幅的描述,我想大家應該能夠理解了吧,如果還有疑問,或者我有些地方說的不對,那麽請和我再壹起探討,畢竟這些也是我自己的理解,還是會有差錯的。