如何確保產生真正的隨機數?Cloudflare公佈公司內部最新的熵源
或許有些開發者聽說過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