保护Android应用程序

3
我已经“保护”了我的安卓应用和提供金融交易服务的TLS服务器之间的通信,目前该服务正在开发中。安全凭据存储在包含在Android apk中的BKS密钥库中。密钥库的密码在应用程序源代码中以明文形式显示。我担心如果有人对应用程序进行反向工程,他们将能够冒充另一个用户并危及服务的安全性。我想知道是否存在实现上的问题,如果其他人也有这种担忧,如何最好地防止这种可能性。
4个回答

2
无论何时,当您在客户端存储安全数据时,都可能会被反向工程攻击泄漏。您可以尝试在代码中模糊其内容,但是决心强烈的黑客总能找到方法。因此,使其更加安全的唯一方法是不要在代码中明文存储密码。也许您可以在应用程序启动时询问用户输入一些 PIN 码,并使用它来解密密码?

肯定要先使用这个PIN加密密码,因此密码需要是明文吗? - J0hnG4lt
如果您正在运行服务器,请先让用户使用 PIN 在服务器上进行身份验证,然后通过 SSL 返回密码。 - Alex Gitelman
1
服务器如何获取PIN以进行身份验证?任何身份验证凭据都应该通过安全连接(在此过程中还不存在)或基于约定的加密协议进行加密(这是一种可能性)。 - J0hnG4lt

2
您的应用程序中的凭据是否对每个用户都是唯一的,即每个用户都有自己的带有唯一凭据的apk?如果您只有一个具有相同凭据的apk,则这与没有安全性一样糟糕。更糟糕的是,它会给人一种虚假的安全感。
您(您的雇主)应该真正聘请一位安全专家从安全角度设计您的系统。
以下是我会采取的措施:
  1. 应用程序不带安全凭据。
  2. 服务器上生成每个用户的安全凭据。
  3. 每个用户都获得秘密激活代码,该代码在安全环境中生成并通过另一渠道交付。最好通过邮件发送。激活码是有时限制的,只能使用一次。
  4. 首次使用时,用户在应用程序中输入激活代码,该代码通过安全(https)通道启用一次性下载凭据。
  5. 用户提供密码以加密存储在设备上的凭据。
  6. 每次使用应用程序时,用户必须提供此密码。如果应用程序长时间未使用,则应用程序必须超时会话并在用户想要访问时再次请求密码。
但不要仅凭我的话。如果涉及财务交易,您仍然需要安全专家。

1

我相信Diffie-Hellman密钥交换就是我正在寻找的。我不想使用涉及用户的复杂过程重新实现自己的DH版本。


DH已在Android上实现(搜索SO以查找示例)。它也作为HTTPS的一部分使用。但我不明白它如何帮助您安全地存储密码。 - Peter Knego
除非我漏掉了什么,否则它将允许我删除存储在应用程序中用于保护与服务器连接的BKS密钥。密钥交换将为与服务器的每个会话创建一个新密钥,从而消除了对存储密钥的要求。我将实施它并报告结果。 - J0hnG4lt
1
这与使用https相同,但没有防止中间人攻击的保护。 - Peter Knego
2
只需在服务器上使用有效的证书和用户登录来识别用户(如果需要),就可以使用HTTPS。 - Peter Knego
约翰,你当时用了什么解决方案? - rohitverma

0

目前正在为一家处理公司编程-

他们有一套交易应用程序或销售点应用程序的规则和法规。

这些规则在网上列出,被称为PCI验证,必须提供一定量的安全性,否则将面临Visa,inc或其他许多公司的诉讼。

关于您的问题,它不遵循PCI合规性,因为这是一个安全问题。

请阅读PCI合规性,以便完全理解安全性,因为妥协持卡人数据并不好。

:)


也尝试实现一个Restful API。 - Keeano
感谢您的评论:我确实意识到安全方面的问题,因此才会提出这个问题。我想从技术角度来解决这个问题,以了解SO在这种特定情况下的建议。还有许多其他采用这种安全方式的Android应用程序,它们可能会从这次讨论中受益。 - J0hnG4lt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接