我正在寻找将敏感数据存储在数据库中的最佳解决方案.
我知道这是常见的问题而且我完成了我的作业(至少这是我的想法),但我想在此之前先问我做出决定.
假设:
>需要解密加密数据.我们正在谈论SMTP凭据,如用户名,密码,主机,端口itp.
我在考虑两个概念:
>借助passlib.totp库加密数据.为了使这些数据更安全,我会将密钥保存在单独的文件中.然后从我可以看到我可以使用此库使用我的密钥将数据解密为纯文本.
>另一个概念是在postgres的帮助下在查询请求期间加密和解密数据:
insert into demo(pw) values ( encrypt( 'data', 'key', 'aes') );
和:
decrypt(pw, 'key', 'aes'), 'utf-8')
这里的密钥也将存储在单独的文件中.
所以我的问题是:
>在代码或数据库中加密/解密数据的更好方法是什么?
>使用比passlib.totp更好(更强)的库 – >我没有使用该库的经验(我知道加密/解密不是存储密码的最安全的方式 – >密码应该被仇恨但我需要用纯文本来使用用户smtp gate).
解决方法:
2) The other concept was to encrypt and decrypt data during query request with help of postgres: insert into demo(pw) values ( encrypt( ‘data’, ‘key’, ‘aes’) ); and decrypt(pw, ‘key’, ‘aes’), ‘utf-8’) Here the key will be stored also in separate file.
我不建议这样做,因为密钥很容易暴露在pg_stat_activity,日志等中.PostgreSQL没有日志屏蔽功能可以防止这种情况发生.
我强烈建议你使用app-side crypto.如果安全性至关重要,请使用加密卸载设备,因此大多数攻击者无法进行密钥提取.或者要求管理员在应用启动时输入密码来解锁密钥,因此密钥永远不会以未加密的方式存储在磁盘上 – 然后攻击者必须从内存中窃取密钥.但即使是非显而易见的未加密密钥文件也比in-db加密,IMO更好,因为它至少将密钥与数据分开.