Web安全專業術語講解:金鑰、隨機數、雜湊值、簽名、數字證書、https

天府雲創發表於2018-12-27

本篇對web安全中一些常見概念做個基本介紹,並最終整合為https的整個流程。本文介紹的加密方法純屬個人虛構,與現實無關。因為現實中的加密演算法太過複雜,暫不討論。這裡只用最簡單的方法舉例,只把概念講清楚,也不考慮破解的可能性。

凱撒密碼

這是凱撒當年的軍用密碼,是最古老,也是最簡單的一種密碼。舉個例子:

明文:ok

密文:rn

加密方式很簡單,將明文字母向右偏移三位,o就是r,k就是n。解密就是反方向偏移三位。

金鑰 

上面凱撒密碼的金鑰就是3。發訊息時使用密文傳輸,即使被黑客攔截,他無法理解rn是什麼意思,只有擁有金鑰的人才能解密真正的訊息明文,而金鑰只有發訊息和收訊息的人才知道。

隨機數(加鹽)

假如收信人每次收到rn都會去做同樣的事情,那麼黑客再攔截到rn密文時,他不用破解就可以預測到收信的人行為了,他甚至可以主動給收信人發rn,從而在需要時控制收信人。

隨機數的作用就是使密文變的不可預測,假如隨機數是5,5*1=5,密文將偏移5位,同時將隨機數5也發給收信人。接收人也用相同的演算法5*1=5,從而得知這一次的解密金鑰是5,要反向偏移5位而不是固定的3位。並且隨機數是不可重複的,這樣每次的密文都會完成不同,無法預測。

雜湊值(訊息摘要)

有時候我們下載一些檔案,對方可能還會提供雜湊值,比如md5、sha大家應該不會陌生吧,它們都是生成雜湊值的不同演算法。廠商將原始檔案通過一定演算法生成雜湊值(一串字串),公佈出來。使用者下載後,自己再用工具算一遍,得出的雜湊值相同,說明檔案沒有被擅改過。如果不相同,你下載的檔案有可能已經被黑客植入惡意指令碼。

生成雜湊值的過程是不可逆的,比如20(原文)除以8(雜湊演算法)等於2(雜湊值),餘數4被丟棄了,所以2和8是不可能倒推出20的。而我們拿到20再算一遍,必然得出結果2,和廠商比對一樣,說明20就是原檔案,沒有被擅改過。

不論原始檔案或訊息有多麼大,最終生成的雜湊值都可以是非常簡短的,可以反覆做除法,一直除到想要的長度,這樣便於傳輸攜帶。

非對稱加密

在網際網路上,我們通常不會只和一個使用者通訊,假如他們每個人都知道我們的金鑰,那他們就可以互相解密了。你也可以給每個使用者都單獨配一個不同的金鑰,但如果我們的使用者非常多,要管理這麼多的金鑰是非常麻煩的事情。

非對稱加密指有兩個金鑰,公鑰和私鑰,成對出現 。公鑰是公開的金鑰,所有使用者可以用它加密,不能解密。而私鑰是伺服器私有,只能解密,不能加密。從而保證所有人發的訊息只有伺服器能看到。也可以反過來,用私鑰加密訊息,用公鑰解密,可以保證訊息確實是伺服器發出的。

比如上面說的20除以8等於2,丟棄餘數4,從而使2和8無法倒推出20。假如現在伺服器知道餘數是4,不就可以倒推了嗎?我們提前做幾道演算法:2*8+4=20,3*8+4=28。。。假如原文是49,加密時隨機將其拆分成20+28+1。根據前面的演算法,20=2,28=3,多出的尾數1保留,密文就是231。由於不知道餘數4,黑客即使知道演算法*8和尾數1,也無法通過231還原出49。而我們知道餘數4,就可以用2還原出20,用3還原出28,最後20+28+1得出原文就是49。而餘數4就是我們的私鑰。

非對稱加密雖然安全性更高,但從上面就可以看出,非對稱加密比對稱加密複雜的多,效能也低的多。所以它並不能完全取代對稱加密,只適合對一些較短的關鍵性的內容加解密,如下。

數字簽名

雜湊值保證了訊息完整性,而且簡短便於傳輸,但是無法確認訊息來源。黑客可以攔截訊息,然後冒名發出一條假訊息,並相應生成假訊息的雜湊值,發給收信人。收信人比對雜湊值一致還誤以為是真實伺服器發出的。

數字簽名和現實中的簽名作用一樣,用於識別身份,而且非常簡短。比如:採用非對稱加密技術,發信人用私鑰對雜湊值進行加密,收信人用公鑰解密出雜湊值。因為只有私鑰才能加密,加密後的內容就相當於個人簽名,只有與其對應的公鑰才能解密,只要能解密成功就能證明訊息來源的真實性,偽造的簽名是無法被特定的公鑰識別的。然而公鑰就一定是安全的嗎?

證書

使用者的公鑰都是從網上獲取。而黑客同樣可以進行攔截,並將黑客的公鑰替代伺服器的公鑰發給使用者,使用者用公鑰加密後,黑客可以用他的私鑰直接解密。此時就需要第三方認證機構對公鑰進行認證了。

1,如果伺服器需要認證,則向認證機構申請。

2,認證機構用自己的私鑰對伺服器的相關資訊(包含公鑰)進行數字簽名,相關資訊和簽名就構成了伺服器證書。

3,使用者訪問伺服器時,伺服器將其證書發給使用者。

4,使用者在安裝window作業系統時,預設會安裝受信任的認證機構的證書,證書中也包含認證機構的公鑰。使用者瀏覽器用認證機構的公鑰,解密伺服器證書的數字簽名,得到雜湊值。然後將伺服器證書中的公鑰與雜湊值(摘要)進行比對,從而確認伺服器公鑰的真實性。所以,如果你的伺服器作業系統不是正版的,或雜湊值比對不一致,那從根本上就無法保證伺服器的安全性。

https

理解了以上內容,基本上就可以明白https的通訊過程了

1,客戶端發起請求,和伺服器協商將使用的加密演算法,傳輸協議等資訊,這些內容都是公開的。

2,伺服器將自己的證書發給客戶端。

3,客戶端驗證證書合法性。

4,客戶端生成對稱加密金鑰,用伺服器證書中的公鑰對金鑰加密,發給伺服器,伺服器用私鑰解密拿到對稱金鑰。

5,安全性相關工作全部確認完閉,客戶端和伺服器開始使用對稱金鑰傳送業務訊息。

對稱金鑰

以上https可以發現,低效能的非對稱金鑰只是用在安全確認環節上,只對較短的關鍵內容進行加解密。而訊息的內容有可能是非常長的,比如一個html上千行程式碼,此時用對稱金鑰效能更高,最後生成的對稱金鑰也只有伺服器和客戶端彼此知道。
 

相關文章