应该在哪里存储attr_encrypted的安全密钥?

时间:2014-06-19 07:11:12

标签: ruby-on-rails attr-encrypted

我一直在关注attr_encrypted,但它会将密钥存储在代码中,而这似乎并不那么安全。如果我的网络服务器遭到破坏,加密将无济于事。

如果我的网络服务器遭到破坏,有哪些选项可以保证数据安全?

2 个答案:

答案 0 :(得分:2)

密钥必须在内存中才能执行加密和解密。如果您的服务器遭到破坏,无论您如何存放密钥,您都会受到打击;一旦攻击者可以访问您的本地计算机,所有投注都将被取消。如果您的应用可以解密数据,那么他们也可以根据他们愿意花费多少精力来提取这些密钥。

attr_encrypted将保护您免受SQL注入等导致敏感数据泄露的问题,但如果您的应用受到攻击,则攻击者可以获取您的应用可以访问的任何内容。

但是,为了使其更难,您可以使用密码加密的密钥。您可以将加密密钥存储在磁盘上,然后在部署应用程序时(或以其他方式启动它),您将提供密码以将密钥解密到内存中,然后将密码丢弃。这仍然无法保护您免受某人贪图通过您的进程内存的影响,这意味着您每次应用程序需要启动时都必须进行人工交互(这可能是自动监控的问题),但这会大大增加难度(但不是阻止)从受感染的机器中提取加密密钥。

答案 1 :(得分:0)

我使用环境变量来设置键。开发或生产有不同的方法很容易。

加密问题:

# app/models/concerns/encryption.rb

module Encryption

  extend ActiveSupport::Concern

  module ClassMethods
    def encryption_key
      ENV['ENCRYPT_KEY']
    end
  end

end

在模型中,使用关注的方法。

class User < ActiveRecord::Base

  include Encryption
  attr_encrypted :name, :key => encryption_key

end

在开发中,使用.env文件存储密钥并使用foreman检索环境变量。 Heroku提供了一种从仪表板设置环境变量的简便方法。