走進SAML——基礎篇

SAML的全稱是Security Assertion Markup Language。提到SAML,我們主要想到的是其在各種單點登錄場景中大行其道。單點登錄我們通常叫做SSO,那麼SAML到底是如何實現SSO的呢?在這個系列的文章中,我將爲大家闡釋清楚。不過,水是有源的,樹是有根的。一切的一切,還得從非對稱密碼學談起!

密碼學新方向

1976年,兩個斯坦福大學的傑出學者,在經過了三年的合作之後,發表了一篇題爲《密碼學的新方向》的文章。這篇論文首次引入了公共密鑰加密協議與數字簽名的概念。誰也想不到,短短几十年後,這篇文章構成了現代互聯網加密協議的基石。就是這兩位帥爺爺和萌蜀黍!!!

圖1 《密碼學的新方向》作者(圖片來源於網絡)

和對稱密碼基於單個共享密鑰的方式不同,非對稱密碼始終是成對出現:公鑰和私鑰。由其中任何一個密鑰加密的數據只能由另外一個密鑰解密。即,由私鑰加密的數據只能由公鑰解密,由公鑰加密的數據只能由私鑰解密。非對稱密碼的這個特點使其在密鑰交換和數字簽名領域被廣泛應用。

密鑰交換的靈感

在需要加密的網絡通信場景中,最常見的加密方式是基於共享密鑰的對稱加密方式。通信過程如下:

消息發送方和接收方事先約定好一把對稱密鑰K。然後,消息發送方使用密鑰K對要發送的消息進行加密,並將加密後的結果通過網絡發送給消息接收方。消息接收方利用密鑰K對接受到的內容進行解密,並獲得原始消息。

圖2 利用共享密鑰加密進行數據傳輸

由於共享密鑰K只被消息發送方和接收方持有。因此,即便數據在傳輸過程中被劫持,攻擊者由於沒有密鑰K,也無法獲得原始消息內容。

但是問題來了,如何事先約定好密鑰?如果消息發送方和接收方物理位置很近,還可以通過線下見面的方式約定密鑰。但如果通信雙方距離十萬八千里呢?顯然,線下約定的方式是不現實的。那麼是否可以找到一種安全的方式,讓通信雙方基於網絡就可以約定共享密鑰呢?

 

圖3 真相永遠只有一個

真相永遠只有一個:利用非對稱密碼學的機制進行密鑰交換。消息接收方提前生成一對公私鑰,並將公鑰PubK廣播出去,私鑰PriK自己保存。有了這個前提條件,就可以安全的約定對稱密鑰了。過程如下:

消息發送方獲取被廣播的消息接收方的PubK,並使用該PubK對要傳輸的對稱密鑰K進行加密,並將加密之後的內容通過網絡傳輸給接收方。消息接收方在收到加密內容之後,使用對應的PriK進行解密得到對稱密鑰K。

圖4 利用非對稱密碼學的機制進行密鑰交換

由於PriK只被接收方持有。因此,即便數據在傳輸過程中被劫持,攻擊者由於沒有私鑰PriK,也無法獲得原始消息內容。以這種方式,就解決了對稱密鑰傳輸的問題!

數字簽名防僞造

在密鑰交換的過程中,有一個步驟值得商榷:消息發送方獲取被廣播的消息接收方的PubK。這裏面涉及一個認證的問題,怎麼證明一個PubK就是接收方的PubK呢?如果出現黑客僞造接收方的PubK怎麼辦?就像下圖醬紫。

圖5 黑客僞造接收方的公鑰

真相永遠只有一個:數字簽名。所謂數字簽名,就是一個有公信力的權威機構用它自己的私鑰對某些數據進行簽名(通常稱私鑰加密爲簽名),以證明這些數據是可被信任的。

權威機構用自己的私鑰將接收方的公鑰PubK進行簽名,消息發送方在收到簽名後,利用權威機構對應的公鑰解密以驗證簽名。如果驗證通過,說明當前接收的PubK是經過認證的,是可以被信任。反之,攻擊方的公鑰是沒有被認證的,是不可信任的。

圖6 權威機構使用其私鑰對信息簽名

通過權威機構私鑰加簽的方式,保證了PubK來源的可靠性。那麼誰是權威機構?恭喜你,你已經掌握了問題的精髓.在密碼學領域,總是存在一個根信任的問題。就是最源頭的信任,比如我們瀏覽器中使用的根證書就是一個典型的例子。

數字證書用處多

行文至此,數字證書的概念已經呼之欲出了!數字證書,又稱爲公鑰證書,用來證明某個公鑰被某個實體(通常爲人、組織或服務)所持有。這就好比,你的房產證用來證明房子是被你持有。同理,你的公鑰證書用來證明這把公鑰被你持有。

一個數字證書包括的基本信息有:證書的版本號、證書序列號、使用的簽名算法、頒發者的身份標識、證書的有效期、公鑰、公鑰持有者的身份。這些信息作爲被簽名的數據,使用指定的簽名算法和CA的私鑰進行簽名,並將簽名的結果添加到證書中。這就構成了一個完整的證書。數字證書的典型結構:

圖7 數字證書的典型結構

由於CA機構的公鑰是廣而告之的,任何組織或實體只要用CA的公鑰驗證了證書中籤名的合法性,就能證明當前證書是可靠的。即,證書中所聲明的公鑰與持有者關聯。同時,該公鑰對應的私鑰被持有者唯一持有。

作爲SAML系列文章的開篇,本文從密碼學新方向的歷史入手,引入了非對稱密碼學的概念。接着,以幾個典型的例子介紹了非對稱密碼在密鑰交換數字簽名數字證書等三個方向的應用。掌握了這些必要的基礎知識,下一篇文章,我們就來聊一聊SAML協議是如何把這些應用場景進行完美融合,進而設計出被廣泛應用的單點登錄解決方案的。



一個介紹Java學習路線的Live:(已有4000+人收聽,5200+人支持)

學習Java,我建議這樣做​www.zhihu.com​www.zhihu.com圖標

一個介紹雲計算學習路線的Live:

入門雲計算:你該瞭解的那些事兒​www.zhihu.com圖標

 

發佈於 2019-10-14

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章