“最強密碼”
我有一個受四位數 PIN 保護的應用程序,用戶在帳戶被鎖定之前嘗試了五次登錄。
現在,我的一個客戶想要“加強”安全性並提倡另一種解決方案:
- 六位密碼
- 沒有“彼此相鄰的相同數字”:例如:11 3945 或 39 55 94
- NO“三連號”:例如:123 654 或 53 789 3
現在問題是:哪個解決方案最強?
我可以很容易地計算出四位數,但我如何計算另一位數呢?
謝謝!
更新
你得到你想要的 - 特別是在使用數學時:)
所以,我要的是兩個數字序列的組合數量。
閱讀答案和評論後,我清楚地知道這並不重要。如果您有 5 次猜測,那麼您是否有 10.000 或 ~800.000 可供選擇並不重要。更重要的是排除 1234 和出生日期。在我的情況下,我實際上有用戶出生日,所以我有一些東西要檢查。
感謝您的精彩討論!
您已向統計學家論壇尋求有關此問題的幫助,因此我將提供基於統計的答案。因此,可以合理地假設您對隨機猜測 PIN 的概率感興趣(對於隨機的一些定義),但這比提供的問題更多地閱讀問題。
我的方法是在沒有限制的情況下枚舉所有可能的選項,然後減去 void 選項。然而,這有一個尖角,稱為包含-排除原則,它對應於你不想從一組中減去兩次相同的東西的直觀想法!
在沒有限制的六位 PIN 和十進制數字系統中,有可能的組合,從到每個數字有 10 個選項。
考慮一下“兩個相鄰的、相同的”數字是什麼樣子的:,其中標記的位置是一樣的可以是任何十進制數字。現在考慮字符串還有多少其他方式可以排列成六位數:,,, 和. 因此,對於任何特定的排序(其中一個選項),至少有組合,因為有數字沒有限制。現在,有多少選擇在那裡?我們正在使用十進制數字,所以必須有 10。所以有特定順序的選擇。有五個這樣的排序,所以有滿足這個定義的安排。(這在安全性方面意味著什麼,可以通過信息論測量來衡量這會減少多少 PIN 空間的熵。)
現在考慮連續數字的樣子。在字符串中,如果我們知道A,我們也知道B和C*:如果A是5,那麼B是6,C是7。所以我們可以枚舉這些選項:
- 012XXX
- 123XXX
- 234XXX
- 456XXX
- 789XXX
目前還不清楚是否有“環繞”。如果有,我們還包括
- 890XXX
- 901XXX
每個解決方案都有關聯的組合,由與上述相同的推理。因此,只需計算必須有多少解決方案。請記住計算替代排序,例如
現在我們到了尖角,這就是包含-排除原則。我們已將所有六位數 PIN 的集合分為三組:
A. 允許的 PIN B. 由於“相鄰數字”而無效 PIN C. 由於“連續數字”而無效 PIN
但還有一個微妙之處,那就是有一些 6 位數字可以分配給兩者和. 所以如果我們計算我們兩次減去這些數字,我們的答案是不正確的。正確的計算是在哪裡是兩者中的元素集和. 所以我們必須確定一個數字有多少種方式可以同時落在兩者中和.
有幾種方式可以發生這種情況:
- 等等。因此,您還必須為此制定一個系統的方法,以及一種跟踪替代排序的方法。使用我在上面應用的相同邏輯,這應該很容易處理,即使有點乏味。請記住,可能有多少種替代方法可以同時滿足 B 和 C。
稍微高級一點的方法會利用基本的組合結果和計數的基本定理,但我選擇了這種方法,因為它給讀者帶來的技術負擔最小。
現在,要使這成為一個結構良好的概率問題,我們必須對每種排列都有一些概率度量。在天真的攻擊假設中,人們可能會假設所有數字組合具有相等的概率。在這種情況下,隨機選擇組合的概率為但是,如果這是您最想阻止的那種攻擊,那麼建議的一組標準顯然會削弱系統,因為某些組合是被禁止的,所以只有愚蠢的攻擊者會嘗試它們。我把剩下的練習留給讀者。
“五直到鎖定”的皺紋顯然可以更好地防止未經授權的訪問,因為在 4 位或 6 位方案中,有非常多的選項,即使是五個不同的隨機猜測也有很低的成功的概率。對於一個合適的概率問題,可以計算這種攻擊成功的概率。
但數字序列概率以外的其他因素可能會影響 PIN 機制的安全性。主要是,人們往往不會隨意選擇 PIN!例如,有些人使用他們的出生日期或孩子的出生日期,或一些類似的與個人相關的號碼作為 PIN。如果攻擊者知道用戶的 DOB,那麼這可能是他們嘗試的第一件事。因此,對於特定用戶,某些組合可能比其他組合更有可能。
*您列出的序列是嚴格遞增的,當您說“三行數”時,不清楚是遞增還是遞減。