密码管理器:加密数据库与散列策略

信息安全 密码 密码管理
2021-09-07 07:04:22

我正在考虑转向基于supergenpass或类似的密码管理策略。这是其他密码管理器的替代方案,在其他密码管理器中,您的任何单个站点的密码不是在您的主密钥上加密的密码数据库,而是您的主密钥 + 站点域名的哈希,例如,如果您的密钥是“hunter2” ,您的谷歌密码将是sha-256("hunter2google.com")据我所知,与传统密码管理器相比,优势在于:

  • 没有可能被发现和解密的加密数据库
  • 没有丢失数据库的风险,只要您知道您的主密钥和算法,您将始终可以访问您的所有密码
  • 跨设备共享数据库没有任何麻烦。该方案是分散的,您可以在多个设备上轻松使用它。

缺点是您正在与使用此方案登录的每个站点共享您的主密钥的盐分不佳的哈希值。但是,如果您的主密钥足够复杂,那么反转它的哈希是不可能的,对吧?

有什么我错过的吗?这两种密码管理策略之间是否存在更大的安全差异?

1个回答

正如@CodesInChaos 评论的那样,如果处理得当,加密数据库对暴力攻击的抵抗力至少与哈希值一样强。从这个角度来看,基于散列的方法并不更安全。但是,根据攻击模型,有一些细节:

  • 使用本地密码数据库,您可以使用随机的特定于站点的密码。如果一个站点是敌对的,那么它可能会知道您对该站点的密码,但这将使他无处可去,因为主密码(用于数据库加密)和您向该站点显示的密码之间没有实际的数学关系。另一方面,您一个本地数据库,您必须将其存储在某个地方(例如,在您的笔记本电脑中),如果攻击者窃取了该存储空间,那么他可以尝试离线字典攻击(即暴力破解您的主密码)。

  • 使用基于哈希的方法,根本没有数据库,因此笔记本电脑被盗场景不再威胁您密码的机密性。对于特定的攻击模型,基于散列的方法更胜一筹。但是,这也意味着每个特定于站点的密码都可用于对主密码进行离线字典攻击。所以这就是权衡:您剥夺了本地小偷攻击您的主密码的手段,但您正在为您注册的每个站点提供这种手段。

如果您的主密码足够强大(例如 80 位或更多的熵;使用适当的密码散列可能就足够了),那么字典攻击不起作用,并且两种方法都具有同等的安全性(即“无法通过暴力破解”)。

如果您的主密码不够强,那么我会倾向于使用数据库方法,因为确保单个笔记本电脑的物理安全看起来比确保我使用的每个站点都是诚实、有能力且不受敌对控制更容易。


至于可用性,可能会注意到基于散列的方法存在以下问题:

  • 每个目标站点只能获得一个密码。如果网站希望强制重置密码,并过滤掉重复使用相同密码的尝试,那么您就输了。

  • 所有网站都没有统一的要求。实际上并没有可以在每个站点上使用的密码,因为实际使用的长度和内容要求不兼容。例如,一些网站要求密码的最小长度为 10 个字符,而另一些网站则要求密码的最大长度为 8 个字符;对标点符号、数字的使用也有相互矛盾的要求……

这两个问题都可以通过跟踪特定于站点的密码要求以及可能的特定于站点的计数器或盐值来处理重置来轻松解决。但这意味着一个“数据库”,它使基于散列的方法的可用性优势无效。该数据库仅包含公共数据,因此无需加密,仅此而已。