Android凭据存储:保存私钥的位置?

时间:2015-10-08 08:55:04

标签: android security

我的应用程序包含我想要加密的安全内容。我想在本地存储密钥(主要是因为我的用户不使用任何身份验证机制进行登录)。

这些是我在Android中找到的解决方案

  • Android Keystore System:这听起来像是一个完美的解决方案,它显着提高了本地存储密钥的安全性,但它只为APIS 18+提供加密协议,而我的应用程序需要支持API 14.
  • KeyChain API:它主要帮助在应用之间共享安全密钥,还需要用户参与选择证书链。
  • 从Android Security and Design,如何保存Android公钥:

      

    要保护您的公钥免受恶意用户和黑客的攻击,请不要这样做   将它作为文字字符串嵌入任何代码中。相反,构建   字符串在运行时从片段或使用位操作(例如,   与其他一些字符串的XOR)来隐藏实际的密钥。关键本身就是   不是秘密信息,但你不想让它变得容易   黑客或恶意用户用另一个密钥替换公钥。

    虽然这听起来像是一个很好的提示,但它并没有真正增加安全性。

那么在不要求用户身份验证的情况下保存私钥的最佳做法是什么?

2 个答案:

答案 0 :(得分:2)

查看这五个安全 API 密钥存储的最佳实践,避免暴露密钥的麻烦:

1.不要将 API 密钥直接存储在代码中。

在您的源代码中嵌入您的 API 密钥似乎是一个实用的想法,但这是一个安全风险,因为您的源代码最终可能会出现在许多屏幕上。相反,将您的 API 密钥和秘密直接存储在您的环境变量中。环境变量是动态对象,其值在应用程序之外设置。这将让您轻松访问它们(例如,通过在 Python 中使用 os.getenv() 方法,或在 Node 应用程序中使用 dotenv 包),并避免在您推送代码时意外暴露密钥。

2.不要将您的 API 密钥存储在客户端。

如果您正在开发 Web 应用程序,请记住始终将您的凭据存储在后端。从那里获取 API 结果,然后将它们传递给前端。 如果您是一名移动开发人员,那么将您的凭据存储在您的应用程序之外是非常重要的,因为经验丰富的用户可以轻松地为您的应用程序预留工程师并找到您的凭据。尝试将您的 API 凭据存储在您拥有的单独服务器上,并使用同一台服务器获取 API 结果,然后再将它们传递给客户端。

3.不要在代码存储库中公开未加密的凭据,即使是私有的

我们都喜欢帮助社区和在线共享代码,但很容易忘记您在代码中的凭据并让它们暴露于世界。存储库经常被克隆并分叉到新项目中,让新开发人员可以访问他们的完整历史记录。存储库历史记录中的任何凭据都将存在于从该源生成的所有新存储库中。
即使是私有存储库也可能使您容易受到黑客攻击,因此您应该将任何公开或私有存储库中公开的 API 密钥视为已泄露。相反,在发布之前删除您的 API 密钥和密钥,方法是使用 gitignorefile 指定 Git 忽略的文件,或者只是记住在发布前散列您的凭据。

4.考虑使用 API 机密管理服务

将您的 API 凭据存储为环境变量将为您省去很多麻烦,但如果您正在与一个大团队一起开展项目,您可能会发现很难让每个人保持同步。为了方便和安心,一种解决方案是使用诸如 AWS Secret Manager 之类的秘密管理服务。这不仅可以保护您的密钥,还可以帮助您检索和管理整个团队的凭据。

5.如果您怀疑存在违规行为,请生成新密钥

如果您认为您的 API 凭据已被盗用,请保持冷静,只需撤销您的密钥即可。这可以通过以下步骤在 Amadeus for Developers 门户上轻松完成:

  1. 登录您的帐户。
  2. 访问您的自助服务工作区
  3. 选择相关应用
  4. 点击刷新按钮生成新密钥。

结论

没有一种适用于安全 API 密钥存储的万能解决方案 - 您需要考虑多种因素,例如团队规模或项目范围,才能找到适合您的解决方案。我们希望本文中介绍的一些最佳做法能够帮助您保护自己的凭据,并避免以后出现不必要的麻烦和麻烦。

答案 1 :(得分:0)

Android不允许其他应用访问私有共享首选项的内容,因此这可能是一个存储的地方,它不依赖于访问权限,而不依赖于事实数据不存储在那里。

然而,在安全随机的帮助下生成密钥并且不捆绑到应用程序中非常重要。 .apk的内容受到的保护要少得多,并且可以在任何有根设备上访问。