8

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

更新:

Encryptor的文档是 attr_encrypted 使用的基础加密,说明如下(在 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会从中计算出适当的固定长度字符串。这是推荐的方法吗?

4

1 回答 1

10

密钥只是一个字符串,任何字符串都可以,你只是想让它远离那些不允许看到明文数据的人。您可以简单地使用SecureRandom.base64. 这将使它几乎无法通过蛮力进行猜测,而您几乎不需要付出任何努力。

这里有趣的是密钥管理。您对这个 gem 的选择似乎是:

  • 将密钥硬编码到应用程序中。这可以防止例如 DBA 或支持工程师“意外”读取敏感数据,但如果任何了解 gem 工作原理的人都可以访问源代码和数据库,这对他们来说是不安全的。

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

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

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

于 2013-07-01T16:31:22.347 回答