注意:为了澄清这不是Firebase API密钥,这可能更像是一个令牌......客户端应用拥有的东西,服务器端点验证。
我们正在尝试更好地保护API密钥(认为用于验证客户端到端点的令牌)。这将全部在我们的内部网络上,但我们仍然希望确保只有我们的移动客户端可以调用端点。
我想我们可以将API密钥放在Firebase远程配置参数中(应用程序内置了无效的默认值)。但是,远程配置的Firebase文档说:
不要将机密数据存储在Remote Config参数键或参数值中。可以解码存储在项目的远程配置设置中的任何参数键或值。
我不确定这是仅仅指的是与应用捆绑在一起的默认值,还是它也适用于远程加载的值。获得密钥后,我们可以对其进行加密,并通过我们的MDM提供商将其存储在设备上。
此外,是否将远程配置数据传输到应用程序加密或完成明文?
感谢任何人提供有关远程配置的更多信息。
答案 0 :(得分:2)
这取决于您希望保留API密钥的安全性。 API密钥允许某人做什么?如果只是将您的应用识别为其他服务,例如YouTube数据API,则可能发生的最糟糕情况是恶意用户会占用该资源的配额。另一方面,如果密钥允许持有者在没有进一步认证和授权的情况下对重要数据进行一些不可逆转的更改,那么您永远不会希望它以任何形式存储在他们的设备上。
Firebase文档中的引用可以回答您的问题。通常,您不应该在应用中存储私钥。请查看this question的答案,以获得详尽的解释。
使用Firebase的远程配置几乎不比在应用程序包中发送密钥更安全。无论哪种方式,数据最终都会出现在用户的硬件上。无论我们认为有多么困难,恶意的人理论上都可以访问它。
另外,我不能肯定地说(你应该能够轻松测试这个),但我强烈怀疑远程配置值是以纯文本形式发送的。 Google默认会通过https执行所有操作。
答案 1 :(得分:0)
@Frank van Puffelen可以确认这一点,但是据我了解,Firebase Remote Config在 HTTP 请求上使用 HTTPS ,这使得嗅探应用程序与Firebase之间共享的信息更加困难远程配置与反编译APK并读取using string constants generated by Gradle build configurations生成的字符串。例如,当使用诸如 Charles Proxy 之类的网络代理嗅探器调试应用程序时,您将无法查看终结点详细信息,除非该应用程序由于HTTP请求和更新的安全性措施而以Debug模式编译。最新的API版本。
请参见What makes "https" sites more secure than "http"?。
HTTP协议在传输数据时不使用数据加密,因此您的个人信息可能会被第三方拦截甚至操纵。为了捕获网络信息(密码,信用卡号,用户ID等),黑客使用一种称为“嗅探”的方法。如果网络数据包未加密,则可以借助黑客应用程序读取和窃取其中的数据。
或者,HTTPS可以在计算机和服务器之间的传输过程中安全地保存任何类型的数据,包括密码,短信和信用卡详细信息。 HTTPS通过使用TSL协议(通常称为SSL)使您的数据保密,TSL协议提供了三层保护,例如加密,数据完整性和身份验证。SSL证书使用所谓的非对称公钥加密,或公钥基础结构(PKI)系统。 PKI系统使用两种不同的密钥来加密通信:公共密钥和私有密钥。使用公钥加密的任何内容只能由相应的私钥解密,反之亦然.HTTPS可以保护您免受中间人攻击,DNS重新绑定和重播攻击等黑客攻击的影响。 / p>