我看过的每个地方,人们都建议通过加密存储密码就像以纯文本形式存储密码一样。但是我看过的每个地方,每个人都建议使用像 KeePass 这样的密码管理器。
我想我要问的真正问题是 KeePass 或其他密码管理器如何比以纯文本形式存储更安全?
我问的唯一原因是我正计划建立一个家庭服务器。我想最终实现一个在线密码管理器,它将通过 HTTPS 将密码发送到多个设备。这可能只是为了大便和咯咯笑。我不相信我所有密码上的蹩脚编码。但我仍然对 KeePass 如何做到这一点感兴趣。
我看过的每个地方,人们都建议通过加密存储密码就像以纯文本形式存储密码一样。但是我看过的每个地方,每个人都建议使用像 KeePass 这样的密码管理器。
我想我要问的真正问题是 KeePass 或其他密码管理器如何比以纯文本形式存储更安全?
我问的唯一原因是我正计划建立一个家庭服务器。我想最终实现一个在线密码管理器,它将通过 HTTPS 将密码发送到多个设备。这可能只是为了大便和咯咯笑。我不相信我所有密码上的蹩脚编码。但我仍然对 KeePass 如何做到这一点感兴趣。
上下文就是一切。
通过加密存储密码就像以纯文本形式存储密码。
这个建议是关于客户端程序实现一个虚假密码管理器,该管理器以加密格式存储访问在线服务的密码,因此您根本不必输入密码来访问该服务。这种加密没有实际意义,因为要允许零密码登录,密码管理器本身的解密密钥必须与加密密码本身一起存储,这给您带来的安全性不仅仅是存储纯文本。
另一方面,适当的密码管理器使用主密码加密您的密码(或者更常见的是,主密码加密用于加密数据的主密钥)。这是安全的,因为没有主密码您无法解锁密码管理器。这确实意味着每次密码管理器丢弃解密密钥时您都必须输入主密码(例如,绝对是在重新启动时以及密码管理器进程被杀死并且取决于设置,可能是在休眠、挂起/睡眠或屏幕关闭时) .
这里有一些不同的事情需要考虑。
1. 管理 Web 应用程序和身份验证的密码
您提到人们说“通过加密存储密码就像以纯文本形式存储密码”。我认为他们的意思(尽管我不知道“他们”是谁)是为了网站身份验证目的将密码存储在数据库中是一个可怕的想法,即使它们是加密的。我同意这一点。
对于任何网站来说,即使拥有人们密码的加密副本也是一个可怕的想法,因为它提供了一个可爱的目标。相反,您应该做的是实现一种单向散列算法,该算法接受我的密码 - “awfulpassword”,并始终将其变成相同的随机乱码,如“DF5A FL23 IA92 76S4 0K7S”。这样,您就有了一个字符串列表,例如引号中的字符串,并且没有密码可言。而且因为哈希就像制作香肠一样,你永远无法从碎牛肉中获得密码。但是,您可以始终如一地接受输入并根据哈希进行检查。如果你想实现这个,你还应该查找盐,它也增加了很多安全性。
2. 管理个人使用的密码
任何体面的密码管理器都比计划的密码文本存储安全得多。如果他们物有所值,他们需要密码才能解密,有时还需要密钥文件或其他验证才能解锁。如果您选择了一个好的密钥,这使得窃取您的密码变得非常困难。对恶意软件的担忧是合理的,但如果你有密钥记录恶意软件,你可能会被搞砸到就像有人奇迹般地破解了你的加密货币一样。TLDR:使用密码管理器。还有很多其他的好处。
关于家庭服务器注意 如果您不信任作为密码管理器的家庭服务器的代码,为什么不直接购买 USB 并在 USB 上安装密码管理器。您可以将密码文件复制到其中,然后在加密的 USB 中轻松访问所有密码。您也不必担心使用强密码丢失它,因为它是加密的。耶!
请在构建自己的故障服务器之前尝试keepass!
通常有两件事会影响任何安全性:
第二个是最明显的;攻击者越容易“破坏”安全性,您的安全性就越低。第一个也很重要;如果您的安全性阻止您做您拥有该系统的事情,那么它是没有意义的,但这通常是相反的压力,因为如果这样做会使它变得毫无意义,您无法关闭系统的可能使用来保护它。
现在,我们来看两种密码存储场景:
这两种情况在两个标准上都不同:
在第一种情况下,不需要找回密码本身;我们只需要能够确定登录时传递给我们的密码与其匹配。
在秒场景中,我们需要能够自己检索实际密码。
使用基于主密码的可逆加密,攻击者必须获取密码存储并破坏加密或获取主密码。
如果解密本身是在与密码检查相同的服务器上完成的,那么在任何情况下,如果攻击者获得了对密码文件的访问权限,他们也很可能获得了对存储主密码的任何位置的访问权限,而这可能例如需要反编译一些代码或其他东西,他们拥有读取密码所需的一切。
如果解密是在用户知道主密码的情况下进行的,那么获取密码存储不会使您更有可能获得主密码,因为那只是在用户的记忆中。
因此,为 KeePass 和其他商店(PasswordSafe、LastPass 等)的用途加密密码既不提供比实际需要更多的功能(与验证不同,检索密码本身毫无意义),也不提供一样弱。
他们还可以通过不让具有存储副本的计算机作为 24/7 服务器运行而再次获得更高的安全性,在那里它们可以在已知位置 24/7 受到攻击,尽管如果您使用云存储或存储密码存储的存储库。
KeePass 肯定不如在任何地方不存储任何密码安全,但几乎没有人能够像d@HTS9i7S@4amk.qx4,xve1Q+W.CkocPL/,XWbky每个单独的服务那样存储合理的密码。
拥有用于此类用途的加密密码存储会降低安全性,它带来的功能使我们能够避免更大程度的安全性降低。
在服务器上加密存储用于验证登录的密码会大大降低安全性(因为我们也必须降低密钥存储的安全性),这不会增加功能,除了一些本身的东西一个非常糟糕的主意(告诉用户他们的密码)。