2017-06-22 105 views
0

我最近已經瞭解到,要安全地存儲密碼,您應該使用緩慢的加密哈希函數和salt,並在一些服務器中存儲哈希密碼和salt。離線android應用程序的密碼保護

但是,我應該如何爲離線應用程序安全地存儲密碼?我擔心,如果某人拿到了用戶手機,他們可以根據手機獲取存儲所有敏感信息的文件,並獲取用於散列的散列或鹽,或者只用自己的散列密碼替換散列的密碼散列密碼。是否有任何技巧可以部署,使我的離線應用程序的密碼更安全地存儲?

編輯:只是爲了澄清,我更感興趣的是保護用戶密碼,而不是通過應用程序進入。

+0

哈希密碼,並將其存儲在您的SQLite dB,一切都很好。即使有人得到哈希密碼,對他們來說也沒用,如果他們忍受不了,那麼他們將無法在你的應用中使用密碼 –

+0

只使用哈希函數是不夠的,只是添加鹽很少提高安全性。相反,用隨機鹽迭代HMAC約100ms持續時間,然後用散列表保存鹽。使用諸如'PBKDF2','Rfc2898DeriveBytes','password_hash','Bcrypt'或類似函數的函數。關鍵是要讓攻擊者花費大量時間通過強力查找密碼。 – zaph

+0

@zaph是的,這就是我所說的慢加密散列函數。我擔心,如果他們得到了鹽(因爲我必須將它存儲在電話中),他們可能會使用字典式攻擊,並附加salt以在合理的時間範圍內獲取密碼,或者這不是問題? – AMVaddictionist

回答

0

散列密碼通常存儲在服務器上,因爲這是明文密碼被散列並與存儲的散列進行比較的地方。您不傳輸哈希密碼。

如果您關心保護手機上的數據,則無需以任何形式將密碼存儲在任何位置。使用密碼作爲種子生成加密密鑰。每當用戶想要訪問數據時,讓他們輸入密碼並使用相同的算法重新生成密鑰。

+0

但我仍然需要將生成的加密密鑰存儲在電話的某個地方嗎?所以我可以比較重新生成的密鑰和首先生成的密鑰。這真的比存儲散列更安全嗎?假設我正確地理解了你。 – AMVaddictionist

+0

@AMVaddictionist您不需要將密碼或由其生成的加密密鑰與任何內容進行比較。只需嘗試解密您的數據。如果解密工作正常,您將知道密碼是正確的,即如果解密數據的格式符合您的預期。 –

+0

我不明白,我應該解密什麼?我不認爲你的意思是我應該解密加密密鑰。你是說我應該生成一個密鑰,然後使用該密鑰來加密密碼?我應該把這個加密值存儲在某個地方,如果不是,我該怎麼處理它?所以當用戶輸入密碼時會生成一個新密鑰,如果我用新生成的密鑰解密存儲的加密值並獲得正確的密碼,我應該允許輸入? – AMVaddictionist