ruby-on-rails - 如何生成用于 attr_encrypted 的加密 key

标签 ruby-on-rails ruby cryptography

我正在考虑使用 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/

相关文章:

python-3.x - Python matplotlib 无法在椭圆曲线 y^2+x^3+x^2=0 上绘制Acnode(孤立点)

ruby-on-rails - 解决 Gem::Package::TooLongFileName 问题

ruby-on-rails - 用于 MongoDB 管理的 Rails 应用程序?

encryption - 练习密码分析和密码学技术的工具

ruby - 使用 Ruby gem Typhoeus 的 Api 请求

ruby - 如何使用 ruby​​ 检查 Amazon S3 上的 URL 是否有效且未过期

node.js - 使用 Node.js 解密 AES-256-CBC 密码

jquery - active_scaffold w/Rails 3.2 对搜索、编辑、新操作等没有给出可见的响应

ruby-on-rails - 使用 User.current_user 有哪些安全问题

Proc 的 Ruby 比较操作?