【问题标题】:Gracefully re-encrypting tokens in Rails app在 Rails 应用程序中优雅地重新加密令牌
【发布时间】:2017-02-17 23:32:03
【问题描述】:

我继承了一个与 Facebook 集成的 Rails 应用程序,并对从 Facebook 发送的令牌进行加密,并将其保存为用户的身份验证令牌。

由于各种原因,我最终更新了我的 Ruby,并且发生了一些 Gemfile 更改,导致应用出现问题。最重要的是对attr_encrypted 的更改,它通过encrypted gem 处理保存到数据库中的Facebook 令牌的加密。

问题在于,该应用程序已经上线并且已经有很多用户,其基本秘密加密密钥对于新更新的attr_encrypted 的安全标准来说太短了。具体来说,当我现在尝试加密令牌时(目前在测试中;我还没有实时推送这些更改),会抛出一个错误,指出密钥需要为 32 个字节。

问题:

有没有人建议更新到更安全的令牌?如果我更改令牌,我假设这将破坏令牌的解密,因此我可能会永久失去读取/使用数据库中所有用户身份令牌的能力。这显然很成问题,所以我想在这里仔细检查一下我的想法。

我目前的想法是迁移:运行一个遍历每个身份的迁移,使用我的旧密钥解密存储的令牌,然后使用更长的新密钥保存新加密的令牌。

然后我可以毫无问题地摆脱旧密钥。对?关于attr_encrypted gem 的特殊性或我可能没有考虑到的一般加密问题,任何人都可以想到的任何问题?

【问题讨论】:

  • 那么,什么是旧版本,什么是新版本?

标签: ruby-on-rails encryption attr-encrypted


【解决方案1】:

按照您的建议,我认为迁移没有问题。

documentation 似乎有一个有用的建议:

如果您的密钥相对于您使用的算法长度不足,您还应该传入insecure_mode: true;,这将防止 Encryptor 引发有关密钥长度不足的异常。请参阅弃用部分了解更多详细信息,包括如何使用 attr_encrypted v1.x 中的默认选项指定模型的示例。

这意味着您可以使用新版本的 attr-encrypted 来按照您的建议运行迁移。

您应该首先进行试运行,以查看您的所有密钥和令牌是否均等地创建并且能够以相同的方式迁移。如果是,那么您可以运行重新加密。

【讨论】:

    【解决方案2】:

    完整的故事看起来像是在那个宝石的issue#109

    1. Load all instances of Foo
    2. Change key by redefining self.encryption_key
    3. Save all instances of Foo
    

    【讨论】:

      猜你喜欢
      • 2020-01-07
      • 2023-03-10
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多