可能有些開發者聽說過CloudFlare辦公室裡的熔巖燈,這些熔巖燈持續工作多年,主要工作內容就是亮著,CloudFlare會定時拍攝照片然後生成哈希值作為隨機數生成器的種子。熔巖燈雖然一直亮著它們在細節方面是不停變化的,CloudFlare要的就是這種變化(熵),這樣取得的隨機數安全性更高。
當然標題中說的真正的隨機數其實不準確,因為 CloudFlare 最終也是將哈希作為種子放到加密安全偽隨機數生成器 (CSPRNG) 中生成數據的,隻不過這種處理方式可以提供更強大的安全性。
為什麼要不停地生成隨機數:
CloudFlare 的服務器每秒需要處理超過 5500 萬個 HTTP 請求,其中絕大多數請求是通過 TLS 協議進行保護的,以確保真實性和機密性。
在幕後,像 TLS 這樣的加密協議需要安全隨機性的底層來源,否則安全保證就會崩潰。
密碼學中使用的安全隨機性在計算上需要與 “真正的” 隨機性取法區分,為此,它必須通過統計隨機性測試,並且輸出對於任何計算有限的對手來說都是不可預測的。
實現這個目的的典型方法就是獲取一些隨機種子並將其放到 CSPRNG 中,該生成器可以根據請求生成本質上無限的、不可預測的字節流。
CloudFlare 的種子:
在以前 CloudFlare 的種子主要是舊金山辦公室裡的熔巖燈,其原理是定時對這組熔巖燈進行拍照,然後對圖片計算哈希值,將這個哈希值作為種子放到 CSPRNG 中。
對 CloudFlare 來說這組熔巖燈產生的不停變化的照片就是熵源,該公司需要確保服務器可以定期從外部源獲得真正的隨機性刷新其熵池,而熔巖燈的在不停變化,所以它們具有真正的隨機性。
新增的熵源:
為給熵池增加更多熵源,CloudFlare 在全球幾個辦公室增加一些基於物理學的熵系統,這些系統可以直觀地認為就是隨機的。
例如在倫敦辦公室有一堵雙擺墻,這些雙擺在無規則的擺動中會在墻上投下不停變換的陰影,攝像機定時拍攝照片傳遞到服務器中,服務器計算哈希值後放到熵池中。
在奧斯汀的辦公室裡也有一個熵源,在辦公室入口懸掛大量半透明的彩片,同理,在辦公室開門、關門、空調開關、環境光變化都會讓整個背景發生發生變化,因此這也可以認為是隨機的。
在 CloudFlare 這種隨機系統名為 LavaRand,如果你是開發者對 LavaRand 有興趣的話,可以點擊這裡查看博客:https://blog.cloudflare.com/harnessing-office-chaos