rut*_*ord 10 python database cryptography web-applications pycrypto
我正在寻找使用诸如pycrypto之类的加密库来加密/解密我的python webapp数据库中的字段.但加密算法需要密钥.如果我的源代码中有一个未加密的密钥,那么在我的服务器上尝试加密db字段似乎很愚蠢,如果有人可以访问db文件,他们也可以访问我的python源代码.
是否有保护所用密钥的最佳实践方法?或者另一种加密db字段的方法(在应用程序而不是db级别)?
更新:我试图保护的字段是oauth令牌.
更新:我想没有常见的方法来避免这种情况.我想我无论如何都需要加密字段,因为db文件可能会被备份和移动,所以至少我会将问题减少到一个易受攻击的位置 - 查看我的源代码.
更新:当用户离线时,需要将oauth令牌用于api调用,因此在这种情况下使用他们的密码作为密钥是不合适的.
如果您正在加密只需要验证(而不是回忆)的字段,则使用 SHA 的简单散列或使用 DES 的单向加密,或使用盐的 IDEA 以防止彩虹表实际显示它们。这对于密码或其他访问机密很有用。
Python 和 webapps 让我想到了 GAE,所以你可能想要一些不对每个数据库事务进行加密/解密的东西,因为这些在 GAE 上已经不便宜了。
加密数据库的最佳实践是使用用户自己的秘密对字段进行加密,但要包含一个非对称后门来加密用户的秘密密钥,以便您(而不是任何有权访问数据库源文件或表的人)可以解密用户密钥与您的秘密密钥,应该恢复或其他需要。
在这种情况下,用户(或您或受信任的委托人)只能退出和解密他们自己的信息。如果您认为需要通过加密保护他们的字段,您可能希望在验证用户机密时更加严格。
在这方面,诸如“在丛林中强大的丛林”之类的一些秘密词的密码(而不是密码)是一个值得鼓励的好习惯。
编辑:刚刚看到你的更新。存储 OAuth 的最佳方法是给它们一个较短的生命周期,只请求您需要的资源,并在获得长令牌后重新请求它们。最好围绕获得身份验证、获取访问权限和退出进行设计,而不是将密钥留在后门下 10 年。
因为,如果您需要在用户上线时调用 OAuth,您可以按照上述操作并使用用户特定的机密进行加密。您还可以从加密计数器(使用用户机密加密)生成密钥,以便每次交易时实际加密密钥都会更改,并且计数器以明文形式存储。但在使用前请检查此模式的特定加密算法讨论。某些算法可能对此不太满意。