2016-07-24 110 views
0

我正在爲學校編碼密碼管理器,我想知道我應該改進或改變什麼。 這是如何工作的:密碼管理器安全

要保存主密碼,我創建了一個文件,密碼與PBKDF2 512bytes output密碼散列在SHA3-512之上。使用隨機128byte鹽和隨機數的迭代(這是問題的重點)。 所有這些數據都保存在文件中,並使用僞隨機生成器進行加密,該生成器從密碼本身生成種子(這種方法更難獲得鹽)。

然後存儲密碼的文件使用AES 256進行加密,鹽由用戶PC僞唯一標識符生成。

當用戶選擇密碼時,要求是:最低10個字符,而不是成爲100.000最常用的密碼列表(我在互聯網上得到了這個名單的地方,可能已過時)

好吧,我有問題,它們是:PBKDF2的當前標準迭代計數是多少? 是PBKDF2輸出字節長度重要嗎?我的意思是更多的長度=更安全?

而且會更長的鹽給我額外的安全性?

它保存在文件中的鹽因此它是「可能」檢索它,有沒有更好的方法來「隱藏」它,而不是隻是加擾字節?

+0

re:迭代計數:我通常在野外看到5k-20k,但是非固定計數是更好的。也許把第一個字母的ascii值加到count中,這樣像john the ripper這樣的東西就有93倍的難度。 – dandavis

回答

2

PBKDF2的當前標準迭代計數是多少?

有沒有。迭代計數未在標準文檔中指定。儘可能多地使用,而不會讓用戶煩惱。請記住,這通常是通過設置一個目標時間(對於實際硬件)來確定的,例如0.1秒到2秒,然後嘗試多次迭代計數以更接近該標記(如果不使用二進制搜索沒有可以放棄的日誌記錄的PBKDF2實現)。

當然,你不應該自己定義迭代次數,而應該讓用戶定義它(Keepass就是這樣做的)。它基本上是一個目標時間的基準。

迭代次數是PBKDF2中安全性的主要驅動因素,並且基本上是攻擊者的減速,前提是您不要求更多的輸出即底層哈希函數的輸出大小。

PBKDF2是輸出字節長度重要嗎?我的意思是更多的長度=更安全?

是的,它很重要,但只能達到一個點。如果輸出很小(比如說64位),那麼發現一個衝突(一些輸入散列到同一個輸出)比一個128位輸出的散列更容易找到。這就是爲什麼現在不應該使用短散列函數的原因。任何輸出256位的東西都可以。請注意,SHA-512可以在SHA-256的64位平臺上運行得更快。

而且會更長的鹽給我額外的安全性?

不,鹽是在那裏區分多次使用相同的密碼或密鑰。使用相同的 salt可以使竊取密碼數據庫的攻擊者同時暴力破解所有用戶的密碼,而不是一個接一個地破解密碼。有一個64位或128位鹽足以防止彩虹表的生成(但大量迭代計數基本上需要照顧)。

只有當您認爲攻擊者可以同時對用戶的多個密碼容器執行離線強力攻擊(因此可以事先分配給多個用戶計算機)時,纔有相關性。

鹽其保存在該文件,因此它的「可能」進行檢索,是 有沒有更好的方式來「隱藏」它不僅僅是加擾字節?

不,鹽不應該是祕密的。它的唯一目的是甚至是輸出的隨機化,尤其是當使用相同的密碼時。簡單地從一個好的隨機源生成一個隨機鹽並按原樣存儲它。當然,如果您使用經過身份驗證的加密(AES-GCM或類似的),那麼您應該將鹽作爲附加的驗證數據傳遞以檢測(惡意)操作。


有用的資源:pbkdf-2標籤上Cryptography