雜湊函式和一次性密碼一樣安全?
我們知道一次性密本可作為加密某些數據的密碼被證明是安全的。是否有與雜湊函式相同的算法?我們能得到一個可證明安全的雜湊函式嗎?也許有一些荒謬的屬性,比如一次性便箋得到了它們(真的很大的密鑰長度,完全隨機的密鑰)?
是否存在“理論上完美”的雜湊函式,即使它不切實際?
是的。
“隨機函式預言機”通常用於描述密碼攻擊,作為一種不切實際但理論上理想的散列函式。(一) (二)
64位隨機函式oracle的一種實現:
- 任何人都可以在卡片上寫下任何文字並將其交給 Carole——一個 oracle (c)的字謎——然後等待她的回應。
- 如果 Carole 的文件中還沒有確切的文本,Carole 會翻轉 64 美分來獲得一個新的隨機數,並將該 64 位數字寫在卡片的背面。然後卡羅爾複製了那個號碼。
- 如果 Carole 在她的檔案中已經有了確切的文本,她會撕毀並扔掉新卡(背面是空白的),並複制舊卡背面的號碼。
- Carole 將卡片(正面是她剛剛得到的文本,背面是 64 位數字)歸檔在她的文件中,以備日後檢索。
- 卡羅爾將複製的號碼交還給最初給她發簡訊的人。
- Carole 不允許除她自己以外的任何人偷看她的文件。
- Carole 從不告訴任何人她看到的簡訊——她只分發號碼,並且只分發給剛剛給她的簡訊與該號碼相關的簡訊的人。
- Carole 甚至沒有透露這是否是一個新生成的新號碼,或者是否有人已經提供了這個確切的文本,而這是她的文件中已經附加到該舊文本的號碼的另一個副本。
(“隨機置換預言機”通常用於描述密碼攻擊,作為一種不切實際但理論上理想的分組密碼。“隨機置換預言機”可以從“隨機函式預言機”建構。(d)。)
OTP 需要 1) 隨機密鑰材料,只要要加密的消息 2) 不得重複使用密鑰材料或任何部分,永遠 3) 通信者之間密鑰材料的安全傳輸 4) 任何人都不會知道任何密鑰材料。即便如此,OTP 也只能保證沒有其他加密會更難破解。並不是說消息永遠無法恢復。
隨機——出於加密目的,隨機非常非常困難,也非常非常棘手。我們不知道該怎麼做,儘管我們認為有些方案非常好。有很多測試,但非隨機的方法比測試多得多。
不重複使用——重複使用使 OTP 變得毫無價值。俄羅斯人在二戰中做了一些重用,而 NSA 最終能夠讀取一些使用重用密鑰材料加密的流量。參見維諾納項目。
安全傳輸——沒有人解決了節點之間任意長的材料的安全傳輸。有施樂機器,磁碟複印機,拇指驅動複印機,……加上盜竊(有時可以被掩蓋,讓發件人做出非常糟糕和完全不安全的假設),
永遠不會暴露關鍵材料——這需要在未來對材料的安全性進行一定程度的故障安全控制。人類與這種事情並不完全兼容。
但是,良好的雜湊算法(我們不確定我們的任何算法是否足夠好,記錄不佳)可以聲稱在輸入合適的輸入時產生不可預測的(因此是隨機的)字元串。可悲的是,它們是確定性的。提供雜湊算法 abcd… 不止一次,您將得到相同的雜湊。這意味著雜湊算法的不可預測性取決於其輸入的不可預測性。不是好事,人就是人。但是,如果您使用一些 CSRNG 作為輸入,為什麼還要使用雜湊算法呢?如果 CSRNG 有缺陷,那麼您生成的散列的隨機性也會有缺陷。
但即使你愚蠢地揮手解決了這些問題,幾乎所有的雜湊算法都會產生一個較短的位串。比如說,128 位,或 256 位,或類似的。因此,您可以發送一條消息,使用其中一個雜湊作為 OTP 密鑰材料,長度為 128 或 256 位。
我不會在實踐中打擾,也不會為了理論研究而用十英尺的桿子觸摸它。太多的偶然性,太依賴於任何人無法控制的事情,……