0

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

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

4

1 回答 1

1

before_save您可以在存储到数据库之前使用挂钩来加密哈希中的敏感属性,并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,以便您可以检测静态数据是否已被篡改,但您仍然需要小心如何使用这些模式。

通常情况下,加密是一种被滥用的工具,它只会在本质上不安全的操作环境中提供一种错误的安全感。

于 2013-09-10T16:03:25.143 回答