加密密碼長度 aes-256-cbc
我正在使用敏感資訊加密文件
cat secret | openssl aes-256-cbc -a -salt > secret.enc
我正在選擇一個隨機加密密碼
openssl rand -base64 32 | head -c [password-length]
有什麼標準嗎,應該多長?給定密碼長度,破解和查看文件內容需要多長時間?
我讀過這篇文章,但它似乎假設您使用 256 位的密碼大小。
編輯:我找到了這張照片,它幾乎回答了我的問題。它可靠嗎?
https://www.inetsolution.com/blog/june-2012/complex-passwords-harder-to-crack,-but-it-may-not
假設您使用了一個字母表中的 128 個字元(這是一個大字母表)。要創建密鑰,您需要大約 37 個完全隨機字元來創建 256 位強度的 AES 密鑰。即使您會創建這樣的密碼,您也很難將其編碼到所需的位數。您也可以使用 44 個字元的基本 64 字元串或 64 個字元的十六進製字元串 - 至少這些將很容易解碼/編碼到/從字節。一般來說,人們不使用那種密碼。
這就是使用 bcrypt 或 PBKDF2 等基於密碼的密鑰派生功能的原因。這些使用鹽和工作因子(或 PBKDF2 的迭代計數)來加強密碼。儘管還不夠完美,但它們允許您相對安全地使用密碼。
一般來說,您應該查找基於密碼的加密或 PBE。例如,這是在 PKCS#5 標準(定義 PBKDF2)中指定的。
預設的 OpenSSL 實現使用名為
EVP_BytesToKey
. 它使用 8 字節鹽和設置為 1 的“迭代計數”。由於不存在的工作因素,如果您想獲得如此高級別的安全性,最好指定所有 37 個字元。最後,您最好使案例如 PGP 公鑰/私鑰加密。128 位的安全性通常就足夠了;您的密碼被洩露的可能性比任何擁有量子電腦的人試圖破解您的文件的可能性要大得多。
AES 支持三種密鑰長度。它們的長度分別為 128、192 和 256 位。您選擇使用在CBC 模式下執行的 256 位算法。這是一個正確的選擇。
現在你需要的是:
- 密鑰 - 256 位長
- 初始化向量 - 128 位長
您可以使用我在此處找到的命令生成它們:
openssl enc -aes-256-cbc -k secret -P -md sha1
其中“秘密”是您的密碼。
我建議不要使用真正隨機的密鑰和 IV,因為您必須將它們保存在某個地方,而對手可以從您的硬碟驅動器中讀取它。最好使用一個長而復雜的密碼,他必須從粘在您顯示器上的便利貼中讀取該密碼,並從中獲取密鑰和 IV。
至於安全性,我這樣說吧。如果我想在我的工作筆記型電腦上破解 256 位長的密鑰和 128 位長的 IV,我可能會在宇宙崩潰時完成大約五分之一的工作。在這種情況下使用橡膠軟管密碼分析要簡單得多。
編輯:
只是為了讓您知道您不應該直接使用密碼作為密鑰。您需要從密碼中派生密鑰。我粘貼的命令正是這樣做的。關於您自己已經回答的密碼的安全性。9 個字元是絕對最小值(如果至少有一個大寫字母、一個小寫字母、一個數字和一個符號)。但我強烈建議使用密碼片語而不是密碼。他們很容易受到字典黑客的攻擊,但如果你使用足夠多的單詞,字典黑客也需要數年時間才能完成。
英語中有超過一百萬個單詞。
如果我們在四個單詞的密碼片語中只使用小寫字母,那麼字典破解必須在最壞的情況下進行 $ 1000000^{4} = 10^{24} $ 搜尋。相比之下,鍵盤上大約有 100 個字元。其中12個字元的密碼將在不到 $ 100^{12} = 10^{24} $ 搜尋。
這意味著“唱收回的第十一象”相當於一個12個字元的密碼,而且更容易記住。如果我們在某處使用逗號、大寫字母或使用不同語言的單詞,它會變得更加安全。