这个问题之前已经有人问过了:LUKS 中的密码和密钥文件之间的区别。有一条评论和一个没有回答问题的“答案”。所以我再问一次。
本质上
- 密钥文件和密码之间有什么区别?
- 是不是每次系统尝试解锁磁盘时,用户都必须输入密码,但它会自动获取密钥文件而无需用户交互?
- 怎么可能有多个密钥槽?如果磁盘可以用复杂的密钥文件或简单的密码解密,那么复杂的密钥文件有什么意义呢?暴力攻击肯定很快就会得到简单的密码。
换句话说,如果同一个磁盘可以用简单的密码解密,那么使用复杂的密钥文件有什么意义呢?
这个问题之前已经有人问过了:LUKS 中的密码和密钥文件之间的区别。有一条评论和一个没有回答问题的“答案”。所以我再问一次。
本质上
使用 LUKS,则无需担心。密钥文件充当密码的来源,从那里开始,两者以完全相同的方式进行处理。
(据我记得,TrueCrypt 也是如此,尽管 TC 也有混合密钥文件和密码的能力,但如果您只提供其中一个,那么它们是可以互换的。)
密钥文件或密码不直接用作卷加密密钥;它仅充当密钥槽加密密钥。每个密钥槽都包含卷加密密钥的加密版本(因此,如果有 5 个密钥槽,则有 5 个卷密钥副本)。
那么,不要想得太简单。足够长的密码不可能在任何合理的时间内被暴力破解——如果在 LUKS2 中使用较新的 Argon2 KDF,情况就更是如此,尽管如果是整个密码,即使是 LUKS1 使用的 PBKDF2 算法仍然会稍微减慢速度(尽管没有那么严重)。
例如,对于单个 GPU 上的 Argon2,以估计每秒 5000 次哈希值的速率运行的基本四字密码,仍然需要大约 100 年才能找到匹配项。如果您认识有 100 个备用 GPU 的人 – 请添加一些标点符号、数字等。
a) 节省输入密码的时间。
由于您不是手动输入密钥文件,因此没有必要将其“与密码一样弱”——单个 KDF 操作无论如何都会花费大约相同的时间,因此您不妨生成一个随机密钥以保持一致性。是的,基于密码的密钥槽仍然是弱点。
并且 b) 您根本不需要设置简单的密码。您可以拥有仅包含密钥文件的 LUKS 卷。
例如,BitLocker 的工作方式类似,并且有许多系统的系统卷仅受随机密钥(两个随机密钥,一个受系统的 TPM 保护,另一个打印出来作为数字恢复密钥)的保护,但没有密码。您可以使用 LUKS 进行类似的设置,可以使用 systemd-cryptenroll 或手动进行。
(使用密码保护系统卷也很常见,然后在其中存储用于解锁各种数据卷的密钥文件。这样,您只需更改一次密码,而不必在 5-6 个不同的卷上重复更改。在这样的设置中,系统卷的密码仍然是薄弱环节,但同样,故意使密钥文件变弱也没有意义,因此为了保持一致性,始终生成全强度随机文件更为简单。)