带Rails的加密Hstore

时间:2013-09-10 13:35:34

标签: ruby-on-rails postgresql hstore

我有一个带有hstore的Postgresql数据库,它运行良好,除了我们现在需要将敏感信息放入hstore,因此需要加密信息。

使用rails加密Hstore是否有一种简单的方法(/什么是最佳实践)?

1 个答案:

答案 0 :(得分:1)

您可以使用before_save挂钩在存储在db中之前加密哈希中的敏感属性,并在实例化记录时使用after_initialize挂钩进行解密。

以下内容应该有效:

class MyModel < ActiveRecord::Base
  after_initialize :decrypt_sensitive
  before_save :encrypt_sensitive

protected:
  def encrypt_sensitive
    props['some_attr'] = encrypt_and_mac(props['some_attr'])
    props['another_attr'] = encrypt_and_mac(props['another_attr'])
  end

  def decrypt_sensitive
    props['some_attr'] = decrypt_and_verify(props['some_attr'])
    props['another_attr'] = decrypt_and_verify(props['another_attr'])
  end
end

after_initialize会有一些性能问题,因此您可能希望考虑使用自定义访问器来代替懒惰地执行解密。

虽然我全都是分层安全的,但如果没有平台和密钥管理的额外控制,你就不会购买大量的安全性。我特别避免了密码和加密模式,密钥长度,密钥管理等的详细信息。您需要根据自己和/或客户的风险评估进行通知(请参阅ISO 27000系列信息安全风险管理)。从技术上讲,您可能希望将AES与消息验证(例如CCM或OCB3)一起考虑,以便您可以检测静止的数据是否已被篡改,但您仍然需要小心如何使用这些模式。

通常情况下,加密是一种使用不当的工具,只会在固有的不安全操作环境中提供虚假的安全感。