使用密码加密 - 密钥与数据的加密

信息安全 加密
2021-08-09 19:55:53

许多基于密码的加密实用程序(例如:KeePass、TrueCrypt)都在做一些事情......

  1. 使用超强随机生成密钥“数据密钥”加密数据。
  2. 根据用户提供的密码,使用另一个密钥“用户密钥”加密数据密钥。
  3. 当需要访问时,用户提供密码。密码用于重新创建用户密钥,它解密数据密钥,它解密数据。

想必这背后的逻辑是这样的:

  • 用户提供的密码很糟糕,因此我们需要更好的密钥来保护数据。
  • 用户仍然需要访问数据,因此我们需要一种方法让他们使用密码进行访问。

然而,这一切的底线是数据的保护仍然归结为用户提供的密码的强度和保护。那么,涉及单独密钥的额外开销的真正意义是什么?

4个回答

使用中间密钥的主要优点是允许在不重新处理所有数据的情况下更改密码。

例如,您有一个用随机密钥K(一个 128 位值)加密的大文件(千兆字节...),而K本身是用P(从密码派生的密钥)加密的。如果您更改密码,您将获得一个新的密码派生密钥P'要进行调整,您必须使用 P 解密K使用P'重新加密它这不需要重新加密甚至访问大文件。

除了这个优点之外,使用中间键可以将操作解耦,这样更加灵活。例如,用于将密码转换为对称密钥的过程可能无法完成生成批量加密所需长度的密钥的任务(例如,bcrypt 将生成 192 位密钥,而不是 256-位键)。

中间密钥的另一个优点是它允许显示文件。例如,你有你的大文件,你想把它展示给 Bob。但是您不想将密码提供给 Bob;您希望 Bob 能够看到该单个文件,而不是使用相同密码进行道德加密的所有其他文件。使用中间密钥,这很容易:您只需将K显示给 Bob。只要每个文件都有自己的随机K,就可以了。

请注意,该模型扩展到非对称加密:发送给n 个收件人的文件将使用随机密钥K加密一次,并且K将使用每个收件人的公钥加密。这就是OpenPGP中的工作方式。相应的优势也映射到基于密码的情况。

它允许用户更改密码,而无需再次加密所有数据。

如果您直接使用密码来加密数据,那么更改密码可能需要很长时间,因为整个数据需要使用旧密码解密并使用新密码再次加密。如果这个过程在中间被中断,当一半的数据用新密码加密而另一半仍然用旧密码加密时怎么办?

感谢您描述的系统,当用户想要更改他的密码时,所需要的只是用新密码加密数据密钥。快速、简单、可靠。

想必这就是方便。如果我想更改我的密码,这将派生一个单独的密钥 - 然后我只需要使用我的密码派生密钥加密密钥重新加密密钥。

但是,如果您没有单独的密钥,则需要对整个数据库进行解密和重新加密。鉴于这是不太可能很大的密码,但对于其他实现(文件系统)来说,多键设计是有意义的。

  1. 高熵。如果您的数据密钥是随机的,那么它很可能不是最薄弱的环节。
  2. 密钥分离(不确定它是否被称为...):攻击者必须决定是使用“弱”密钥攻击标头,还是使用可能具有千兆字节样本数据的强密钥攻击数据。因此可以防御密码分析攻击。
  3. 方便。用户可以简单地切换他的密码,而无需重新加密千兆字节的数据。(可能需要几个小时)