30

注意:为了澄清,这不是 Firebase API 密钥,这可能更像是一个令牌......客户端应用程序拥有的东西,服务器端点验证。

我们正在努力更好地保护 API 密钥(想想用于验证客户端到端点的令牌)。这都将在我们的内部网络上,但我们仍然希望确保只有我们的移动客户端可以调用端点。

我在想我们可以将 API 密钥放在 Firebase 远程配置参数中(应用内置的默认值无效)。但是,远程配置的 Firebase 文档说:

不要将机密数据存储在远程配置参数键或参数值中。可以为您的项目解码存储在远程配置设置中的任何参数键或值。

我不确定这是否只是指与应用程序捆绑在一起的默认值,或者它是否也适用于远程加载的值。一旦我们有了密钥,我们就可以通过我们的 MDM 提供商对其进行加密并将其存储在设备上。

此外,远程配置数据到应用程序的传输是加密还是明文?

感谢任何人都可以提供有关远程配置的更多信息。

4

2 回答 2

5

这取决于您希望保留 API 密钥的安全性。API 密钥允许某人做什么?如果只是为了向其他服务(例如 YouTube 数据 API)识别您的应用,那么可能发生的最坏情况是恶意用户用尽了您对该资源的配额。另一方面,如果密钥允许持有者在没有进一步身份验证和授权的情况下对重要数据进行一些不可逆的更改,那么您永远不希望它以任何形式存储在他们的设备上。

您对 Firebase 文档的引用回答了您的问题。一般来说,您不应该在您的应用程序中存储私钥。查看这个问题的答案以获得详尽的解释。

使用 Firebase 的远程配置几乎不比在应用程序包中发送密钥更安全。无论哪种方式,数据最终都会出现在用户的硬件上。然后,恶意的人理论上可以访问它,无论我们认为这样做有多么困难。

另外,我不能肯定地说(你应该能够轻松地测试这个),但我非常怀疑远程配置值是以纯文本形式发送的。默认情况下,谷歌通过 https 做所有事情。

于 2017-05-03T07:29:00.983 回答
1

@Frank van Puffelen 可以确认这一点,但据我了解,Firebase 远程配置在HTTP请求上使用HTTPS ,这使得更难嗅探应用程序和 Firebase 远程配置之间共享的信息,而不是反编译 APK 并读取生成的字符串(如果使用生成的字符串常量)通过 Gradle 构建配置。例如,当使用网络代理嗅探器(例如Charles Proxy )调试应用程序时,您无法查看端点详细信息,除非由于 HTTPs 请求和最新 API 版本中的更新安全措施,应用程序在调试模式下编译。

请参阅是什么让“https”网站比“http”更安全?.

HTTP协议在传输时不使用数据加密,因此您的个人信息可能会被第三方截获甚至操纵。为了捕获网络信息(密码、信用卡号、用户 ID 等),黑客使用一种称为“嗅探”的方法。如果网络数据包未加密,则可以在黑客应用程序的帮助下读取和窃取其中的数据。

或者,HTTPS 可以在您的计算机和服务器之间传输期间保护任何类型的数据,包括密码、短信和信用卡详细信息。HTTPS 通过使用 TSL 协议(通常称为 SSL)保护您的数据机密,该协议是一种安全证书,可提供三层保护,例如加密、数据完整性和身份验证。SSL 证书使用所谓的非对称公钥加密技术,或公钥基础设施 (PKI) 系统。PKI 系统使用两种不同的密钥来加密通信:公钥和私钥。任何用公钥加密的东西都只能用对应的私钥解密,反之亦然。此外,HTTPS可以保护您免受中间人攻击、DNS重新绑定和重放攻击等黑客攻击。

进一步的安全措施

  1. Dexguard根据其登陆页面提供字符串加密。我已经给他们发了一条消息,正在等待独立开发者的成本。
  2. 使用公共/私有 API 密钥交换可能是额外的安全层。但是,我需要进一步研究实现以更好地理解这个选项。
于 2018-10-14T19:54:30.627 回答