这种无保险库密码管理器/生成器设计安全吗?

信息安全 密码 密码管理 hmac
2021-08-14 22:35:46

显示密码生成的流程图

柜台

如果您需要获取站点的新密码或者生成的密码不安全,因为它随机匹配“password1”之类的内容,计数器会附加到站点名称并递增(请参阅质量保证)

基地 89

哪里Base 89像 Hex 只是一个字母表0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"$%&/{}()[]=\+*~'#-_.:,;|而不是0123456789abcdef.

质量保证

质量保证会使用zxcvbn之类的东西来评估密码的安全性。如果它没有通过测试,则计数器递增并重复整个过程。

随时要求澄清。

编辑

新设计 这是我的新设计,但@Gilles对无保险库密码管理器提出了很好的论据

1个回答

主密钥必须是足够长的随机生成的密钥。它必须是至少 16 个字节,均匀随机生成(不是 16 个随机可打印的 ASCII 字符,也绝对不是人工选择的密码或密码)。否则,可以从任何派生密码中找到主密钥。

这意味着万能钥匙实际上不会被人类记住,所以这个方案并不是真正的无保险库。

如果你使用 HMAC 作为哈希,那么如果主密钥不是随机均匀生成的也可以,但它仍然需要有足够的熵才能使暴力搜索不可行。例如,使用Diceware,您需要 10 个字才能达到 128 位的熵。鉴于如果密钥被泄露,您必须更改所有密码,所以不要满足于更少。

从主密钥生成不同的密钥称为密钥派生。您使用 MAC 作为密钥派生函数对于在实践中使用的 MAC,这可能没问题,但它很狡猾。任何 MAC 都保证无法从任意数量的(输入、输出)对中找到主密钥,除非对允许的主密钥集进行暴力搜索。MAC 还保证在不知道主密钥的情况下,即使知道其他一些输入的输出,也无法找到特定输入的输出。MAC 不能保证无法找到截断的输出,并且密码长度限制可能要求您截断输出。不要使用 MAC,而是使用公认的 KDF,例如HKDF(如果您的加密库没有,这很容易在 HMAC 之上实现)。

您可以通过基于密码的密钥派生函数(例如scryptArgon2)替换 MAC-should-be-KDF 步骤这将让您使用熵较少的主密钥。基于密码的密钥派生函数旨在将密码作为秘密输入,并通过本质上更慢的计算来补偿更小的输入空间(比正常大小的密钥更少的熵)。例如,如果拉伸因子使它比 HKDF 慢 10 亿倍(因此在 PC 上大约需要 1 秒),那么拥有 7 个 Diceware 字就足够了(给你 120 位熵)。请记住,在此方案中,您将无法在不更改所有密码的情况下升级拉伸因子,因此请谨慎选择。

“质量保证”步骤的名字很糟糕,因为它(稍微)降低了安全性。它没有将“弱”输出与“强”输出区分开来:所有输出都具有完全相同的强度。如果输出的强度来自输出的生成方式,而不是输出的内容。将其称为“输出约束”步骤,结果“可接受”和“不可接受”。请注意,您需要为每个站点制定不同的可接受性规则(例如,某些站点坚持使用标点符号,而其他站点则拒绝所有标点符号)。

请记住,您有时需要在网站上更改密码。因此,除了站点名称之外,您还需要一个额外的公共输入“版本”。确保站点名称、版本和计数器明确组合。例如,纯字符串连接是不行的,因为example.com123可能是版本 1 与计数器 23 或版本 12 与计数器 3。如果您使用可打印字符串作为站点名称、版本和计数器,那么您可以使用空字节作为分隔符将它们连接起来。您可能还希望在其中包含一个用户名,以支持同一站点上的多个帐户。

此方案的一个实际限制是您只能在您信任的系统上输入主密钥/密码。这意味着只有您自己的 PC,仅在没有人监视您的情况下(例如,没有安全摄像头)。特别是,无法在低安全性环境中创建密码,然后将其上传到您的密钥环。每个密码都必须在高度安全的环境中生成。

由于您需要携带自己的 PC 才能使用此方案,因此与密码保险库相比,它的好处有限。唯一的好处是,如果您的 PC 在内存中没有主密钥时被盗,您并没有泄露任何秘密。平衡这与万一主密钥被泄露的风险,你会立即泄露所有密码。

该方案如果实施正确,理论上是安全的,但在现实世界中效果不佳。它可以很好地抵御加密攻击,但无法抵御“带外”攻击,例如物理键盘记录器、键盘记录器恶意软件或安全摄像头,或者无法通过强制或意外键入错误的方式泄露主密钥场地。

您的方案基本上是单因素身份验证(仅主密钥),其中密码库是双因素身份验证(库内容和库解锁密钥)。有两个因素比一个因素更稳健。受强密码保护的保险库与您的方案一样可以抵抗所有相同的攻击,并且还可以抵抗诸如肩部冲浪之类的攻击。

在可用性方面,这两种方案都要求您使用自己受信任的 PC。您的方案的优势在于您可以购买一台新 PC、从受信任的来源检索您的软件、获取主密钥的离线副本以及访问您的密码。保险库需要下载加密保险库的额外步骤,但这在实践中几乎不是问题:什么时候需要密码但无法访问互联网?如上所述,保管库的优势在于它适用于您想要在无法访问 PC 的情况下创建密码的常见场景,例如创建共享工作/个人使用的密码(例如如果您出差,请输入与旅行相关的网站的密码)在工作机器上,然后将其复制到您的个人保管库中。

我强烈建议在此方案上使用密码库。它在现实世界的用例中更加强大。