Apple出包,你的SSL加密是否安全?SSL原理解析,從密碼學看加密技術的安全性

ADVERTISEMENT

認清鎖頭即知加密

SSL、TLS採用非對稱加密技術,其主要目的為確認通訊對象與替通訊加密,以保障通訊的保密性和可靠性。絕大部分的瀏覽器都支援SSL、TLS,且已預先安裝了各大CA(Certificate Authority,電子證書認證機構)的相關憑證檔案,會在使用者進入支援SSL、TLS的網頁時,自動建立加密連線。

SSL、TLS的安全強度也會因網站驗證方式不同而受到影響,基本上一般CA對申請網站的鑑別方式可以粗分為3種,最簡易的驗證方式為網域驗證(Domain Validation),CA只會簡單地鑑別網域所有權,不必是公司行號也可申請,等級最低也最便宜。第二種稱為機構驗證(Organization Validation),申請網站需要提出政府所發的正式文件,向CA證明自己是合法登記設立的公司行號、機關團體。

最為嚴謹的是延伸驗證(Extended Validation),根據經濟部強化電子商務交易安全整合平台提供的資料,申請延伸驗證需要有合法文件證明商業實體的設立與運作,以及合法文件證明合法擁有登記的網域名稱,並能夠完整掌控該網域名稱之運用等條件,可以確保該網站的擁有者就是一般人所認定的同一公司或組織,安全性更加可靠。

Apple出包,你的SSL加密是否安全?SSL原理解析,從密碼學看加密技術的安全性

▲即便SSL 2.0已有被發現的安全缺陷,還是有超過2成的網站保留對這項舊規範的支援。

Apple出包,你的SSL加密是否安全?SSL原理解析,從密碼學看加密技術的安全性

▲以Firefox瀏覽器為例,電腦王主頁區域沒有使用SSL進行加密,所以在網址列的地方顯示地球圖示。

Apple出包,你的SSL加密是否安全?SSL原理解析,從密碼學看加密技術的安全性

▲T客邦的登入畫網頁經過SSL加密,所以網址列顯示鎖頭圖示,此外網址開頭也改為https://。

Apple出包,你的SSL加密是否安全?SSL原理解析,從密碼學看加密技術的安全性

▲Twitter網站採用延伸驗證,除了鎖頭圖示變成綠色之外,也會顯示網站的擁有者,安全性更加可靠。

透過交握協商加密

為了要保障通訊的安全與隱密,SSL、TLS最主要的功能有2項,即透過非對稱加密系統與X.509規範為網站提供身份認證,當認證完成後讓雙方進行密碼交換,以利通訊過程中,雙方可以使用對稱加密系統為資料加密。當建立加密連線前,會經過SSL交握(SSL Handshake)程序,進行雙方SSL、TLS版本、加密方式確認,以及身份認證與密碼交換,讀者可以參考下圖瞭解交握流程。

首先客戶端(client,即使用者的瀏覽器)會發送client hello訊息,將支援的協定版本、加密演算法以及隨機亂數RNC等資訊發送給伺服端(server,即網站伺服器),隨後伺服端會以server hello回覆採用的協定版本、和加密套件及隨機亂數RNS。接下來伺服端會傳送它的公鑰與數位憑證,供客戶端確認通訊對象,隨後客戶端將發送自己的數位憑證進行雙向身份認證,如果沒有數位憑證的話則隨機生成公鑰傳送給伺服端,並將交握資訊以私鑰加密,將結果與其hash值傳送給伺服端,供其檢驗是否正確。

多次溝通產生密鑰

上述的過程並沒有包含任何機密資料,所以在非加密的情況下進行,原則上不影響其安全性,這時候雙方已經握有對方的公鑰,基本上已經滿足透過非對稱加密系統進行加密通訊的條件,不過非對稱加密的運算複雜度比對稱加密高,需要更為密集的處理器運算力,為了降低雙方負擔,所以會協商產生對稱密鑰,並以這把對稱密鑰為後續通訊加密。

首先客戶端會先隨機產生PMS(pre-master secret,前期主密鑰),並將這個密鑰以伺服端公鑰加密,然後傳送給伺服端,這時候伺服端就可以用自己的私鑰進行解密,得到PMS,接著雙方會透過協商好的演算法產生MS(master secret,主密鑰),最後雙方會互相發送結束交握的訊息,並開始進行加密通訊。

Apple出包,你的SSL加密是否安全?SSL原理解析,從密碼學看加密技術的安全性

▲SSL在建立加密連線前,會先透過SSL交握產生密鑰(本圖修改自Essich之創作,遵守創用CC授權姓名標示)。 

電腦不易產生真正亂數

由於電腦的程式是由人設計出來的,所以它只會死板地執行被賦予的工作,雖然說不少程式語言都有產生亂數的功能,但那個功能並非產生真正隨機(Random)的亂數,而是透過透定程式產生具有偽隨機性(Pseudorandomness)的偽亂數。

原則上以統計的角度來觀察偽亂數,可以發現它的分布近似於隨機分布,但是由於它的產生會受到隨機函數與亂數種子的影響,然而隨機函數是固定的,能夠控制的要素只有亂數種子。

大部分學過程式語言的人都知道,最簡單的方式就是把時間當做亂數種子,由於每次執行程式的時間都不一樣,所以產生的偽亂數也會不一樣。但是需要注意的是,基本上電腦的時間格式為yyyy:mm:dd:hh:mm:ss(西元年、月、日、時、分、秒),只有14個10進位數字,且有其規律性,因此相當容易破解,當要在密碼學領域使用偽亂數的時候,就需要尋找更為隨機分布的亂數種子,舉例來說使用者按下按鍵的時間長度,或是滑鼠移動的軌跡等等。

從密碼學看SSL安全性

在前文中提到的非對稱加密系統,可以說是SSL、TLS規範安全性的核心所在,顧名思義,非對稱加密系統就是使用不同的金鑰(密碼)進行加密及解密,這聽起來似乎超出我們的常識,天底下真的有這種神奇的技術嗎?

加密、解密用不同密碼

非對稱加密的數學概念是採用2個彼此存在某種相關性的數,形成1對加密金鑰與解密金鑰,使用者能夠以加密金鑰對訊息進行加密,並用解密金鑰解讀密文,而且很難透過數學的方式,從其中一者推導出另一者。目前常見的非對稱加密方式有RSA、ElGamal、橢圓曲線等密碼系統,它們依序以大數分解、離散對數、橢圓曲線為其數學基礎。

非對稱加密與對稱加密最大的不同,在於它可以在被竊聽的情況下保障資料的隱密性。以傳統的對稱加密為例,假設「電腦王」要傳送加密資料給「國寶大師」,電腦王需要先產生金鑰,並用該金鑰將資料加密,然後分別將金鑰與密文傳送給國寶大師,如果這段通訊被竊聽,攻擊者就可以將資料解密。

如果使用非對稱加密技術,情況就有所不同,這時候是國寶大師先產生1組非對稱金鑰,然後將加密金鑰傳送給電腦王(由於該金鑰公開,也稱為公鑰),接著電腦王用加密金鑰將資料加密並傳送,接收到密文的國寶大師則用未曾經過傳輸的解密金鑰解讀密文(由於該金鑰不公開,也稱為私鑰),即便通訊遭到竊聽,竊聽者也無法解讀密文。這也就是為什麼在SSL交握過程中,客戶端將PMS傳送給伺服端時,使用伺服端的加密金鑰進行加密。

RSA靠大數分解

以最常使用的RSA為例,其原理採用成法與因式分解計算量不對等的特性,選擇2個很大的質數,並將這2個數相乘,得到1個更大的數,要將2強質數相乘很簡單,但是要從將得到的答案分解成原始的數就困難很多,只要選擇的這2個數夠大,分解著個合成數所需的計算量就會相當驚人,因此可以達成單向操作容易,逆向破解困難的需求。

Apple出包,你的SSL加密是否安全?SSL原理解析,從密碼學看加密技術的安全性

▲雖然對稱加密所需要的運算量比較低,但是要如何傳輸金鑰卻是個問題(比方約在隱密處親口告知)。

Apple出包,你的SSL加密是否安全?SSL原理解析,從密碼學看加密技術的安全性

▲非對稱加密不但步驟較為繁雜,加、解密時也需要更多運算資源,不過不必擔心解密金鑰外流的風險。

Apple出包,你的SSL加密是否安全?SSL原理解析,從密碼學看加密技術的安全性

▲如果通訊過程受到竊聽,竊聽者得到密文與金鑰,所以可以照著正常解密程式解讀密文,不需破解加密系統。

Apple出包,你的SSL加密是否安全?SSL原理解析,從密碼學看加密技術的安全性

▲使用非對稱加密的話,竊聽者雖然得到密文,但是只有加密金鑰,除非破解加密系統,否則無法解讀密文。

RSA的金鑰產生過程的第一步,是先隨機挑選2個質數(假設這2個數為P、Q),然後將其相成得到N,接著計算歐拉函數φ(N),然後選擇任意整數E,滿足1 <E <φ(N)且與φ(N)互質,最後計算E關於模R的模反元素D,得到加密金鑰(N,E)與解密金鑰(N,D)。筆者將詳細計算流程整理如下

選擇P、Q,並計算N=P x Q

φ(N) = φ(P)φ(Q) = (P− 1)(Q − 1)  (由於P、Q為質數,故可簡化為此算式)

選擇任意整數E,滿足1 <E <φ(N)且與φ(N)互質

計算E關於模R的模反元素,D≡ E−1 (mod φ(N))

假設電腦王要傳送原始資料M給國寶大師,只要計算密文C=MEmodN並傳過去,國寶大師以解密金鑰計算M=CDmodN,則可解讀密文。由於P、Q這2個質數並沒有出現在金鑰中,所以竊聽者勢必要對N進行因式分解,由於竊聽者很難從N與E反推取得P、Q,所以無法計算出解密金鑰關鍵的D。

透明機構反而更安全

或許有讀者看到這裡,會懷疑RSA的運作方式都被別人看光了,是否會影響其安全性,但事實上從密碼學的角度來看,開放架構不會造成安全性的威脅。根據奧古斯特‧柯克霍夫(Auguste Kerckhoffs)提出的柯克霍夫原則,在設計軍用保密系統時,應該注意6項要點,其中2項為「即使理論上系統可以被破解,也應在現實中無法破解」,及「系統本身不應包含任何機密,即便落入敵人手中也不會影響安全性」。

RSA的設計就符合這2項要點,雖然攻擊者能夠以暴力破解的方式攻擊RSA系統,不過隨機找到2個質數相對起來簡單許多,反觀暴力破解要不斷嘗試大數分解,而且還要花相當多的時間猜中在茫茫數海中被挑中的2個質數,在創造金鑰與破解間存在所需時間的不對等性(可能需要幾十萬年)。況且根據歐幾里得定理,質數的數量是無窮多,所以只要提高P、Q的值,就可以降低被破解的可能性。

仍需小心其他風險

目前SSL 2.0已經被發現諸多影響安全的脆弱性,基本上已被視為不安全的加密方式,而短於1024 bit的RSA金鑰也面臨著被暴力破解法擊破的風險,為了確保通訊安全,讀者最好確定網站所使用的加密方式為SSL 3.0或TLS 1.0以上之版本,且採用長度大於2048 bit的金鑰。

雖然目前SSL、TLS的機制本身還是安全的,但是不代表所有經過SSL、TLS保護的通訊都是安全的,因為攻擊者還是可能透過旁敲側擊的方式盜取資料,比方鍵盤側錄,或是以釣魚網站騙取使用者的密碼,再使用該密碼嘗試存取正常的SSL、TLS加密網站,所以在信任SSL、TLS的同時,仍不能輕忽其他可能被入侵的管道。

Apple出包,你的SSL加密是否安全?SSL原理解析,從密碼學看加密技術的安全性

▲柯克霍夫出生於1835年,為荷蘭的語言學家、密碼學家,曾任教於巴黎高等商業研究學院。(圖片為公有領域知識財產)

Apple出包,你的SSL加密是否安全?SSL原理解析,從密碼學看加密技術的安全性

▲T客邦的加密金鑰長度為2048 bit,基本上不可能使用暴力破解法進行破解,安全性可以信賴。

Apple出包,你的SSL加密是否安全?SSL原理解析,從密碼學看加密技術的安全性

▲根據Trustworthy Internet Movement提供的資料,他們所分析的網站中,只有極少數使用1024 bit以下之金鑰。

RSA計算範例

筆者在下面舉個簡單的例子,展示RSA的運作原理,為了方便計算,所以P與Q皆取2位數為範例。

選擇P=61、Q=53

N=61 x 53=3233

φ(3233)=(61-1)(53-1)3120

E需符合1<E<3120且與3120互質

選擇E=17

計算模反元素得D=2753

這時候就可以開始進行加、解密動作,假設明文M=65

加密C=MEmodN=6517mod3233=2790

解密M=CDmodN=27902753mod3233=65

當P、Q都很小的時候,計算量就非常大了,所以只要加大P、Q之值,就可以抵擋暴力破解法攻擊。

 

本文同步刊載於電腦王雜誌
  Apple出包,你的SSL加密是否安全?SSL原理解析,從密碼學看加密技術的安全性
歡迎加入電腦王雜誌粉絲團

使用 Facebook 留言

ulyssesric
2人給推

1.  ulyssesric (發表於 2014年6月10日 15:42)
這篇 lag 了好幾個月吧?
而且這個 bug 是誤讓 SSL 認證失敗的也能通過,
也就是在 SSL「正常運作」的前提下系統的誤判斷,
再怎樣也和「你的 SSL 加密是否安全?」這個標題扯不上邊。

如果作者真要討論 SSL 的安全性,
應該要來深入剖析 Heartbleed 事件。
GUESS
3.  GUESS (發表於 2014年6月11日 09:12)
IOS都已經出到7.1.1了...IOS 8都準備要上陣了!這文章也lag太久了...
而且要探討SSL安全也應該從影響範圍更大的心在淌血事件著手吧

發表回應

謹慎發言,尊重彼此。按此展開留言規則