2016-07-07 32 views
1

在這裏尋找理論上的討論。我個人會(並將繼續)使用GPG或SCP來簡單地將某個文件放在某處,只有我可以解密它或者只能下載它。仍然討論以下哪些不足(以及多少)會有助於我的好奇心。一次性襯墊通過'口令'種子'

假設我想在本地加密一個文件,把它放在因特網上,並且能夠稍後抓取它。我想確保只有擁有特定密碼/短語的人才能解密文件......而且我堅持要合併一次性文件。

假設它只用於加密一次信息,如果有人使用非常隨機的密碼(例如Diceware)以可重現的方式播種該pad,這是否會成爲問題?在Python中,我會做類似random.seed("hurt coaster lemon swab lincoln")的東西,然後生成我的墊。我會使用相同的種子進行加密和解密。

關於Mersenne Twister RNG如何不適用於安全/加密目的,各地都有警告。我看到它有一段很長的時間,而且IIUC,random.seed允許我選擇16字節的不同種子(Python: where is random.random() seeded?)。

我聽說OTP中的數字應該是「真正的隨機數」,但即使有人看到了我的墊子的前100個字符,那麼多少能幫助他們確定我的種子RNG是(希望解碼其餘的)?我想他們可以通過從每個可能的隨機種子產生墊子並且看到哪些符合我的前100個隨機字母來蠻力。不過,還有不少隨機種子可以嘗試,對吧?

那麼,這有多危險?是否有一種合理的方法通過查看一點點序列來找出普通RNG產生的序列的種子?

回答

3

按照定義,一次性鍵盤的鍵是與明文大小相同的真隨機數據。如果您以其他方式製作它(例如,播種PRNG),它不是一次性的墊子,並且它沒有一次性墊子的不可破壞性。

一次性墊實際上是stream cipher的特殊類型。還有其他流密碼,是的,如果使用得當,它們可以相當安全。但是流密碼也可以完全不可靠不安全如果使用不正確,並且您基於非加密PRNG組成自己的密碼的想法從一開始就是不恰當的用法。

即使攻擊者擁有無限的計算能力,當密鑰必須是不可能時,使用一次性密碼蠻力。根據你的描述,你只是在尋找不可行的讓任何逼真的攻擊者蠻橫,這就是其他任何體面的密碼會給你的東西。除非你保護核啓動代碼或什麼,這就是你所需要的。

忘記人造OTP和梅森難題的想法,只是使用類似AES,喜歡的東西bcryptscrypt派生從你的密碼的關鍵。


關於你提到的有關確定RNG的序列具體問題:Mersenne twister's internal state can be determined by observing 2496 bytes of its output.而在流密碼,很容易確定給出的明文和密文的密鑰流。這意味着如果攻擊者擁有密文並可以確定明文的前2496個字節,他就知道RNG狀態,並可以用它來產生密鑰流的其餘部分並解密整個消息。

2496字節對於蠻力是不可行的,但是一個複雜的攻擊者可能能夠使用關於明文內容的智能猜測來顯着縮小可能性,比如你可能寫了些什麼,或者什麼文件格式可能存在的數據以及這些文件格式的已知結構。這就是所謂的cribbing,並且可以提供足夠的起點,使剩餘的強力攻擊變得可行。

更好的是,如果攻擊者可以誘騙你進入incorporating some specific content into your plaintext。然後他甚至不必猜測。

+0

即便如此,俗話說「如果您在代碼中輸入字母AES,您就錯了」,只需在對稱模式下使用gpg即可 –