是否有一种简单的方法来处理加密字段的SECRET_KEY更新?

时间:2017-10-22 09:25:30

标签: python django security encryption

让我们从两个假设开始:

  1. 使用例如第三方访问令牌等一些数据库字段进行加密。 Fernet和SECRET_KEY作为加密密钥。
  2. 由于安全问题,
  3. SECRET_KEY需要更改。
  4. 在这种情况下,最好的做法是什么?我认为我应该在修复安全漏洞后立即更改SECRET_KEY,但是如果我这样做,我将基本上无法访问所有加密数据。

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

    这似乎是一个很大的麻烦,是否有更好/更简单/更快的方式处理这种情况?

1 个答案:

答案 0 :(得分:1)

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

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

django-fernet-fields提供开箱即用的此功能;但是,它假设您将键旋转作为最佳实践,而不是妥协的结果。

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