這種產生異常強密碼的繁瑣策略是否有效?
我正在寫一些東西,有人想為文件設置一個可笑的強密碼,但要確保他總是能夠重建它。我的想法可能有點麻煩,但只要它有效且有意義,我就很滿意。首先,我將解釋我的角色是如何獲得他的密碼的,然後是我遇到的問題。
密碼派生
我的角色將從描述只有他知道的事情的句子開始。然後他將對其進行轉換,使其對任何人都不會像一個句子(刪除空格,在隨機位置用數字或符號替換字母,用發音相似的音節替換音節,隨機大寫等)導致我們’將呼叫基本密碼。
對這種安全級別不滿意,他想通過加密算法執行基本密碼一定次數來生成更高熵的密碼。有非常微妙的提示會提醒他需要使用什麼算法和密鑰,以及基本密碼需要執行多少次。最終結果是文件密碼。(他不需要經常打開文件,所以當他確實需要打開文件時,不必費心費力。)
我使用 Twofish 進行了測試,並通過它執行了幾次基本密碼。我得到了這個東西:
rvXRimTU7jhLxCZCe+9hCafIj/5nwZ4eK4pDJOxi5+8yulVzG6h61bZBIK5E2fCcHiG65HaoybnhH9/2l2VnGjWiqH44Snr9iSGInq0vwApJUAalYMJRDwXNQh2yOr6yRtqA+CtWZrbCu86IGjLy6NB5C75ko3khsz342JW94Uj7GrZDZWKee3M2KB3O76QbXtVB8EiBhuvoHeeEOvskeJdw5qAfPw42j4aQdAdcfc6Qo1cHIh20piWy8xrnvywViXM1tpEFBezbPXHBFjCUp1vFJAFf/vDl9SMA7pD7B190jZxQHpltAJeQXJxwAoM64fvxGTNx/Cieo4s+WHnCTA==
問題和問題
- 對我來說,生成的文件密碼看起來足夠高熵了。除非攻擊者能夠猜出原始句子,它是如何變成基本密碼的,並獲得揭示用於加密它的算法的提示,否則我懷疑任何人都可以暴力破解該文件。是的,他們可以用扳手敲擊角色,直到他透露如何獲取文件密碼之類的東西,但我們不在乎。我們只關心文件密碼是否高熵。你們同意它是高熵嗎?
- 我使用線上工具進行測試,這時我被提醒加密算法經常使用“鹽”來使結果每次都不同,即使您使用相同的密鑰加密相同的數據。顯然,這是一個問題,因為如果使用了鹽,那麼我們的角色將永遠不會再獲得相同的密碼。鹽是在 Twofish 中增加隨機性的唯一因素,還是我需要考慮其他因素?(我可以簡單地假設他正在使用一種排除所有隨機性的實現,並且總是從相同的基本密碼生成相同的文件密碼,前提是使用了正確的密鑰並且算法迭代了正確的次數。)
- 我很失望地看到,即使使用相同的設置和正確的密鑰,用於文本加密的不同線上工具也完全無法正確解密彼此的輸出。結果總是胡言亂語。這將是一個非常愚蠢的問題,但我想這取決於實現,如果我們有兩個實現 Twofish 的專業工具,他們應該能夠在正確的密鑰和相同的設置下解密彼此的輸出?(如果不是這種情況,故事中的其他人將永遠無法訪問加密文件。)
- 從安全的角度來看,我概述的方法是否合理?
這是一個廣泛的次優策略,因為它違反了Kerckhoffs 的原則:如果攻擊者對你所描述的步驟的了解和你一樣多,並且只缺少核心機密,那麼這些步驟中的大多數對於提高安全性都是無用的。秘密。
換句話說:您所描述的步驟實際上並沒有顯著增加熵。
聽起來這個案例取決於秘密持有者的“生存”——足夠活著和有意識,能夠始終從記憶中產生秘密?如果是這樣,最佳策略可能是:
- 最大化輸入的“可記憶”熵——一個隨機生成的密碼片語,以XKCD 936的風格記憶,使用事後圍繞它建構的助記敘述來幫助回憶——但熵更多(從一個20,000 個單詞或更多單詞的字典),以便即使使用弱/快速雜湊儲存也能抗暴力
- 最大限度地提高輸出的抗裂性- 真正的 KDF,如高工作因子 bcrypt 或經過良好調整的 scrypt(在其他地方得到了很好的覆蓋)。這些更好,因為*即使它們的算法是公共知識,*它們也具有抗破解性。
但實際上,由於您通常無法控制輸入的儲存方式(散列),所以這是真正重要的第一步 - 因為即使是弱散列也會保護強密碼。
如果您受限於使用內置在文件儲存格式中的 KDF,則第二步根本不適用 - 因為您將無法訪問 salt ,因為它會隱藏在文件的 hash中。因此,您必須將其儲存在某個地方,這將是脆弱的。
因此,對於您的案例,最好讓秘密(作為隨機密碼)完成工作。