在Postgres中存储加密数据

Joe*_*Joe 34 encryption postgresql

我要求在Postgres中以加密形式存储某些数据.显然,我需要加密,存储它,并能够读取和解密它.做这个的最好方式是什么?

Cra*_*ger 36

最好的办法是做客户端或应用程序服务器上的密码,所以数据库不知道什么键,不能解密数据.如果客户端/应用服务器位于不同的主机上,那就更好了.

如果您的数据库正在为您加密和解密数据,那么它很容易被密钥和数据库一起窃取.

如果你使用pgcrypto的数据库内加密函数,你可以让应用程序发送密钥和数据,这至少有点帮助.如果一个有用的系统管理员打开激进的语句记录或自动计划转储,它仍然有可能在日志中暴露密钥,并且最后如果密钥进入数据库机器,它们比它们不是它们更容易受到攻击.控制数据库计算机的攻击者还可以更改日志设置,替换postgresql二进制文件或嗅探流量以此方式捕获密钥和数据.

如果appserver和db位于同一台机器上并由相同的角色管理,那么就不必担心隔离它们了,只使用pgcrypto可能是明智的.

无论哪种方式,记得加盐!

  • 是的,我会把它保存在一个文件中.对于额外的偏执,您可以将文件保存在可移动存储上,并让您的应用程序在应用程序服务器启动期间加载它,然后删除该文件,以便密钥在RAM中仅**且无法在HDD上访问.缺点是需要管理员干预app服务器重启和恢复.对于奖励发散的偏执点你可以使用JNI/JNA来mlock()密钥所在的内存以阻止它被换出;-)并使用SecurityManager来限制意外的财产访问等.坦率地说,如果攻击者在这一点上但你已经搞砸了. (7认同)
  • 我不同意那个Joe - 如果它在存储过程中,它将在备份中以明文形式出现.备份丢失或被盗是您的主要漏洞之一.这也无助于通过可以看到pg_proc的特权帐户(超级用户)对数据库进行未经授权的访问. (4认同)
  • 对于后来的搜索者:还询问PostgreSQL邮件列表http://archives.postgresql.org/message-id/1323354369.98656.YahooMailClassic@web161406.mail.bf1.yahoo.com (3认同)