如何为Android和服务器创建相同的密钥

时间:2014-04-20 11:41:13

标签: php android security ssl encryption

基于以下链接的代码

https://github.com/SeRPRo/Android-PHP-Encrypt-Decrypt

我已经在android和服务器之间实现了自己的加密/解密机制(用PHP编写的API)。

该示例使用相同的IV,但在现实世界的情况下,有人会在每次调用中使用不同的IV。这很容易实现,因为无论是否听取,都可以转移IV。

我的问题是如何在注册期间为每个新用户创建一个不同的密钥,在Android设备和服务器端(唯一的密钥将存储在MySQL服务器端和SQLite或android端的共享首选项)?< / p>

如果秘密密钥是在android或服务器上创建并传输到其他部分,那么它可能被“监听器”窃取,然后通信就不再安全了。

如果密钥是由算法创建的,那么必须在android和server中实现相同的算法。 android apk文件可以被反编译,因此可以找到算法,然后预测密钥。

好像是恶性循环。在客户端(android)和服务器端为每个用户创建相同的唯一密钥的任何安全方法,而不必承担通过POST请求将其传输到其他部分的风险吗?

PS。我知道SSL,https但我正在寻找一个更简单的解决方案,因为我试图保护登录详细信息(用户名/密码)等数据而不是“高度敏感的数据”(例如信用卡等)。阅读有关如何实施SSL / https的信息让我感到困惑,而不是让事情变得简单。

1 个答案:

答案 0 :(得分:0)

在这种架构中使用双方对称密钥(服务器和客户端)是非常危险的,因为你提到的原因是:如果有人破解你的应用程序,他们可能也会破解密钥。当您提到您正在管理高度敏感的数据时,情况会更糟。通常(不是在这种情况下),破解者会尝试破解任何应用程序,但是如果有这些敏感数据,他们将会加倍努力(并且可能会成功)。

这就是为什么这种架构的推荐方法是非对称加密系统,因为你不必存储任何密钥(公钥可以在某些公共HTTP地址中使用) ,这样你可以使用它来加密消息,但它只是保存私钥的服务器,它将能够解密这些消息。我建议在这里使用SSL/TLS