使用 keepass 提高安全性

信息安全 密码 蛮力
2021-08-21 15:49:04

我正在使用 keepass 来保护密码。我有一个合理的密码,但如果有人掌握了该文件,我相信他们最终会暴力破解它。

我也在考虑使用密钥文件,但如果有人偷了我的手机或笔记本电脑,它可能会与 keepass 文件一起存储,因此不会增加安全性。(不要与担心键盘记录器的这个问题混淆)

我当时正在考虑生成 1000 个密钥文件以与数据文件一起存储。只有其中一个是真正使用过的。认为这会增加安全性,就好像有人试图暴力破解他们将不得不尝试密码/密钥文件组合一样。使暴力破解困难几倍。

这是一个正确的假设,还是从加密存储中推断出密钥文件相当容易?

4个回答

在 1000 个可能的文件中选择密钥文件,假设您可以完美地做到这一点(例如,选择不会通过访问时间泄漏),相当于在密码末尾添加三位数字。添加三位数字意味着记住(除了密码之外)一个三位数字,这与记住要使用的 1000 个密钥文件中的哪一个完全一样。

因此,不要使用您的密钥文件,只需将额外的秘密数据(三位数字)附加到您的密码中。这将至少与您的密钥文件一样安全(并且可能安全,因为您选择的文件可能以某种方式泄漏)并且使用起来更麻烦。

您使用的大海捞针方法正是我对 TrueCrypt 所做的。闪存棒上的一个目录中大约有 600 个密钥文件,其中大约有 10 个被使用。

闪存棒有一个硬件只读开关,可防止操作系统更新“上次访问”元数据。如果您使用可写介质进行存储,请记住这一点 - 您访问的关键文件将(很可能)在访问日期之前泄露。我还通过随机化文件上的创建/修改/访问日期为此添加了一些额外的“箔条”,以使所有日期完全不可信。

这使得找到正确的密钥文件变得非常困难 - 1,545,269,050,000,000,000,000 个潜在组合,假设从 600 个文件中选择了 10 个,如果顺序无关紧要并且任何一个密钥文件只能使用一次。每个组合都必须尝试潜在的密码,使这种蛮力完全不可行。只要您使用足够大小的随机密钥文件(我通常使用 4kB 或更大),也没有可行的方法来暴力破解内容。密钥(通常)由文件内容的哈希生成,或者如果使用多个密钥文件,则这些哈希的组合与密码的哈希相结合。请注意,“哈希”可能意味着像 SHA256 这样的简单哈希,或者像 PBKDF2 或 bcrypt 这样的密钥派生算法的输出。因此,在没有密钥文件的情况下计算密钥是不可能的。相反,不可能从卷中识别密钥文件,因为您需要知道密钥才能推断出这样的事情。

为了解决 fatfredyy 评论中提到的潜在缓存定时攻击 - 这是极不可能的。提议的攻击涉及读取各种文件并比较它们的访问时间。最近读取的文件应该阅读速度比其他人快,因为它会在缓存中。但是,从磁盘读取的时间在硬盘上很嘈杂(来自未知当前扇区的查找时间使事情变得有趣)并且访问缓存具有海森堡效应 - 读取文件可能会将其加载到缓存中,并可能破坏缓存的完整性就潜在的定时攻击而言。SSD 上也会出现类似的问题,它使用相对较少的读取缓存和大量的写入缓存。在某些系统中,您可能会发现顺序读取目录中的文件会导致后面的文件被预取,从而使时序攻击更加复杂。如果没有从驱动器中物理提取硬件缓存数据,我认为这是不可行的。

纵深防御很少是一件坏事,但我会挑战拥有多个证书来工作实际上并不会增加您的安全性并增加很多开销。一般来说,最好的密码机制会以指数方式增加线性努力的难度,即,向密码添加一个随机的字母数字/符号字符会使猜测难度增加 80 倍以上。以这种速度,在密码中添加两个字符会使猜测的难度增加 6400 倍,这已经比对密码进行暴力攻击的 1000 个密钥文件增加了更多的难度。

也就是说,如果他们尝试通过在密钥文件本身中发现的一些弱点直接攻击密钥文件,您的方法仍然有优点,但是如果在密钥存储中发现了如此严重的问题,那么可能是时候考虑密钥了如果您想保持足够高的安全级别以考虑破坏文件加密的时间是一种威胁,那么 store 将完全失效。

为什么不将密钥文件存储在 USB 密钥上?如果有人偷了你的笔记本电脑,他们仍然需要钥匙。如果你这样做,你有一个两因素身份验证。