Cloudflare 將 100 盞熔岩燈的相片轉換為隨機資料,以用於 SSL 加密。
閱讀本文後,您將能夠:
複製文章連結
隨機性對於安全加密非常重要。電腦用來加密資料的每個新金鑰都必須真正隨機,以使攻擊者無法找出金鑰並解密資料。但是,電腦設計為基於給定的輸入提供可預測的邏輯輸出,無法產生建立不可預測加密金鑰所需的隨機資料。
要生成增強式加密所需要的不可預測的雜亂資料,電腦必須具有隨機資料來源。不過,「現實世界」是隨機性的絕佳來源,因為實際世界中的事件是不可預測的。
正如大家期望的那樣,熔岩燈始終是隨機的。熔岩燈中的「熔岩」永遠不會再次出現相同的形狀,因此,觀察一組熔岩燈是獲取隨機資料的不錯來源。
為了收集這一資料,Cloudflare 在 Cloudflare 總部大廳的一面牆壁上安排了大約 100 盞熔岩燈,並且安裝了一台朝向這些熔岩燈的相機。相機以固定間隔拍攝熔岩燈的相片,並將影像傳送到 Cloudflare 伺服器。實際上,所有數位影像實際上都由電腦儲存為一系列數位,每個像素有其自己的數值,因此每一張影像都會變成一串完全隨機的數位,Cloudflare 伺服器可以其為起點來建立安全加密金鑰。
因此,在熔岩燈的幫助下,Cloudflare 能夠向客戶提供極強的(並且足夠隨機的)SSL/TLS 加密。考慮到超過數百萬網際網路內容使用了 Cloudflare,這一點尤其重要。
在密碼學中,隨機並不僅意味著統計上隨機,也意味著不可預測。
加密的資料看起來應該像完全隨機的資料,因為可預測的資料是能被猜到的。如果存在某種模式,例如特定的值用於加密的頻率高於其他值,或者值始終以一定的順序出現,那麼數學分析能夠挑選出這種模式,從而使攻擊者更容易地猜測到加密所用的金鑰。基本而言,如果加密資料可以預測,那麼它或許已遭到入侵。
加密過程本身是可預測的過程:加密後的資料加上正確的金鑰等於解密後的資料,而且解密後的資料與加密之前的資料相同。但是,使用的加密金鑰必須不可預測。
為瞭解為什麼不可預測性為何如此重要,我們可以想像兩位撲克牌玩家:Bob 總是在有好牌時加注,牌不好時則棄牌(拒絕跟注)。Alice則混合使用下注策略,因此沒有明顯的模式:有時在牌好時加注,有時滿足於跟注,有時甚至會在牌不好時大量加注來詐牌。如果 Alice 和 Bob 參加同一屆撲克牌錦標賽,Alice 的存活時間要比 Bob 更長,因為 Bob 太容易預測。對手很快就會知道 Bob 什麼時候有好牌,並做出應對。即使看不到他的牌,他們也可以大致分辨出他手裡的牌。
同樣,即使攻擊者看不到透過網路傳送的「牌」(或者說加密的內容),但如果隱匿內容的方法太容易預測,他們仍然可以猜測到。
電腦基於邏輯執行。電腦程式基於 if-then 陳述式:如果滿足某些條件,則執行指定的動作。如果程式的輸入相同,那麼每次都會產生相同的輸出。
這是設計使然。輸入應導致預期的輸出,而不是意外的輸出。想像一下,如果印表機列印出與文件中文字不同的隨機內容,或者智慧型手機呼叫的電話號碼與使用者輸入的不同,那就混亂不堪了。電腦的用處正是源於它的(相對)可靠性和可預測性。但是,在產生安全加密金鑰時,這種可預測性成為了不利因素。
有些電腦程式擅長模擬隨機性,但對建立加密金鑰來說仍然不夠。
一種稱為偽隨機數字產生器 (PRNG) 的軟體程式能夠獲取不可預測的輸入,並用它來產生不可預測的輸出。從理論上講,PRNG 可以從一個隨機輸入產生無限數量的隨機輸出。
這種演算法之所以稱為「偽隨機」而非「隨機」,是因為它的輸出實際上並不是完全隨機的。為何會如此?主要有兩個原因:
由於第 2 個原因,該演算法不斷需要新的隨機輸入。隨機輸入稱為「密碼種子」。
加密安全偽隨機數字產生器 (CSPRNG) 是滿足更嚴格標準的 PRNG,能夠更安全地用於加密。CSPRNG 滿足 PRNG 不一定滿足的兩個要求:
如同 PRNG 一樣,CSPRNG 需要以隨機資料(密碼種子)為起點,從中產生更多隨機資料。
為了產生用於 SSL/TLS 加密的加密金鑰,Cloudflare 使用 CSPRNG,並將從熔岩燈收集的資料作為密碼種子的一部分。
密碼種子是 CSPRNG 用於產生隨機資料的起點資料。儘管從理論上講 CSPRNG 可以從單個密碼種子產生無限的隨機輸出,但是定期更新密碼種子要安全得多。攻擊者最終可能會攻破初始的密碼種子。另請記住,如果被提供相同的種子,CSPRNG 會再次產生完全相同的輸出,因此攻擊者可以複製隨機輸出。此外,即使是經過最嚴格測試的 CSPRNG,也無法保證無限期產生不可預測的結果。
透過使用熔岩燈,Cloudflare 可以不斷獲得新的密碼種子資料。相機拍攝到的每張熔岩燈照片都是不同的,從而能產生可用作種子的不同隨機數值序列。
許多作業系統都有自己的隨機資料來源用作密碼種子,例如來自使用者動作(滑鼠移動、鍵盤輸入等),儘管它們獲取資料的速度相對較慢。Cloudflare 將獲取自熔岩燈的隨機資料與 Linux 作業系統在兩台不同機器上產生的資料混合在一起,以便在為 SSL/TLS 加密建立加密種子時最大化熵。
一般而言,「熵」表示無序或混亂。但是,熵在密碼學中有一個特定的含義:它指的是不可預測性。密碼學家實際上根據熵的位元數來衡量給定資料集具有熵的大小。因此,Cloudflare 將熔岩燈牆稱為「熵牆」。
因為熔岩燈牆位於 Cloudflare 總部繁忙的大廳中,所以這種情況一直存在。人們在大廳裡進進出出,走過這些熔岩燈或在燈前面停下來聊天。這樣的障礙物成為相機拍攝的隨機性的一部分,因此,部分遮擋相機對熔岩燈視野的人實際上有助於產生熵。
如果發生這種情況,Cloudflare 仍然可以從 Cloudflare 伺服器上執行的 Linux 作業系統中獲得另外兩個隨機來源。此外,Cloudflare 可以輕鬆對相機進行實際存取,因為它位於 Cloudflare 擁有的空間內,並且 Cloudflare 也可快速將其重新開機或根據需要進行更換。
Cloudflare 的另外兩個主要辦事處分別在倫敦和新加坡,並且每個辦事處各自都有從現實世界輸入中產生隨機資料的方法。倫敦辦事處從安裝的雙擺系統拍照(擺錘與擺錘相連,其運動在數學上不可預測);新加坡辦事處則測量鈾顆粒(足夠小以至無害)的放射性衰變。
出乎意料,並不是。一家名為 Silicon Graphics 的公司在 1996 年設計了一個類似的系統,稱為「Lavarand」,儘管其專利已過期。
如需瞭解有關 Cloudflare 熔岩燈牆的更多資訊,請閱讀以下兩篇部落格文章: