如何安全地存储我的密码?

信息安全 密码管理 客户端
2021-08-14 14:44:00

关于这一点: 密码在内存中吗?
那么有人对如何安全地存储我的密码有一个好主意吗?的:“passwords.txt”-> ctrl+c;ctrl+va passw 不是很安全。
我有各个地方的密码,它们是很长的随机字符,变化太频繁。
是否有任何好的密码管理器应用程序可以安全地显示存储在其中的密码?(例如:真的可以保护我不让“坏人”从记忆中获取密码吗?)

4个回答

如果你的“偏执拨号”一直调到 11,简短的回答是“否”。

无论您如何存储您的密码,在某些时候,内存中都会有一个传输,它是某个身份验证器的明文表示。该“明文”可能是您的 ASCII 密码,也可能是密码的哈希值,但仍足以独立验证您向收件人提供的凭据。这是因为身份验证器必须以其自然形式输入,然后系统才能对其进行散列或加密处理。

如果您担心的是 rootkit、恶意调试器和类似的攻击,那么没有任何密码管理或存储方法可以保证您的安全。

唯一真正缓解此漏洞的方法是对所有内容进行双因素身份验证,其中一个因素是某种动态元素(即:RSA 令牌或“回调”身份验证)这样,无论从您的内存中捕获了哪些静态元素,攻击者都无法在没有动态身份验证器的情况下重复使用您的凭据。

当然,会话劫持之类的旁道攻击还是有可能的,但是这些都超出了这个问题的范围。

对于保护您的密码的更实用的方法,这将涵盖大多数可防御的漏洞,您最好使用安全的密码管理器,例如 KeePass 或其他类似的工具。

您好,有很多密码管理器可以满足您的需求。

一个流行的选项是KeePass,它是免费的,并且还具有适用于几个平台(Windows 手机、IOS、Android)的应用程序的优势。

首先,让我们正确看待问题:密码太破旧了,无法沉迷到这种程度。如果密码丢失是无法容忍的,那么您可能一开始就不应该使用密码 - 考虑使用一次性密码、两因素身份验证、基于证书的方案或类似的方法。

毕竟,迟早您必须将密码输入您必须信任的某些客户端(甚至可能不是您控制的计算机,可能是键盘记录)。有人可能会看到您输入了密码。不仅如此,您的密码几乎肯定也会被处理并存储在一个完全超出您控制范围的目标系统中——如果您像大多数人一样跨系统重复使用密码,则可能不止一个。几乎可以肯定,所涉及的所有存储都比受您物理控制的受信任设备中的 RAM 更容易受到攻击和破坏。

因此,无论您做什么,您的密码都应被视为基本一次性的,并且不太可能长期保密。

话虽如此,密码不会很快消失,所以要么使用一些你自己能记住的密码(例如,有几个不同的密码或密码短语,并将它们用于不同价值的网站),要么使用密码管理器或密码生成器/管理器。

完全重写:AviD 的观点得到了很好的理解——第一版是用于服务器上的密码存储,而不是用于将密码存储在客户端上的用户。这是尝试#2。

如果您要存储各种站点的密码,您的应用程序将需要: - 安全地存储它们 - 准确地检索它们

所以你不能只是给密码加盐,你需要一个可以加密它们的系统。这表明您可能希望研究符合 FIPS 140-2 的应用程序。FIPS 有 4 个级别,但都侧重于具有密钥存储功能的加密设备,这些功能提供各种升级的安全功能。最低端是可以在 SW 库中实施的基本良好实践,最高端是成本高昂但对系统自我保护能力充满信心的设备。对于普通人,我认为 FIPS 1 或 2(低水平)就足够了。

您可以使用符合 FIPS 的库编写自己的应用程序(如果您碰巧是 Java 极客,NSS 就是其中之一),或者在其加密实现中寻找声称符合 FIPS 的应用程序。

无论您如何存储密码,您最终都需要某种密钥来解密它们。这意味着您将遇到经典的先有鸡还是先有蛋的问题 - 如何安全地存储密钥以确保密码安全?鉴于您将大量密码分组在一个位置,因此您增加了对密钥存储的安全要求。我的想法是要么记住密钥,要么将其存储在离线存储中。