我正在写一个android密码管理器应用程序,我想存储主密码的某处,但我不知道在哪里。我是否应该使用我选择的硬编码密码对用户给予的主密码进行加密,然后将其存储到数据库中?还是我应该做点别的?哪里可以存储密码?
回答
你不应该存储未加密的密码。
对于密码,您无法安全地进行加密(因为您必须将解密密钥存储在某个地方),您应该只存储它的不可逆散列。
用这种方法,您可以在用户提供密码时将密码与散列进行比较。如果匹配,则可以使用给定的密码对存储的用户:密码对进行解密。
PS:不要忘记盐散列和please do it properly。
不,不,一千次没有。
如果您可以查看GPLv2代码,请查看KeePass源代码。
主密码变为密钥(基于密码的密钥派生),并且该密钥用于加密和解密单个数据片段(单个密码)。
因此,该过程与此类似: 1.关闭任何类型的交换到磁盘,您可以关闭。询问用户主密码。
转动主密码到内存中的仅主加密密钥,通过使用类似PBKDF2(HMAC-SHA-256,主密码,存储的随机盐*,2000000,256) - PBKDF2也称为RFC2898和PKCS#5。 HMAC-SHA-256是哈希函数。主密码是用户输入的任何内容 - 这绝不会以任何形式保存!存储的随机盐是一个64位或更大的加密随机值,只要选择一个新的主密码,就会生成一个随机值,并且保存而不是保存任何形式的主密码。 2000000是我们要运行HMAC的次数,它被存储并且应该是用户可选择的 - 这应该等于你可以忍受的等待的次数(KeePass有一个功能来对它们进行基准测试,看看有多少次需要1秒 - 我建议增加到4或5秒)。 256是所需输出的位数 - 在这种情况下,我假设您将使用CAMELLIA-256或AES-256来加密您的密码(只需匹配您的加密功能对密钥使用的位数) 。 是的,可以使用scrypt或bcrypt。
检查主密码是否正确:如果我们正在使用现有主密码进入现有数据库,请使用该内存中密钥来解密某些固定数据,如“默认”密码。如果值解密为您所期望的值,则输入的主密码正确,否则主密码错误和/或数据库已损坏。如果我们正在启动新数据库或更改主密码,请加密该“默认”密码并存储加密值。
使用主加密密钥来解密URL的用户名,备注和其他非密码数据。
使用主加密密钥仅根据用户的请求(但仅限用户请求的确切密码)对现有密码进行解密,然后一旦完成或定时器运行就用随机垃圾覆盖数据出。使用所述主加密密钥加密新密码。
一旦用户完成或定时器用完,用随机垃圾覆盖所有变量(尤其是内存中唯一的主加密密钥)。
注意你存储:
- 迭代
- 数盐
- 加密仅用于验证主密码是否正确
- 加密的用户名 “固定” 的密码, URL,笔记等
- 加密个人网站密码
你永远不会存储主密码或它的散列。您永远无法比较主密码,哈希值,甚至是生成的主加密密钥。您只需掌握主密码并将其转换为主密钥,然后使用该密钥对数据进行加密或解密 - 已知数据(“固定”密码)可让您查看该密钥是否提供了预期结果。当您知道主密码正确时,未知数据(用户输入和关注的所有内容)也会被加密或解密。
- 1. 运行时在哪里存储密码?
- 2. laravel密码盐在哪里存储?
- 3. Webmin在哪里存储根MySQL密码?
- 4. ModX Evolution:SMTP密码存储在哪里?
- 5. Netbeans 7在哪里存储FTP密码
- 6. Bitbucket - 在哪里可以找到存储库SSH密钥?
- 7. 存储强名密钥的密码在哪里?
- 8. 哪种编码用于存储可解密的密码?
- 9. git克隆密码在哪里存储或缓存?
- 10. Firefox在哪里存储保存的密码?
- 11. Firefox在哪里存储保存的密码?
- 12. 哪里可以放置代码配置永久存储迁移
- 13. SSL对称密钥存储在哪里?
- 14. SecKeyGeneratePair在哪里存储密钥对?
- 15. 哪里存储机密信息?
- 16. 要使用哪种加密算法以及在哪里存储密钥?
- 17. 即使我没有存储密码,程序是否可以存储密码?
- 18. 我在哪里可以找到Vigenere密码的Java源代码?
- 19. 哪里是最好的地方存储网站的密码salt?
- 20. 哪里存储rundeck ssh login的密码文件?
- 21. 在PHP中使用AES加密时,应该在哪里存储密码密钥?
- 22. Windows XP在哪里以及如何存储wep/wpa密钥?
- 23. 我应该在哪里以及如何存储租户数据库密码?
- 24. 哪里df.cache()存储
- 25. 哪里可以找到YouTube API密钥?
- 26. 在哪里存储jQuery的html代码?
- 27. 硬编码值存储在哪里?
- 28. Symfony2:在哪里存储代码颜色?
- 29. Sage在哪里存储代码?
- 30. svn在哪里存储项目代码?
密码管理器的整个想法不是存储主密码吗?您将个人密码与主密码一起存储为加密密钥。主密码永远不会被存储。 – Wolph 2011-04-10 13:43:53