Passwords

密碼自動生成的建議

  • January 3, 2020

我正在創建一個具有確定期限的密鑰訪問權限的程序。我製作了一個程式碼,它將生成一個長度為 16 個字元的密鑰(密碼)。以下資訊被編碼:

  • 初始日期 6 個字元,例如。010120;
  • term 最多 3 個字元長度,例如。1 天或 10 天或 365 天;
  • 術語長度標識符,例如。1 或 2 或 3,取決於術語編號長度;
  • 6 個隨機生成的符號:小寫/大寫字母和數字。這些字元通過某種邏輯分散在密碼字元串中(由密碼驗證碼解碼)。

編碼只是基於符號的 ASCII 碼。

編碼字母範例:abcdef = ASCII 碼 126 + 127 + 128 + 129 + 130 + 131 = 771 = 7 + 7 + 1 = 15。15 是控制和。因此生成一個密鑰,我的程式碼通過隨機程式碼 ASCII 循環,直到控制和等於 15 - 這是密碼的生成字母部分。該控制和用於驗證密碼是否正確。簡單地通過在 ASCII 數字程式碼(48 到 57)中添加一個常數值來對日期的數字進行編碼以獲得一個字母。

以下是鍵範例(使用另一個控制和):

3Y6CEecb0MYc1e1c, oPFjeefcAD8m2dmd, bF5bGfdb4dud2ejd, ClEigfdbydcd2ezd

我的問題是關於這個密碼的“強度”:它被黑客攻擊的難易程度,或者發現日期和術語部分的難易程度?

只有隨機生成的組件對密碼/密碼片語很重要。

6 個隨機生成的符號:小寫/大寫字母和數字。

你有 26+26+10 個可能的字元,所以 62。

密碼的熵是 $ L\log_{2}N $ , 在哪裡 $ N $ 是可能的符號數,並且 $ L $ 是密碼中的符號數。所以你有了 $ 6\log_{2}62=35 $ 一點點的熵。您希望至少 80 被認為是相當強的。

這是可笑的弱。出於所有實際目的,它是一個 6 個字元的字母數字密碼。

你應該預料到攻擊者遲早會知道你的算法,無論你構造它有多複雜。當安全性不取決於算法的保密性,而是取決於數據的保密性時,安全性更可靠。這種方法被稱為Kerckhoffs 原理

如果我們將此原理應用於您的情況,我們應該期望攻擊者可以計算出密碼中除了6 個隨機生成的符號之外的所有字元。這就是為什麼您的密碼與 6 個隨機符號一樣強,大約是 $ 10^9 $ 組合或 35 位資訊。

暴力破解這些需要多少時間 $ 10^9 $ 組合?這取決於。

如果您的密碼用於 ZIP 加密,則只需不到 1 小時(這裡是2011 年的統計數據,在單個 GPU 上,在 2011 年可以在約 30 分鐘內破解您的密碼,現在甚至更快)。

如果您的密碼用於使用者身份驗證:如果您使用密碼拉伸,那麼您可以減慢暴力破解的速度。但是你不能隨意地慢。假設您在每台伺服器上每秒有 1000 個使用者登錄。如果登錄時間超過 1 秒,使用者將不會接受。意味著,密碼拉伸不應花費超過 0.001 秒的時間。手段,蠻力 $ 10^9 $ 黑客需要的密碼 $ 10^9 * 0.001 = 10^6 $ 秒 =台電腦上的 28 小時。這意味著黑客不需要在 100 或 1000 台電腦的網路/集群中進行並行計算。一個人可以在短時間內在一台家用電腦上完成此操作。

如果你想防止簡單的暴力破解,你需要更長的密碼。多久?這取決於您通過密碼保護什麼。如果這是訪問當地保齡球俱樂部的網站,那麼可能是妥協的手段,危害不大。那麼即使這 6 個字元也足夠了。如果這是訪問網上銀行,那麼後果可能會更嚴重,並且您希望為此目的使用更長的密碼。你提到了16個字元。使所有這 16 個字元隨機

如果您想將一些附加資訊與密碼相關聯(如到期日期),請將其作為密碼數據庫中的單獨屬性。

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