沒有安全隨機數可以加密嗎?
我所知道的所有滿足 Kerckhoffs 原理的加密算法都依賴於安全隨機數生成。假設存在能夠完美預測任何隨機數生成器結果的“數字預言機”,那麼符合 Kerckhoff 的算法是否可能?
所有安全密碼術都需要一個秘密密鑰,它可以是一個對稱的共享秘密,也可以是一個帶有秘密私鑰的非對稱密鑰對。問題是如果沒有安全的隨機數來源,你如何獲得秘密。請注意,隨機數的自然來源不依賴於密碼學來保證其安全性,但問題是預言機可以預測任何 RNG,包括預測放射性衰變和宇宙射線,以及我正在考慮的數字。這是一個令人印象深刻的神諭。如果沒有初始秘密,並且我們為創建初始秘密所做的任何事情都可以被預言機檢測到,那麼攻擊者可以檢測到合法使用者可以執行的任何操作。秘密是我們如何區分合法使用者和攻擊者,假設攻擊者不知道秘密。
正如 Meir Maor 所指出的,生成攻擊者無法猜到的加密密鑰必然需要一些隨機性。但是,如果您擁有密鑰,則大多數現代加密實際上都可以安全地完成,而無需任何額外的隨機性。
特別是,大多數現代對稱密鑰認證加密方案只要求每條消息都用nonce標記。雖然這個 nonce 值可以隨機選擇,但唯一真正的要求是,對於使用相同密鑰加密的每條消息,它必須是唯一的。因此,完全有可能使案例如順序消息 ID 或什至足夠高解析度的時間戳作為 nonce。
此外,甚至有一些方案,例如SIV 模式,即使在沒有隨機數的情況下使用也能提供近乎完美的認證加密。唯一這樣的“確定性認證加密”方案洩漏(除了消息長度,所有通用加密方案都在某種程度上揭示)是使用相同密鑰和相同關聯元數據加密的兩條消息是否完全相同。
對於公鑰加密,對隨機性的需求更為關鍵。例如,如果使用公鑰加密消息而不以任何方式對其進行隨機化,那麼攻擊者可以簡單地猜測消息的可能值,使用相同的公鑰以相同的方式對其進行加密,並將結果與看到他們匹配。
但是,只要加密系統的每個使用者都有自己的一些(不一定是共享的)秘密密鑰,潛在的攻擊者不知道,他們就可以使用它來播種加密偽隨機數生成器,並使用其輸出作為替代真正的隨機性。只要生成器是安全的,並且足夠小心以確保其輸出永遠不會被重用,這在實踐中與真正的隨機性一樣好。