熔岩燈如何幫助實現網際網路加密?

我們都知道軟體世界中的隨機並不是真正的隨機,而是偽隨機。

所以我們產生隨機數值時,都會需要設定 seed 值,相同的 seed 值會產生相同的結果,例如下列 Python 程式碼,不管執行幾次都會產生相同的隨機數值:

import random

random.seed(10)
print(random.random())

p.s. Python 的 seed 值預設使用的是 current system time

上述的 random.seed(10) 就是設定 seed 值,相同作用的函式在各種程式語言都有對應的函式,所以這是 1 個所有程式語言都有的問題。

這個設定 seed 值的問題看似微不足道,但其實影響相當重大。

簡單來說,只要有人能猜中你的 seed 值,那麼你所謂的「隨機」,就不再是隨機。

因為隨機代表著不可預測,如果可以預測,就不是隨機。

現代網際網路相當依賴加密通訊,加密的過程中會用到的金鑰又依賴「隨機」這個重要的機制,所以 seed 值的隨機性特別重要!

所以針對加密相關工作所需要的隨機數值,會使用 1 種稱為加密安全偽隨機數字產生器(CSPRNG)的技術,這個技術使用多種資料作為產生 seed 值的來源,譬如可能使用滑鼠移動、鍵盤輸入、硬碟讀寫時間等等多種來源,這些被都稱為硬體雜訊,用以確保 seed 值擁有不可預測性,進而保證產生的隨機數值無法被預測。

而 Cloudflare 用了另 1 個有趣的方法—「熔岩燈牆」,用以創造 seed 值的隨機性。

lava-lamps.jpg

具體來說,就是一大片牆上面擺著一大堆熔岩燈,這片熔岩燈牆每時每刻都在變化,這片燈牆所呈現的畫面也就有著不可預測性,我們很難預測下 1 秒的熔岩燈牆畫面長什麼樣子,加上燈牆前面經常有人來來往往,又增添額外的不可預測性。

然後,Cloudflare 利用 Webcam 定期拍下燈牆畫面,並將影像轉為一連串的隨機數值,作為 seed 值的來源之一,以保證每個加密金鑰的產生具備隨機性與不可預測性。

這個真實故事真的很有趣!有興趣的人可以閱讀「熔岩燈如何幫助實現網際網路加密?」。

Facebook Threads X

對抗久坐職業傷害

研究指出每天增加 2 小時坐著的時間,會增加大腸癌、心臟疾病、肺癌的風險,也造成肩頸、腰背疼痛等常見問題。

然而對抗這些問題,卻只需要工作時定期休息跟伸展身體即可!

你想輕鬆改變現狀嗎?試試看我們的 PomodoRoll 番茄鐘吧! PomodoRoll 番茄鐘會根據你所設定的專注時間,定期建議你 1 項辦公族適用的伸展運動,幫助你打敗久坐所帶來的傷害!

贊助我們的創作

看完這篇文章了嗎? 休息一下,喝杯咖啡吧!

如果你覺得 MyApollo 有讓你獲得實用的資訊,希望能看到更多的技術分享,邀請你贊助我們一杯咖啡,讓我們有更多的動力與精力繼續提供高品質的文章,感謝你的支持!