Hybrid-Encryption

在密碼學中是否存在偽裝未加密文本之類的東西?

  • June 7, 2018

只是想知道:我的系統上目前有 TrueCrypt(我知道對其滲透性存在各種疑問,並且它不再處於開發中)。TC“卷”顯然由字節組成。

在我看來,解密必須始終依賴於能夠辨識出您已設法獲得未加密的文本。但是假設在 1000 個字節的文本中,然後被加密,其中只有大約 40 個實際上包含資訊(例如密碼),而所有其他 960 個字節都只是垃圾。然後您將其加密為 1000 字節的 TC 卷?

此外,您可以讓您想要隱藏的 40 個字元實際上由 7 位 ASCII 字元組成,但是您將它們分佈在 40 * 7 / 8 = 35 個 8 位字節上?那麼第一個 8 位字節包含第一個 7 位字節的所有 7 位,以及下一個 7 位字節的第 1 位,等等?

在我看來,在這種情況下,解密應用程序永遠無法辨識它實際上已經到達了已加密的隱藏文本。

更一般地說,解密程序如何知道它們已成功破解加密?

我的問題與引用的問題有何不同

我不認為我的問題與那個問題完全相同,因為我不是在問“雙重”加密,這顯然只需要更強大的計算能力。

我也不應該提到 TrueCrypt 或在 8 位文本中偽裝 7 位文本的業務。這太具體了。TC 在某個位置包含“TRUE”這個詞的事實實際上讓我有些笑:我不知道。此外,許多此類應用程序可能“隨機”填充“隨機”零這一事實也讓我發笑。是否可以不根據其優點來考慮這個問題,而不是指出某些現有應用程序的不足之處,這些應用程序與我所提出的觀點並不密切相關?

我想要得到的是:鑑於密碼(或銀行帳號)或任何資訊項可能包含一個完全無法區分的字節序列,我的意思是與隨機生成的序列完全無法區分,如何你能知道(即人類密碼學家或解密應用程序)你找到了正確的解密方法嗎?

例如,在 Enigma 密碼破譯者的案例中,他們之所以能夠破譯密碼,是因為他們正在尋找並發現顯然包含各種模式的人類語言。如果德國人只相互交流過數字(我不是指與“密碼字”相對應的數字),他們本可以這樣做,而且破解密碼是不可能的。這在二戰中對他們有多大用處是另一回事。但是,出於某些目的,您所需要的只是傳達一個數字。

如果您嘗試加密一個不包含任何類型辨識模式的特定數字,那麼解密如何知道它找到了解釋這些(加密)字節的正確方法?

因此,我對“偽裝”一詞的使用:如果您的未加密文本不包含任何模式或贈品指示,可以將其與隨機字節序列區分開來,那麼潛在的解密者(人類或其他人)如何確定解密的結果是實際上被加密的字節序列?

為了澄清:我在這個問題中指的是密鑰不需要隨消息一起傳播的加密情況。

PS JimmyB 在他對另一個問題的回答中談到了我想知道的問題。但即使是他也假設最終會有某種潛在的“明文”,一旦被發現,由於某種模式,這些明文將是可辨識的。

…任何資訊項都可能由一系列字節組成,這些字節序列與隨機生成的序列完全無法區分,我的意思是完全無法區分

潛在的解密者(人類或其他人)如何確定解密的結果是實際上已加密的字節序列?

假設您的意思是非法解密器,例如不應該訪問密鑰的對手……(如果不是這種情況,那麼Luis Casillas 的答案更合適)。

如果字節序列實際上用於某事,那麼可能存在一個說明密碼/密碼/等是否有效的預言。

例如,如果您嘗試以這種方式隱藏密碼,則在每次猜測密鑰並恢復候選明文時,攻擊者可以嘗試將明文的所有可能子字元串作為相關服務的密碼。登錄伺服器充當預言機,在密碼錯誤時輸出失敗,在密碼正確時輸出成功,這意味著破解密鑰失敗/成功。

如果真正隨機明文本身就是加密密鑰/MAC 密鑰/PRNG 種子/等,則存在類似技術。

如果明文不用於任何事情怎麼辦?

這似乎是一個人為的例子;如果它們不被用作某種加密方案的保密來源,那麼儲存真正隨機的數據字元串有什麼案例?

在那種極不可能的情況下,不,沒有算法預言可以驗證所討論的字元串是否有效或只是隨機垃圾。

但是,即使在您保留寵物隨機字元串的情況下,其存在除了讓您感到舒適之外沒有其他目的,確實存在一種物理技術,可以為對手提供恢復您的字元串的能力。它不是很昂貴,而且執行起來需要很少的複雜性

在旁邊

這些點或多或少無關緊要。通過蠻力“破解密鑰”對於任何有能力的密碼方案來說都不是現實的威脅。如果您使用的設置是暴力破解密鑰是一個現實問題,那麼很有可能有更簡單的方法來破壞該方案。

即使對於由以有效方式組裝的強大組件組成的方案,許多(如果不是大多數方案)都可以通過猜測使用者密碼而不是暴力破解密鑰來破解。

為什麼要在人類(或機器)可能的情況下加密您尚未首先嘗試消除各種模式的純文字?

因為密碼的責任是確保密文與隨機密文無法區分,並且已知(和選擇的)明文無助於恢復密鑰。實現這些目標不是明文的責任,而是明文的工作是傳達預期的資訊。可以明確設計密碼以滿足這些目標。將責任放在明文而不是密碼上註定要失敗。

您可以使用諸如 AES 之類的算法對您想要的任何明文進行多次加密*,它不會幫助對手發現密鑰或了解有關明文的更多資訊。

我的部分建議是明文越多可以限制在沒有“模式”的數據中……

為了完全減少模式的數量,您只能加密真正的隨機字節。真正的隨機字節不能用作純文字消息。明文消息必須具有某種模式/結構才能有用並有意義。

…越安全,這肯定會使加密文件

這是不正確的;僅當您使用經典密碼時才適用。

現代密碼被明確設計為不僅在對手知道整個明文時是安全的,而且即使在對手可以選擇明文送出給加密算法時也是如此。在使用現代加密算法時,明文的知識和結構對對手沒有任何好處。

*在不失去安全遊戲的情況下,您可以執行此操作的次數在技術上(非常)有很大限制,但就本答案而言,它實際上是無限的。

在我看來,解密必須始終依賴於能夠辨識出您已設法獲得未加密的文本。

21 世紀對這個問題的回答是,密碼學家已經選擇了經過身份驗證的加密——它不僅保證了消息的機密性,而且保證了它們的真實性——作為預設推薦的實用加密形式。經過身份驗證的加密算法必須滿足以下要求,即作為解密過程的一部分,它們必須證明他們正在恢復的明文是真實的,否則會失敗(並且通常不會洩露不真實的明文)。

但是,即使我們將注意力限制在老式的、僅保密的算法上,您關於解密必須能夠“辨識”明文的說法也是錯誤的,至少在我讀到的情況下:它必須對它的解密狀態來判斷它是否完成了解密過程,否則必須繼續。但不,這不是它的工作原理。加密和解密算法通常只是固定的步驟序列,它們盲目地打亂它們的輸入,而不考慮它們的內容。您可以從密文中恢復明文這一事實僅由解密函式作為加密操作的數學逆來保證。

我想要得到的是:鑑於密碼(或銀行帳號)或任何資訊項可能包含一個完全無法區分的字節序列,我的意思是與隨機生成的序列完全無法區分,如何你能知道(即人類密碼學家或解密應用程序)你找到了正確的解密方法嗎?

任何一個:

  1. 您正在使用經過身份驗證的加密算法,在這種情況下,如果解密成功,則可以保證您獲得正確的明文;
  2. 您沒有使用經過身份驗證的加密算法,在這種情況下,只有當您可以保證提供了正確的密文和密鑰時,才能保證您得到正確的明文。

第 2 點僅意味著未經身份驗證的密碼甚至不會嘗試解決該潛在問題;他們把它留給他們的使用者來處理。

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