多次使用同乙個一次性密碼本的破解

2021-12-29 20:57:35 字數 895 閱讀 3175

正確地使用一次性密碼本進行加密,在理論上是無法破解的。需要注意的是,許多對稱式加密演算法本質上是通過一定的演算法來將金鑰作為偽隨機數發生器的種子來產生(近似於)一次性密碼本的序列,因此類似的問題也需要予以重視:不要重複使用同乙個一次性密碼本(或金鑰)來加密不同的明文資料。

以基本的一次性密碼本加密演算法,即按位元組做xor 來看,由於在這個演算法中明文和密文的位元組位置是一一對應的,很明顯,同乙個位置的兩份密文之間做xor,可以知道兩份明文之間的xor 值(因為在這個過程中,金鑰k 被xor 消去了)。

假如明文碰巧又沒有做任何壓縮處理,實際上我們可以用程式來窮舉出部分的密碼本,並逐步解出全部明文。具體方法大致如下:

首先是嘗試初步地破解。明文如果是英文的話,出現空格或e的可能性非常地高。對於每一條明文的同乙個位置的內容,假定明文內容是空格,可以得到金鑰可能是 密文xor 0x20,然後用這個可能的金鑰去解其它的密文。假如解出來的明文都是字母、數字、標點或空格的話,則說明這個金鑰很可能就是真正的金鑰。用程式可以迅速對此作出判斷。

接下來是找一組常見的英文單詞。通常來說,the, to, then 這樣的單詞出現的頻率非常高,因此,以它們作為突破口。以the 為例,加上前後的空格,一共是5個字元。用窮舉的方法去搜尋每乙個密文串來解出可能的金鑰,然後再用這個金鑰嘗試解密其它密文在同一位置的字串。如果解密出來的字串看起來都像是英文(這裡可以設定比較嚴苛的條件,例如只允許出現大小寫字母、標點和數字),則記下金鑰的位置和內容。反覆搜尋高頻詞,就可以恢復相當一部分明文的內容。

接下來,根據已知的明文內容去猜測可能的未知明文內容,並使用猜測的內容去嘗試算出可能的金鑰解密其它密文資料。

一些想法:

不要反覆使用同乙個一次性密碼本,或者同乙個對稱金鑰;

加密之前應先做壓縮;

類似全盤加密這樣的應用,密文也是需要保護的

一次性密碼本

一 什麼是一次性密碼本 只要通過暴力破解法對金鑰空間進行遍歷,無論是什麼密文總有一天都能夠被破譯,然而,一次性密碼本是個例外。即使用暴力破解法遍歷整個金鑰空間,一次性密碼本也絕對無法被破解。二 一次性密碼本的加密 三 一次性密碼本的解密 四 一次性密碼本是無法破譯的 我們假設對一次性密碼本的密文嘗試...

密碼學第三講 對稱密碼(XOR與一次性密碼本)

計算機的操作物件並不是文字,而是由0和1排列而成的位元序列。無論是文字,影象,還是程式,都是由位元序列來表示的。加密就是將表示明文的位元序列轉換為表示密文的位元序列。xor全稱為exclusiveor,中文叫異或。舉例 0 xor 0 0 0 xor 1 1 1 xor 0 1 1 xor 1 0 ...

如何測試乙個一次性水杯

測試專案 杯子 需求測試 檢視杯子使用說明書 介面測試 檢視杯子外觀 功能度 用水杯裝水看漏不漏 水能不能被喝到 安全性 杯子有沒有毒或細菌 抗破壞性 杯子從不同高度落下的損壞程度 可移植性 杯子再不同的地方 溫度等環境下是否都可以正常使用 相容性 杯子是否能夠容納果汁 白水 酒精 汽油等 易用性 ...