【问题标题】:Is there a simple way to handle SECRET_KEY update for encrypted fields?有没有一种简单的方法来处理加密字段的 SECRET_KEY 更新?
【发布时间】:2017-10-22 09:25:29
【问题描述】:

让我们从两个假设开始:

  1. 某些数据库字段(如第三方访问令牌)是使用例如加密的。 Fernet 和SECRET_KEY 作为加密密钥。
  2. SECRET_KEY 需要更改,因为安全问题。

在这种情况下,最好的办法是什么?我认为我应该在修复安全漏洞后立即更改SECRET_KEY,但是如果我这样做,我基本上将无法访问所有加密数据。

我想出的是首先进行迁移,这将暂时用简单的 charfields/textfields + 数据迁移替换加密字段以解密存储的值。然后更改SECRET_KEY。最后带回加密的字段,再次使用数据迁移来加密存储的值。

这似乎很麻烦,有没有更好/更简单/更快的方法来处理这种情况?

【问题讨论】:

    标签: python django security encryption


    【解决方案1】:

    由于您只有一个密钥,您唯一的办法就是重新加密整个数据库。

    正确的方法是首先不要将 django 的 SECRET_KEY 用于数据库任务(即使 django 也不将其用于用户密码之类的事情),并为您的敏感数据实施密钥轮换算法。

    django-fernet-fields 提供开箱即用的此功能;但是,它假定您将轮换密钥作为最佳实践,而不是妥协的结果。

    最佳实践密钥轮换依赖于“使用时加密”,其中秘密使用旧密钥未加密,并在使用时使用新密钥重新加密。最终,您最常用的秘密将被重新加密,您可以进行审核以使剩余条目无效或强制重新加密。

    【讨论】:

      猜你喜欢
      • 2013-06-01
      • 1970-01-01
      • 2014-04-17
      • 1970-01-01
      • 2017-07-16
      • 2022-11-10
      • 1970-01-01
      • 2011-08-31
      • 2021-07-24
      相关资源
      最近更新 更多