如何保护Android应用程序中的凭据

时间:2015-09-23 15:21:30

标签: android security encryption obfuscation

我热衷于为用于连接外部服务的凭据(例如开票的API)实现高级别的安全性。

如果我将凭证作为.so(二进制文件)存储在C库中,并使用带有应用程序签名密钥的JNI访问它们,那听起来是否足够保护?

我试图评估攻击者可以轻松反编译或以其他方式进行反向工程以获取凭据。

2 个答案:

答案 0 :(得分:1)

许多开发人员都在努力解决安全问题。许多人试图以不同的名称隐藏应用程序中某处的密码"所以没有人可以找到它们#34;其他人尝试编译它们或将它们加密到应用程序等等......我们真的需要了解隐藏是安全。

如果您将密码编译到应用程序中,黑客可以轻松地从那里获取密码。逆向工程并不困难。如果您的应用程序很受欢迎,或者黑客通过努力在二进制文件中找到密码是值得的,我可以向您保证他们会找到它。

一些开发人员会在将密码编译为二进制文件之前告诉您加密密码。太好了,现在你必须在某个地方保存加密密钥,不是吗?哪里?将其编译到应用程序中,然后重新回到原点。

您需要以您无法通过黑客访问的方式将您的机密(密码本身或加密密钥,如果密码已加密)存储在应用程序之外。因此,您需要考虑的真正问题是:在哪里存储您的秘密,以便应用程序可以读取它,但黑客不能?

如何实现这一点取决于您的设计。例如,如果您安全进行身份验证的用户访问了结算API,则可以使用用户凭据安全地访问API。这样,无需全局凭据即可访问API。

为了说明一个例子:我使用我的凭据(通过HTTPS)登录您的应用程序,然后我选择了一个需要访问结算API的功能。您的应用会向API发送HTTPS请求,并在请求中包含我的凭据(标头,网址或正文,无论您喜欢什么,因为它们都是通过HTTPS保护的)。 API接收请求,验证我的凭据(以与登录过程类似的方式)并将结果返回给应用程序(或者如果凭据错误则返回"访问被拒绝"错误)。

答案 1 :(得分:0)

如果密钥在您的应用程序中,那么有动力的黑客可以找到它们......将它们放入C ++库可能会让它稍微困难一些。