本文將採用開源碼OpenSSL套件來實作一個安全的SSL網站,以便簽發符合資安政策的數位憑證,並說明如何透過Let's Encrypt服務來取得免費且合法的數位憑證。
何謂密碼系統
密碼系統可說是人類最古老的運用之一,其主要目的在於確保互相約定的雙方能在安全的前提下傳輸完整的資訊。依照其型態,可分為對稱式密碼(Symmetric)及非對稱式密碼(Asymmetric),分別說明如下:
對稱式密碼(Symmetric)
雙方在傳輸資料之前,先行互相約定一個鑰匙(一般稱之為金鑰),而後雙方在傳輸資料時,就以此金鑰來加解密文件,如圖2所示,傳輸過程如下所述:
|
▲圖2 對稱式密碼系統使用流程。 |
傳送端在傳輸資料之前,先以金鑰加密所要傳送的資料,而後接收端在接收到資料之後再以相同的金鑰來解開此資料。
對照C.I.A資安原則來分析,對稱式密碼系統可解決下列幾項相關的問題:
·機密性(Confidential):由於傳送端所傳輸的資料已經過金鑰加密,所以在傳輸過程中,即使被無關的第三者所擷取(例如利用Sniffer技術),但由於資料已被加密,因此就算資料被擷取,沒有相對應的金鑰也無法解開此資料,而達到機密性的要求。
·完整性(Integrity):如果傳送端所傳送的資料,在傳輸的過程中遭到惡意更改其內容,那在接收端接收到資料時,就無法以原先所約定的金鑰來解密此資料。因此,同理可證,如果傳輸的加密資料能正常地以金鑰成功的解密,即表示資料在傳輸的過程中並未遭到不正當的更改。反之,如果無法成功解密,就可能是資料在傳輸的過程中遭到不正當的更改。在實務上,通常會利用雜湊函數來驗證資料的完整性。
·不可否認性:因為金鑰僅為傳送雙方所持有,一旦使用金鑰加密資訊並傳送後可正常地加解密,就表示該份文件確為金鑰持有者所傳送。
目前常用對稱式密碼系統的演算法包括DES(Data Encryption Standard)、IDEA(International Data Encryption Algorithm)、RC5(Ron,s Code)、AES(Advanced Encryption Standard)等。
對稱式密碼系統最大優點在於其加解密的運算速度相當快,但此類密碼系統也有下列的缺點:
1. 由於用來加解密的金鑰為共用,所以在傳輸資料
前,須將金鑰以安全的方法交付到傳輸的雙方。
2. 隨著約定傳輸人數的增長,所需要的金鑰也會越來
越多,相關的管理問題也將越發複雜。
有鑑於上述對稱式密碼的缺點,而有非對稱式密碼系統的產生。
非對稱式密碼系統(Asymmetric)
有別於對稱式密碼,非對稱式密碼利用兩把金鑰來加解密文件(兩者為相互對應),金鑰如下所述:
·Public Key(公開金鑰):顧名思義,此把金鑰均
會公開(即可避免對稱式密碼須傳送金鑰的問題),提供所有人下載,每把公共金鑰(Public Key),均會有一個相對應的私鑰來完成資料加解密的流程。
·Private Key(私鑰):不公開,為個人所保管的金鑰(就如同現實環境中的個人私章的角色)。
非對稱式密碼系統常用的使用流程,如圖3所示。傳送者利用公開金鑰(Public Key)來加密欲傳送的文件。待接收者接收到加密後的文件,再以相對應的私鑰(Private Key)來解開文件。
|
▲圖3 非對稱式密碼系統使用流程。 |
非對稱式密碼對於上述所說明的機密性、完整性以及不可否認性的要求,就如同對稱式密碼系統分析一樣,在此就不多加贅述。非對稱式密碼系統雖然可解決對稱式密碼系統所面臨的困境,但其最大的問題在於運算非常緩慢,所以在實務上通常會與對稱式密碼系統交互使用。目前最常用的非對稱式密碼系統演算法即為RSA。
在簡單的說明密碼系統後,接下來繼續說明用來驗證傳輸資料完整性的單向雜湊函數。
單向雜湊函數簡介
單向雜湊函數(Hash Function)是一組數學函式,其特性為不同的輸入即會產生不同輸出。此輸出又稱為訊息摘要(Message Digest),有點類似指紋的用途,而且不能由輸出反推得到輸入的資訊。其用法如下:
1. 傳送者在傳送資訊之前,先以單向雜湊函數針對此
資訊產生訊息摘要,並將資訊及此訊息摘要傳給接收端。
2. 接收端在取得資訊和訊息摘要後,以相同的單向雜
湊函數對資訊產生訊息摘要,並與所接收的訊息摘要做比對,如兩者的內容完全一致,就表示所傳送的資訊並未遭到更改,藉此來驗證資料的完整性。
常用的單向雜湊函數演算法包括MD5(Message-Digest Algorithm 5)、SHA(Secure Hash Algorithm)、MAC(Message Authentication Code)、HMAC(Hash-based Message Authentication Code)等。
在過去因受限於電腦硬體演算能力的限制,無法以暴力演算的方式來破解,但隨著硬體的進步,以SHA1演算法所加密的密碼已被證明有被破解的可能。於是,微軟率先宣佈將從2016年起停用採SHA1演算法的數位憑證,而接著Google也宣布跟進,如果連接到使用SHA1密碼演算法的SSL網站,除了會顯示警告訊息外,還會在瀏覽器(Chrome)的網址列上加上警示標誌。警示標誌的意義,可參考網址「https://support.google.com/chrome/answer/95617?p=ui_security_indicator&rd=1」的說明。
簡單說明過密碼系統之後,接下來利用開源碼社群中的OpenSSL程式庫套件來實作密碼系統的運用。
什麼是OpenSSL
OpenSSL是一套開放原始碼的軟體安全程式庫,於1998年釋出第一版以來,經過多年的修正,至今已成為一套相當穩定的安全程式庫。