attr_encrypted
的文档说我必须将key = SecureRandom.random_bytes(32)
的结果存储在模型上。我认为将此密钥存储为 ENV 变量会更安全。我也习惯于为我的 ENV 变量运行rake secret
。rake secret
依赖于SecureRandom.hex()
.
我想知道两件事:
- 我假设加密密钥应该存储为 ENV 变量是否正确?
- 两种 SecureRandom 方法中的任何一种之间的密钥加密强度是否有任何差异?
hex()
与random_bytes()
?
SecureRandom#hex
在这里定义为:
def hex(n=nil)
random_bytes(n).unpack("H*")[0]
end
所以它们生成的数据完全相同,只是格式不同。
至于加密密钥,这取决于您以及您托管应用程序的方式。如果它位于您控制的服务器上,则未提交的配置文件很好(尽管环境变量方法显然仍然有效(。如果您在例如 Heroku 上托管,环境变量是要走的路。