Encryption

如何知道加密方法的類型

  • June 1, 2020

如果我有一個程序,它需要一個字元串給我密文,沒有任何儲存,使用相同的密鑰。密文是base64。我可以通過base64字元串中的字元數來確定加密類型嗎?

17個字元的字元串是真的嗎:

  • 16 字節 = MD5,
  • 20 字節 = SHA-1,
  • 24 字節 = 3/DES,
  • 32 字節 = AES?

如果這是真的,那麼按特定加密文本長度進行的每次加密的字節範圍是多少?

我是初學者,所以請告訴我是否有任何其他注意事項或提示…

密文應該與隨機無法區分。MD5 和 SHA1 等雜湊函式也是如此。但正如您已經發現的那樣,這僅適用於給定的輸出域:所有可能的密文或散列的集合。這取決於算法在輸出域中有多少變化:

  • 對於散列函式,輸出大小是散列函式定義的一部分,例如 SHA-1 為 160 位;
  • 對於 RSA - 非對稱密碼原語 - 密文在 0 和 N 之間,即所用密鑰的公共模數;
  • 對於 DES、三重 DES 和 AES,它們是塊密碼,輸出的大小正好是塊大小。

現在,如果我們關注分組密碼:分組密碼用於一種操作模式。沒有操作模式,AES 的輸出是不安全的;換句話說,AES 需要一種操作模式才能用作通用的安全密碼。

密文的大小取決於操作模式。例如,對於 CTR 模式,輸出與純文字大小相同 - 不需要填充。對於 CBC,需要某種填充,並且輸出始終是塊大小的倍數。


那麼,我們將何去何從?好吧,基本上我們不能從密文本身告訴我們那麼多。我們可以看出,密文肯定不是某種密碼的結果。

例如,6 字節密文不能是密碼散列函式的輸出,也不是 CBC 模式下 3DES 或 AES 的輸出。這意味著分析師在嘗試從特定集合中找到正確的算法時可以跳過這些算法。

另一方面,相同的 6 字節密文可以是 CTR 模式下 AES 或三重 DES 的結果。僅憑密文無法確定哪一個。


所以加密模式通常不能這樣確定。請注意,加密方法通常被認為是攻擊者已知的。使用密碼學的各方不將其視為秘密。

這被稱為Kerckhoffs 原理。這基本上是因為密碼學方法只是一個靜態的已知事實,是協議描述的一部分。隱藏密碼只會讓攻擊者的生活更加艱難。過去,依靠秘密密碼算法導致了巨大的失敗


請注意,對於您的問題,base 64 編碼實際上並不重要。您只需在分析密文之前反轉編碼。

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