我在 Keepass 网站上看到,Keepass 将密码加密保存在内存中。
那么保持 Keypass 窗口打开是否安全?
答案1
你为什么不读一下 Keepass 手册,然后自己决定呢?
在 KeePass 运行时,敏感数据(如主密钥的哈希值和输入密码)以加密形式存储在进程内存中。
这意味着即使您将 KeePass 进程内存转储到磁盘,也无法找到密码。
例如,当您将密码复制到剪贴板时,KeePass 首先解密密码字段,将其复制到剪贴板,然后立即使用随机密钥重新加密。
此外,当不再需要时,KeePass 会删除所有安全关键内存,即在释放这些内存区域之前覆盖它们(这适用于所有安全关键内存,而不仅仅是密码字段)。
KeePass ≥ 1.15 和 2.x 使用 Windows DPAPI 对敏感数据进行内存加密。使用 DPAPI,内存加密的密钥存储在由 Windows 管理的安全、不可交换的内存区域中。如果 DPAPI 不可用或被禁用(高级 KeePass 选项,默认情况下启用使用 DPAPI),KeePass 将使用带有随机密钥的 ARC4 加密算法。请注意,这不如 DPAPI 安全,主要不是因为 ARC4 在加密上不那么强大,而是因为内存加密的密钥也存储在可交换的进程内存中。
答案2
好吧,如果你非常在意保护你的密码,以至于愿意使用 keepass,那么我不推荐它。安全性取决于它最薄弱的环节。除非你已注销并处于非公共场所,否则我不会推荐它。
答案3
取决于是否有人可以访问您的计算机。当然,如果您不在时锁定计算机,我认为不会有问题。
答案4
假设您的设备上有恶意软件,试图扫描主内存以查找您的敏感数据,不幸的是,答案是否定的。
Keepass 提供一些 防范这种威胁. 诚然尽力而为在内存中保护您的密码(但不是您的用户名等):
在 KeePass 运行时,敏感数据会以加密形式存储在进程内存中。这意味着,即使您将 KeePass 进程内存转储到磁盘,也找不到任何敏感数据。出于性能原因,进程内存保护仅适用于敏感数据;这里的敏感数据包括主密钥和输入密码,但不包括用户名、注释和文件附件。请注意,这与数据库文件的加密无关;在数据库文件中,所有数据(包括用户名等)都经过加密。
此外,当不再需要时,KeePass 会删除所有安全关键内存(如果可能),即在释放这些内存区域之前覆盖它们。
对于某些操作,KeePass 必须在进程内存中以未加密的形式提供敏感数据。例如,为了在 Windows 提供的标准列表视图控件中显示密码,KeePass 必须将单元格内容(密码)作为未加密字符串提供(除非启用了使用星号隐藏)。导致进程内存中未加密数据的操作包括但不限于:在标准控件中显示数据(非星号)、搜索数据、替换占位符(在自动输入、拖放、复制到剪贴板期间...)、导入/导出文件(KDBX 除外)以及加载/保存未加密文件。Windows 和 .NET 可能会复制数据(在进程内存中),而 KeePass 无法删除这些数据。
2019 年学习链接于Reddit(使用 KeePass 2.40)演示了密码如何以未加密的形式留在内存中。这仅适用于您在打开的会话中与之交互的密码,而不适用于主密码。显然,在锁定或解锁状态下,此问题的安全性没有区别。(显然,如果您将设备解锁且无人看管,锁定状态仍会阻止人们使用您的 Keepass 文件。)他们得出结论:
最终用户应一如既往地采用最佳安全做法来限制对抗活动的暴露,例如:
(...)
- 即使处于锁定状态,在不使用时也要完全关闭密码管理器(如果使用的密码管理器在处于锁定运行状态时不能正确清理机密)
但是,只有当您的设备上有恶意软件时才会构成威胁。因此,恶意软件也可能
- 在您打开 Keepass 的几秒钟内窃取您的敏感数据。
- 是一个键盘记录器。尽管 Keepass提供一些针对键盘记录器的保护,我不确定这是否适用于主密码。如果不适用,您仍然可以使用额外的主密钥文件来缓解此问题。
因此,问题仍然是尽快关闭(而不仅仅是锁定!)Keepass 的习惯在实践中真正提供了多少额外的安全性。
作为在安全性和便利性之间权衡的一种想法,您可以使用两个 Keepass 文件:一个尽快关闭,用于存储超敏感数据,如电子邮件登录信息、银行登录信息、加密资产密钥等;另一个长期打开,用于存储不太敏感的数据,如留言板登录信息等。
免责声明:我不是安全专家,只是一名专业的软件开发人员。