【问题标题】:Using pycrypto appengine with python 2.7在 python 2.7 中使用 pycrypto appengine
【发布时间】:2012-02-20 20:07:27
【问题描述】:

保护需要在 Google Appengine 中的代码中使用的对称密钥的最佳方法是什么?

我们的应用程序使用 Python 2.7

编辑:我们有一些我们想要保护的数据库字段,需要在代码中访问,但没有理由将它们以纯文本形式留在数据库中。显然,我想让检索密钥变得尽可能困难(理解这绝不是不可能的)。

【问题讨论】:

  • 保护,因为您不希望它出现在代码中,或者您不想让某些 Google 员工窥视您的应用并看到它?

标签: python google-app-engine pycrypto


【解决方案1】:

如果您不信任运行代码的环境,则无法绝对保护密钥。您可以将(部分)密钥存储在受信任的位置,并且只接受来自域的密钥查询/您的应用程序的 IP。但它仍会在该 appengine 实例的内存中。

传出消息的最佳解决方案是使用公钥加密。让您的代码使用远程方的公钥,因为这些不必保密。然后只能用遥控器的私钥解密。

如果您不能信任 appengine 的环境,则无法解密传入的公钥消息,因为这需要您的密钥可供应用程序使用。

编辑:既然您已添加要保护某些数据库字段,您是否考虑过hashing 他们?

【讨论】:

  • 感谢您的回答。没有完美的方法来保护任何安全密钥,每个系统都有漏洞。我更喜欢“最好”的方法。例如,我认为仅将密钥存储在内存中比将密钥存储在源代码中要好,因为它会增加检索它的难度。
  • 这不就是把问题换成另一个问题吗?如果您想将密钥保存在内存中而不是磁盘上,则意味着您必须通过安全方法从另一个安全位置检索它。这意味着两个额外的问题。 :-) 如果您不信任 Google Appengine(我并不是说您应该或不应该),请不要使用它。
  • 您好 Roland,您可以修改 appengine 部署脚本,以便在部署代码时输入密码。这将存在于已部署代码的内存中,即使您的应用程序代码受到损害,数据也不会受到损害。虽然仍然不完美,但我认为这比将秘密留在源代码中更安全。我相信环境,但这并不意味着不应该尽可能采取预防措施。
  • 嗨,理查德。我很难想出一个你不敬酒的实际威胁场景。 :-) 如果有人通过任何方式(窃取您的凭据、在 google 内“转向”某人等)访问您的 appengine 实例,他可能会在您输入密码时拦截您的密码。 Google 可以在您不注意的情况下记录您所做的所有操作。如果攻击者真的想要那个秘密,那么总是有橡胶软管密码分析。 :-( 为了安全地使用输入的密码或密码,希望在运行应用程序的服务器的控制台上输入它!
  • 绝对如果有人获得了实例的访问权限,他们可以转储内存并获取密钥(使用控制台或部署脚本密码)。与橡胶软管相同。没有任何秘密可以被完全保护,安全就是要找到最好的折衷方案。我们的源代码和应用程​​序数据存在于许多地方,我们的服务器实例存在于一个地方,因此我们通过只将秘密放在那里并相信 Google 会做“合理”的保护工作来减少攻击空间。不幸的是,散列数据将无法恢复,这是一项要求。
猜你喜欢
  • 2011-12-06
  • 1970-01-01
  • 2014-07-04
  • 2019-07-13
  • 2012-01-18
  • 2018-07-19
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多