我有一个带有hstore的Postgresql数据库,它运行良好,除了我们现在需要将敏感信息放入hstore,因此需要加密信息。
使用rails加密Hstore是否有一种简单的方法(/什么是最佳实践)?
答案 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)一起考虑,以便您可以检测静止的数据是否已被篡改,但您仍然需要小心如何使用这些模式。
通常情况下,加密是一种使用不当的工具,只会在固有的不安全操作环境中提供虚假的安全感。