如何在客户端二进制文件中保留敏感信息?

Posted

技术标签:

【中文标题】如何在客户端二进制文件中保留敏感信息?【英文标题】:How to preserve sensitive information in Client-Side-Binary? 【发布时间】:2012-01-31 21:36:16 【问题描述】:

我期待开发一个 android / iPhone 应用程序,这些应用程序将使用带有嵌入式客户端密钥的私有 API(非免费)。

现在,因为可以对应用程序二进制文件进行逆向工程并删除字符串。我担心会因为将私有 API 暴露给攻击者而丢失我的客户端密钥。

如何管理这个?您能否提供讨论此类情况的文章的链接?

考虑到我对私有 API 有开发访问权限,我可以在其中内置什么机制来保护整个系统的隐私。

【问题讨论】:

【参考方案1】:

如果您可以访问您的应用程序代码,则始终可以使用私有 API(也请参阅 this thread)。不过,你可以让它变得更难。您可以通过以下选项限制 API 的使用

1) 如果它不是“您的”API,请不要将密钥放入应用程序中,而是放入您正在运行的服务器中以充当外部服务的代理(您可能仍需要另一个密钥供您的服务器进入然后应用程序)

2) 加密/加扰密钥,使其不易被抓取:

加扰的简单示例:将密钥放入文件中;生成一个相同长度的随机文件;将密钥文件与随机文件异或(并再次将其写入磁盘);每当您需要密钥时,读取两个文件并再次对它们进行异或(任何可逆操作而不是异或都可以 - 更复杂的操作,分布在您的代码中会使逆向工程师更难) 使用遍布您应用的密码加密您的密钥(在部署时,Android 应用无论如何都会被混淆,因此查找起来会有些困难)

3) 如果它是您的服务或您设置了代理,请限制每个客户端/IP 的使用次数或仅通过您的代理提供部分服务

注意,如果您的合同禁止公开您的密钥,甚至可能需要选项 1。

【讨论】:

(1) 再次将其放在服务器上会产生保护服务器url的问题。 (2) 我想知道其他方法,因为我担心反编译器。 (3) 如果未知手机作为客户端,如何限制每个客户端/IP 的使用?请提出其他建议。 1) 当然,这就是我所说的 - 你的客户不会得到实际的密钥 3) 我不确定问题应该出在哪里,例如将服务的使用限制为每个 IP 每天 10 次(无论您是否“了解”电话) 2) 可能您在这里期望过高 - 您无法完全避免逆向工程(请参阅我现在在上面链接的主题) (2) 这就是为什么我说,我想知道更多的方法。

以上是关于如何在客户端二进制文件中保留敏感信息?的主要内容,如果未能解决你的问题,请参考以下文章

存储在文件系统中的基于反应本机的应用程序中敏感的大型二进制数据的安全风险?

Android 逆向Android 逆向方法 ( 静态逆向解析 | 函数调用分析 | 动态运行跟踪 | 运行日志分析 | 文件格式解析 | 敏感信息分析 | 网络信息监控 | 环境伪装模拟 )

如何使用 socket.io 发送图像文件(二进制数据)?

在python中如何从二进制文件中读取信息

Visual Studio 2010 调试二进制文件的版本控制。要保留哪些文件?

对shell脚本进行加密