python - 如何安全地存储加密 key ?

标签 python database web-applications cryptography pycrypto

我正在考虑使用诸如 pycrypto 之类的加密库来加密/解密我的 python webapp 数据库中的字段。但是加密算法需要 key 。如果我的源代码中有一个未加密的 key ,那么尝试像在我的服务器上那样加密 db 字段似乎很愚蠢,如果有人可以访问 db 文件,他们也可以访问我的 python 源代码。

是否有保护所用 key 的最佳实践方法?或者加密数据库字段的替代方法(在应用程序而非数据库级别)?

更新:我试图保护的字段是 oauth token 。

更新:我想没有避免这种情况的通用方法。我想无论如何我都需要加密这些字段,因为 db 文件很可能会得到备份并四处移动,所以至少我会将问题减少到一个易受攻击的位置 - 查看我的源代码。

更新:oauth token 需要在用户离线时用于 api 调用,因此在这种情况下不适合使用他们的密码作为 key 。

最佳答案

如果您正在加密您只需要验证(而不是召回)的字段,那么使用 SHA 的简单散列或使用 DES 的单向加密,或者 IDEA 使用盐来防止彩虹表实际泄露它们。这对于密码或其他访问 secret 很有用。

Python 和 webapps 让我想起了 GAE,所以您可能想要一些不对每个数据库事务进行加密/解密的东西,因为这些在 GAE 上已经不便宜了。

加密数据库的最佳实践是使用用户自己的 secret 加密字段,但包括一个加密用户 key 的非对称后门,这样您(而不是任何有权访问数据库源文件或表的人) ) 可以使用您的 secret key 解密用户 key ,如果恢复或其他需要的话。

在这种情况下,用户(或您或受信任的代表)只能退出和解密他们自己的信息。如果您认为需要通过加密来保护用户的字段,您可能希望在验证用户 secret 时更加严格。

在这方面,一些 secret 词的密码(而不是密码)是一种鼓励的好习惯,例如“in the jungle the mighty Jungle”。

编辑:刚看到您的更新。存储 OAuth 的最佳方式是给它们一个较短的生命周期,只请求您需要的资源,并在获得长 token 时重新请求它们。最好围绕获得身份验证、获得访问权限和退出进行设计,而不是将 key 留在后门下 10 年。

因为,如果您需要在用户上线时调用 OAuth,您可以按照上述操作并使用用户特定的 secret 进行加密。您还可以从加密计数器(使用用户密码加密)中生成 key ,这样实际的加密 key 在每次交易时都会发生变化,并且计数器以明文形式存储。但在使用前请检查此模式的特定加密算法讨论。一些算法可能不适合这个。

关于python - 如何安全地存储加密 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9198494/

相关文章:

python - Virtualenv - Python 3 - Ubuntu 14.04 64 位

python - 生成随机颜色 (RGB)

database - Elasticsearch : Parent child vs Nested Document

iis - WiX:安装程序始终更改AppPool以启用32位应用程序

python - 在 Python 中实现离散高斯核?

python - Opencv:从 R 和 T 计算基本矩阵

web-applications - 使用 Tomcat 的应用程序安装程序

java - 我如何用 Jersey (java)初始化休息服务器中的对象?

如果列不存在,MYSQL如何更改表

java - 标量 : P2P key-value database - your opinion please