如何动态获取Android应用程序中的唯一键,只有我的应用程序知道?

时间:2015-07-09 01:14:47

标签: android encryption

我在stackoverflow和其他网站上遇到过类似的问题,但是找不到满意的答案。所以我问了一个有详细要求的新问题。

我们正在构建Android应用程序,需要与应用程序服务器进行通信。

应用程序服务器和Android应用程序之间将进行握手,以将Android应用程序识别为有效源,然后获取一个服务器生成的唯一设备密钥或授权密钥。此身份验证密钥存储在应用程序中。

现在从服务器构思生成auth密钥是采取一些预定义或相互认可的字符串" Hello World"使用一些密钥" key1"用一些强对称加密算法加密它。然后服务器将使用相同的算法和相同的密钥解密。当服务器解密时,如果它得到" Hello World"然后它知道源只是android app。

现在接下来的步骤是服务器生成auth密钥并使用相同的对称密钥算法加密并将其发送到android app.Android应用程序解密并在本地存储。

现在我不想硬编码对称算法键" Key1"在应用程序端,因为任何人都可以反编译apk并知道算法和密钥然后写一些自动批处理洪水服务器请求(当然服务器端检查将检查洪水,但我想避免在应用程序端)。

我已从网上阅读以下解决方案; -

  1. 使用包名称来标识应用程序的唯一性。

  2. 生成签名证书的密钥哈希。

  3. 但所有这些信息都是公开的。我的想法是使用相同的唯一字符串作为加密密钥。

    如果有人遇到类似的问题,请指导。或者我是否在错误的方向思考,这个东西不能在app端实现?

    请分享您的经验。

1 个答案:

答案 0 :(得分:1)

你真的不能。您使用的任何密钥都将被添加到应用程序中。它都可以被轻微反编译。这就是为什么它不能以加密方式识别应用程序。您所能做的就是通过密码对用户进行身份验证。因为在这种情况下,攻击者无法攻击用户而不仅仅是应用程序而无法获取秘密。

请参阅https://security.stackexchange.com/questions/826/how-can-i-securely-authenticate-the-client-application-sending-me-data