通过 OTP 添加双因素身份验证真的会让 KeePass 更安全吗

信息安全 密码管理 多因素 一次性密码 守望先锋
2021-08-20 14:45:39

KeePass是一个应用程序,可将您的所有密码保存在数据库中。它主要受主密码和/或密钥文件保护。如果数据库使用该密码正确加密,这将非常安全。

有一个插件OtpKeyProv据说可以通过添加第二个身份验证因素来提高安全性。使用此插件保护您的数据库后,您需要生成并输入一次性密码才能打开您的数据库。

我的问题:这真的会增加安全性吗?我看不出如何使用 OTP 机制来进一步加密数据库。掌握数据库的黑客不能不简单地编译不要求 OTP 值的 KeePass 版本(它是开源的)吗?

据我所知,该插件只会在您想要访问应用程序时惹恼您,从而导致一种额外的安全感。

还是我忽略了什么。

4个回答

不会。安全性保持不变 + 额外的认知开销。

据推测,该插件使用OATH HOTP,其中 KeePass 文件或主密钥在每次访问后使用下一个一次性密码重新加密。

但是,要在设备上生成下一个密码,插件需要存储在设备上的密码或 KeePass 文件的正常密码。

一次性密码的安全性来自知道相同密钥和计数器的两方HOTP(Key,Counter)- 而攻击者不知道密钥。如果攻击者可以访问存储 KeePass 安装和文件的设备,则安全性会自行重新崩溃到普通密码的安全性。如果 KeePass 文件仍可与其他 KeePass 程序互操作,那么以这种方式使用一次性密码将一无所获。

一次性密码适用于服务器身份验证,因为客户端和服务器端点都被认为是安全的,并且攻击者需要“您拥有的东西”以及“您知道的东西”。如果攻击者拥有您的计算机,那么他们现在拥有“您拥有的东西”。

从阅读源代码来看,秘密似乎存储在 Yubikey 上,并使用 otp.xml 文件中的不同密钥多次加密存储。加密密钥从 OTP i..i+m 开始的接下来的 n 个 OTP(从秘密中导出)派生,其中 i 是当前计数器,m 是前瞻值。当用户输入他们的 OTP 值时,插件会根据这些值创建一个密钥,并尝试使用该密钥解密密钥的加密副本之一。如果成功,该秘密将用于派生下一个 n+m 个 OTP,并在解锁数据库之前生成用于下次加密该秘密的 m 个密钥。这意味着如果没有一些秘密副本,就无法绕过保护,这些秘密不会以纯文本形式存储在数据库旁边。

虽然看起来很安全,但我不喜欢这个插件,因为计数器可能不同步。确保你有一份秘密的副本,写在安全的地方。

KeePass 有一个通常用您的密码加密的主密钥。如果该密钥使用由 OTP 生成的内容和您的密码进行加密,则需要这两种机制来解密用于加密数据存储的主密钥。也就是说,我不确定他们是如何实现安全的 OTP 设置的,因为通常 OTP 是一种身份验证方法而不是密钥存储(即,我不知道如何让 OTP 解锁密钥) .

还怀疑它们可以有效地防止重放,因为在大多数攻击场景中数据库是由攻击者控制的,只是不一定按照您预期的方式。他们可能有办法解决这个问题,但我想不出一个。

是的,安全性得到了提高,因为有一个额外的 HOTP“密码”。这将阻止可以获取普通密码的键盘记录器木马。