Encryption

有沒有辦法從公共資訊中生成聲音一次性墊子?

  • August 29, 2018

有沒有辦法“破壞”公共數據源(例如,YYYYMMDD 中的目前日期或紐約時報的頭條新聞)以形成一個一次性便箋簿,從而充分隱藏便箋簿的來源?這樣的計劃還會遇到哪些其他問題?

免責聲明:我不是密碼專家,我只是對此事感興趣——我不打算實施這個密碼系統。

非常簡短的回答:否

非常簡短的回答:不,因為如果整個填充完全隨機且秘密,則方案只能是一次性填充。

簡潔的答案:聽起來您正在嘗試建構流密碼。它的安全性實際上取決於您認為可以保密多少計劃。如果我監聽你的 wifi 並聽到你請求某個資源,那麼我可以計算出你的數據源是什麼,自己計算 pad 並解密你的數據。這往往很糟糕!


完整答案:任何“類似於”一次性便箋 ( OTP ) 的方案都分為兩個部分:首先我們形成一個便箋簿,然後我們將便箋簿與明文結合起來。其中第二個往往是通過 xor 操作(表示 $ \oplus $ ),但這對於這個問題並不重要。

所以,第一部分:生成一個 pad。對於OTP,我們假設 pad 是完全隨機且秘密的。如果是這樣,那麼該方案是完全安全的。然而,這意味著我們必須以某種方式將大量秘密資訊傳輸給其他人,然後才能將消息發送給他們,這在大多數情況下只是意味著我們將密鑰分發的難題傳遞到上游。

那麼,我們如何解決這個問題呢?我們取一個更容易分發的小密鑰,並用每個相關人員都知道的方法對其進行擴展,形成流密碼。這是一個試圖將一個小密鑰擴展為一個適當大的密鑰流來填充消息的函式,我們對它有一些非常嚴格的要求。特別是,我們要求密鑰流看起來是隨機的。也就是說,即使看到大量密鑰流的人也不應該能夠將其與真正的隨機數據區分開來(在“合理的”計算工作範圍內)。如果他們無法將其與隨機數據區分開來,我們認為輸出密文足夠安全。

在我嘗試將事情整合在一起之前,我想向您指出Kerckhoffs 的原則。基本上,對於現代世界中任何真正的安全級別,我們要求加密算法應該是安全的,即使攻擊者知道除了密鑰之外的所有資訊。請注意,“密鑰”是一個模糊的概念——人們可以在任何他們喜歡的地方很好地繪製算法密鑰邊界——但良好的做法是說密鑰應該盡可能小(例如 algorithm=RandomAccessMachineSimulator;key=MyCryptoAlgorithm)而不影響算法的安全性。

那麼,您的情況如何?好吧,將大量不是很隨機的數據變成一小部分“相當隨機”的數據是一個問題

$$ extracting the entropy $$$$ Note 5 $$. 一種天真的方法是簡單地通過PBKDF2之類的密鑰派生函式來抽取所有輸入數據,但我不會詳細介紹這一點,主要是因為有一個更大的問題:你有什麼秘密? -保持整個算法的秘密:如果你想對攻擊者保密,那麼你如何告訴你正在發送消息的人如何解密它?不知何故,您必須私下向您的盟友提供所有必需的詳細資訊。不過,在這一點上,為什麼不給他們一個 AES 密鑰,然後您可以使用它進行安全通信呢?-數據源是秘密的: 這個有點意思。所有“繁瑣”的電腦位(例如熵提取)都可以不安全地交換(例如電子郵件),然後您將數據源(URL?)秘密發送給他們。但是,(假設由於某種原因這次我們不能只發送密鑰)任何監聽您的 HTTP 請求的人都會聽到所有載入的 URL,並且通過測試每個 URL 將非常有效地找到您的密鑰。 $$ Note 5 $$- 是否已經在某處對此進行了很好的描述?

引用自:https://crypto.stackexchange.com/questions/12744