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


How to create the same secret key both for Android and server

基于以下链接的代码

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

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

该示例使用相同的IV,但在现实世界中,有人会在每次通话中使用不同的IV。这很容易实现,因为静脉注射可以在不在乎是否被倾听的情况下转移。

我的问题是,如何在注册过程中为每个新用户创建一个不同的密钥,包括在android设备和服务器端(唯一的密钥将存储在MySQL服务器端和SQLite或android端的共享偏好)?

如果密钥是在android或服务器上创建的,并传输到另一部分,那么它可能会被"侦听器"窃取,然后通信就不再安全。

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

这似乎是一个恶性循环。有什么安全的方法可以在客户端(android)和服务器端为每个用户创建相同的唯一密钥,而不必冒险通过POST请求将其传输到另一部分?

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

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

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