如何生成用于attr_encrypted的加密密钥

时间:2013-07-01 15:18:25

标签: ruby-on-rails ruby cryptography

我正在考虑在Rails应用中使用attr_encrypted gem进行字段级加密。如何生成用于此gem的加密密钥?

更新

attr_encrypted使用的基础加密Encryptor的文档声明如下(在Usage | Basic下):

secret_key = Digest::SHA256.hexdigest('a secret key')
encrypted_value = Encryptor.encrypt('some string to encrypt', :key => secret_key)

我猜测a secret key可以是任意长度的随机字符串,对hexdigest的调用将从中计算出适当的固定长度字符串。这是推荐的方法吗?

1 个答案:

答案 0 :(得分:7)

密钥只是一个字符串,任何字符串都可以,你只想让它远离那些不允许看到明文数据的人。您只需使用SecureRandom.base64生成密钥即可。这会让你几乎无法通过蛮力进行攻击,只需付出很少的努力。

这里有趣的是密钥管理。您对此宝石的选择似乎是:

  • 将密钥硬编码到应用程序中。这可以防止通过例如“意外”读取敏感数据。 DBA或支持工程师,但如果他们能够访问源代码和数据库,那么知道gem如何工作的人并不安全。

  • 引用一个确定密钥的命名方法。这更有趣,但要注意:将密钥放入数据库并不会真正增加安全性。可以访问数据库和代码的人可以像使用硬编码一样进行操作。

通过让应用程序从开发人员(或者可能只是大多数开发人员)无法访问的位置读取至少部分密钥,您可以稍微改进一下,或至少让开发团队与加密数据分离生产。超越这一点更难,至少对于这个gem来说,因为应用程序需要运行才能访问加密/解密密钥。

这是否足够好取决于您首先加密数据的原因。