我正在考虑使用 attr_encrypted在 Rails 应用程序中用于字段级加密的 gem。如何生成用于此 gem 的加密 key ?
更新:
Encryptor 的文档,它是 attr_encrypted 使用的底层加密,声明如下(在 Usage | Basic 下):
secret_key = Digest::SHA256.hexdigest('a secret key')
encrypted_value = Encryptor.encrypt('some string to encrypt', :key => secret_key)
我猜想 key
可以是任意长度的随机字符串,而对 hexdigest
的调用将从中计算出适当的固定长度字符串。这是推荐的方法吗?
最佳答案
key 只是一个字符串,任何字符串都可以,你只是想让它远离那些不允许看到明文数据的人。您可以使用 SecureRandom.base64
简单地生成一个 key 。这将使它几乎无法通过蛮力来猜测,您只需付出很少的努力。
这里有趣的是 key 管理。您对这个 gem 的选择似乎是:
将 key 硬编码到应用程序中。这可以防止例如通过“意外”读取敏感数据。 DBA 或支持工程师,但对于任何了解 gem 工作原理的人来说,如果他们可以访问源代码和数据库,那么它并不安全。
引用将确定 key 的命名方法。这更有趣,但要注意:将 key 放入数据库并不能真正增加多少安全性。可以访问数据库和代码的人可以做很多事情,就好像值是硬编码的一样。
您可以稍微改进一下,或者至少让开发团队从加密数据中分离出来,方法是让应用程序从开发人员(或者可能只是大多数开发人员)无法访问的位置读取至少部分 key 生产。超越这一点就更难了,至少对于这个 gem 是这样,因为应用程序将需要在访问加密/解密 key 的情况下运行。
这是否足够好取决于您首先加密数据的原因。
关于ruby-on-rails - 如何生成用于 attr_encrypted 的加密 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17407984/