天天看點

SAML在雲上的應用——基礎篇

  SAML的全稱是

Security Assertion Markup Language

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

密碼學新方向

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

SAML在雲上的應用——基礎篇

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

  和對稱密碼基于單個共享密鑰的方式不同,非對稱密碼始終是成對出現:

公鑰和私鑰

。由其中任何一個密鑰加密的資料隻能由另外一個密鑰解密。即,由私鑰加密的資料隻能由公鑰解密,由公鑰加密的資料隻能由私鑰解密。非對稱密碼的這個特點使其在密鑰交換和數字簽名領域被廣泛應用。

密鑰交換的靈感

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

消息發送方和接收方事先約定好一把對稱密鑰K。然後,消息發送方使用密鑰K對要發送的消息進行加密,并将加密後的結果通過網絡發送給消息接收方。消息接收方利用密鑰K對接受到的内容進行解密,并獲得原始消息。
SAML在雲上的應用——基礎篇

圖2 利用共享密鑰加密進行資料傳輸

  由于共享密鑰K隻被消息發送方和接收方持有。是以,即便資料在傳輸過程中被劫持,攻擊者由于沒有密鑰K,也無法獲得原始消息内容。

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

SAML在雲上的應用——基礎篇

圖3 真相永遠隻有一個

  

真相永遠隻有一個

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

消息發送方擷取被廣播的消息接收方的PubK,并使用該PubK對要傳輸的對稱密鑰K進行加密,并将加密之後的内容通過網絡傳輸給接收方。消息接收方在收到加密内容之後,使用對應的PriK進行解密得到對稱密鑰K。
SAML在雲上的應用——基礎篇

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

  由于PriK隻被接收方持有。是以,即便資料在傳輸過程中被劫持,攻擊者由于沒有私鑰PriK,也無法獲得原始消息内容。以這種方式,就解決了對稱密鑰傳輸的問題!

數字簽名防僞造

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

SAML在雲上的應用——基礎篇

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

真相永遠隻有一個

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

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

圖6 權威機構使用其私鑰對資訊簽名

  通過權威機構私鑰加簽的方式,保證了PubK來源的可靠性。

那麼誰是權威機構?恭喜你,你已經掌握了問題的精髓

.在密碼學領域,總是存在一個根信任的問題。就是最源頭的信任,比如我們浏覽器中使用的根證書就是一個典型的例子。

數字證書用處多

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

  一個數字證書包括的基本資訊有:證書的版本号、證書序列号、使用的簽名算法、頒發者的身份辨別、證書的有效期、公鑰、公鑰持有者的身份。這些資訊作為被簽名的資料,使用指定的簽名算法和CA的私鑰進行簽名,并将簽名的結果添加到證書中。這就構成了一個完整的證書。數字證書的典型結構:

SAML在雲上的應用——基礎篇

圖7 數字證書的典型結構

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

  作為SAML系列文章的開篇,本文從密碼學新方向的曆史入手,引入了非對稱密碼學的概念。接着,以幾個典型的例子介紹了非對稱密碼在

密鑰交換

數字簽名

數字證書

等三個方向的應用。掌握了這些必要的基礎知識,下一篇文章,我們就來聊一聊SAML協定是如何把這些應用場景進行完美融合,進而設計出被廣泛應用的單點登入解決方案的。

繼續閱讀