新四季網

https加密和使用(背後的加密算法)

2023-04-22 12:43:31

當你在瀏覽器的地址欄上輸入https開頭的網址後,瀏覽器和伺服器之間會在接下來的幾百毫秒內進行大量的通信。InfoQ的這篇文章對此有非常詳細的描述。這些複雜的步驟的第一步,就是瀏覽器與伺服器之間協商一個在後續通信中使用的密鑰算法。這個過程簡單來說是這樣的:

瀏覽器把自身支持的一系列Cipher Suite(密鑰算法套件,後文簡稱Cipher)[C1,C2,C3, …]發給伺服器;伺服器接收到瀏覽器的所有Cipher後,與自己支持的套件作對比,如果找到雙方都支持的Cipher,則告知瀏覽器;瀏覽器與伺服器使用匹配的Cipher進行後續通信。如果伺服器沒有找到匹配的算法,瀏覽器(以Firefox 30為例,後續例子中使用的瀏覽器均為此版本的Firefox)將給出錯誤信息:

本文將講述如何探究這一過程。

1. 瀏覽器

瀏覽器支持哪些Cipher?這取決於瀏覽器支持的SSL/TLS協議的版本。習慣上,我們通常把HTTPS與SSL協議放到一起;事實上,SSL協議是Netcape公司於上世紀90年代中期提出的協議,自身發展到3.0版本。1999年該協議由ITEL接管,進行了標準化,改名為TLS。可以說,TLS 1.0就是SSL 3.1版本。在Wikipedia上並沒有SSL獨立的條目,而是會重定向到TLS,可見兩種協議關係之緊密。目前TLS最新版本是1.2。網際網路上有超過99%的網站支持TLS 1.0,而支持TLS 1.2的網站尚不足40%。打開Firefox瀏覽器,在地址欄中輸入about:config,然後搜索tls.version,會看到下面的選項:

其中security.tls.version.min和security.tls.version.max兩項決定了Firefox支持的SSL/TLS版本,根據Firefox文檔的介紹,這兩項的可選值及其代表的協議是:

0 – SSL 3.01 – TLS 1.02 – TLS 1.13 – TLS 1.2

因此上圖的設置說明當前瀏覽器支持協議的下限是SSL 3.0,上限是TLS 1.2。現在,如果把security.tls.version.min一項改為3,那麼瀏覽器就只支持TLS 1.2了。前文提到,目前只有不足40%的網站支持TLS 1.2,比如Amazon就不在這40%之列,所以此時訪問https://amazon.com,就會收到「Secure Connection Failed」的錯誤信息,如圖2所示。

了解了SSL/TLS協議後,可以使用Wireshark(或類似的可以抓去網絡包的工具)通過分析網絡包的信息,來查看瀏覽器發送給伺服器的所有Cipher。Wireshark是一款使用簡單卻非常強大的抓包工具。

瀏覽器會首先發起握手協議,既一個「ClientHello」消息,在消息體中,可以找到Firefox支持的Cipher。在Wireshark中,按照Protocol協議排序,然後從TLS 1.2協議的報文中找到一個Info為「Client Hello」的。選中這個,然後在下面的報文信息窗口中依次找到Secure Sockets Layer -> TLSv1.2 Record Layer -> Handshake Protocal -> Cipher Suites。例子中的第一個Cipher是TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,一共有23個:

如果繼續找一個Info為「ServerHello」的報文,可以在類似的位置找到伺服器返回的Cipher,在本例中是TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA:

關於密鑰算法這一長串名字的含義,後面說明。接下來,瀏覽器就要等待伺服器響應它的請求。我們來看一看伺服器端都做了些什麼。

2. 伺服器

讓我們以Windows為例。若要查看作業系統支持哪些密鑰算法,可以運行gpedit.msc,依次進入」Computer Configuration」 -> 」Administrative Templates」 -> 「Network」 -> 「SSL Configuration Settings」,這時可以在窗口右邊看到」SSL Cipher Suite Order」項:

點擊該項後進入」SSL Cipher Suite Order」。這裡可以看到作業系統支持的Cipher的集合,以及對不同Cipher的排序

如果需要調整這裡排序,或者去掉一些弱的Cipher,可以點擊左上角的「Enabled」,然後在「Options」中重寫編輯Cipher的列表。如果喜歡命令行,可以通過下面的Powershell命令修改密鑰算法套件:

Set-ItemProperty -path HKLM:\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\0001002 -name Functions -value "XXX,XXX,XXX"

那麼Cipher的這一長串名字是什麼含義呢?其實,每種Cipher的名字裡包含了四部分信息,分別是

密鑰交換算法,用於決定客戶端與伺服器之間在握手的過程中如何認證,用到的算法包括RSA,Diffie-Hellman,ECDH,PSK等加密算法,用於加密消息流,該名稱後通常會帶有兩個數字,分別表示密鑰的長度和初始向量的長度,比如DES 56/56, RC2 56/128, RC4 128/128, AES 128/128, AES 256/256報文認證信息碼(MAC)算法,用於創建報文摘要,確保消息的完整性(沒有被篡改),算法包括MD5,SHA等。PRF(偽隨機數函數),用於生成「master secret」。

完全搞懂上面的內容似乎還需要一本書的介紹(我已經力不從心了)。不過大致了解一下,有助於理解Cipher的名字,比如前面伺服器發回給客戶端的Cipher : TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 。從其名字可知,它是

基於TLS協議的;使用ECDHE、RSA作為密鑰交換算法;加密算法是AES(密鑰和初始向量的長度都是256);MAC算法(這裡就是哈希算法)是SHA。

熟悉了Cipher名字背後的含義後,讓我們看看像IIS這樣的Web伺服器如何選擇一個密鑰算法呢?假如瀏覽器發來的密鑰算法套件為[C1, C2, C3],而Windows Server支持的套件為[C4, C2, C1, C3]時,C1和C2都是同時被雙方支持的算法,IIS是優先返回C1,還是C2呢?答案是C2。IIS會遍歷伺服器的密鑰算法套件,取出第一個C4,發現瀏覽器並不支持;接下來取第二個C2,這個被瀏覽器支持!於是,IIS選擇了C2算法,並將它包含在一個「ServerHello」握手協議中,發回給客戶端。這就有了圖5中的結果。

3. 選擇

作為瀏覽器的使用者,你可以讓瀏覽器只能訪問支持TLS 1.2協議的站點,以獲得更好的安全性,以及更差的體驗。作為伺服器的維護者,似乎將最強壯的Cipher排在前面是正確的選擇。就在前不久,我們開發的一個Web報稅系統在一次由第三方進行的安全檢查中,被報出的問題之一就是伺服器默認的Cipher太弱(RC4-based),於是我們使用了AES-based的Cipher,但是密鑰長度只是選擇了128,而不是256,背後的擔憂主要來自於性能——加密與解密是CPU密集型操作,我們擔心到報稅忙季時,過強的Cipher會帶來性能問題。

其實像Amazon和Google這些網際網路公司都在使用RC4-based的加密算法。這又是一次理論與實踐的交鋒。至於這次對於的線上系統所做的調整會不會對性能產生影響,幾個月後就能見分曉了。

,
同类文章
葬禮的夢想

葬禮的夢想

夢見葬禮,我得到了這個夢想,五個要素的五個要素,水火只好,主要名字在外面,職業生涯良好,一切都應該對待他人治療誠意,由於小,吉利的冬天夢想,秋天的夢是不吉利的
找到手機是什麼意思?

找到手機是什麼意思?

找到手機是什麼意思?五次選舉的五個要素是兩名士兵的跡象。與他溝通很好。這是非常財富,它擅長運作,職業是仙人的標誌。單身男人有這個夢想,主要生活可以有人幫忙
我不怎麼想?

我不怎麼想?

我做了什麼意味著看到米飯烹飪?我得到了這個夢想,五線的主要土壤,但是Tu Ke水是錢的跡象,職業生涯更加真誠。他真誠地誠實。這是豐富的,這是夏瑞的巨星
夢想你的意思是什麼?

夢想你的意思是什麼?

你是什​​麼意思夢想的夢想?夢想,主要木材的五個要素,水的跡象,主營業務,主營業務,案子應該抓住魅力,不能疏忽,春天夢想的吉利夢想夏天的夢想不幸。詢問學者夢想
拯救夢想

拯救夢想

拯救夢想什麼意思?你夢想著拯救人嗎?拯救人們的夢想有一個現實,也有夢想的主觀想像力,請參閱週宮官方網站拯救人民夢想的詳細解釋。夢想著敵人被拯救出來
2022愛方向和生日是在[質量個性]中

2022愛方向和生日是在[質量個性]中

[救生員]有人說,在出生88天之前,胎兒已經知道哪天的出生,如何有優質的個性,將走在什麼樣的愛情之旅,將與生活生活有什么生活。今天
夢想切割剪裁

夢想切割剪裁

夢想切割剪裁什麼意思?你夢想切你的手是好的嗎?夢想切割手工切割手有一個真正的影響和反應,也有夢想的主觀想像力。請參閱官方網站夢想的細節,以削減手
夢想著親人死了

夢想著親人死了

夢想著親人死了什麼意思?你夢想夢想你的親人死嗎?夢想有一個現實的影響和反應,還有夢想的主觀想像力,請參閱夢想世界夢想死亡的親屬的詳細解釋
夢想搶劫

夢想搶劫

夢想搶劫什麼意思?你夢想搶劫嗎?夢想著搶劫有一個現實的影響和反應,也有夢想的主觀想像力,請參閱週恭吉夢官方網站的詳細解釋。夢想搶劫
夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂什麼意思?你夢想缺乏異常藥物嗎?夢想缺乏現實世界的影響和現實,還有夢想的主觀想像,請看官方網站的夢想組織缺乏異常藥物。我覺得有些東西缺失了