1

我正在开发一个 sdk 供第三方应用程序使用,我需要对来自我服务器上 sdk 的请求进行身份验证。

现在我通过在 sdk 中硬编码一个私有秘密来解决这个问题,然后 sdk 使用这个秘密来散列(md5)它的请求参数作为一个标志,它与其他参数一起发送到服务器。然后服务器可以检查签名,看它是否由正确的私人秘密签名,因此,我开发了sdk。

问题是:

  • 我怎样才能保护这个私人秘密免受逆向工程?
  • 我可以通过在android NDK中封装请求过程来保护私有机密吗?
  • 还有其他更好的方法来实现我的根本目的:验证我的 sdk 请求吗?那里的其他sdk如何做?

谢谢。

4

1 回答 1

1

如果您试图阻止第三方使用他们自己的软件而不是您提供的软件,这是不可能的

您需要确保您的 API 提供了安全功能,并且您不依赖于 SDK 中存在的控件。例如,不要通过您的 API 暴露 SDK 根本没有命令调用的敏感数据;在服务器端使用速率限制,而不仅仅是在 SDK;等等。这与网站和客户端 javascript 出现的情况相同:您根本无法信任客户端脚本的完整性,并且您确保您的网站无论如何都是安全的。

限制 API 使用的正常方式有两个:

  1. 用户身份验证 - 每个想要使用您的服务的用户都会创建一个用户帐户,并且必须建立一个经过身份验证的会话才能使用它。
  2. API 密钥 - 每个想要访问您的 API 的第三方开发人员都被授予一个 API 密钥,并由他们来保护他们的密钥。API 密钥用于验证请求,例如通过在请求上附加 MAC
于 2013-08-23T14:05:18.380 回答