使用AES密钥安全工作(Android服务器)

时间:2018-08-06 09:59:05

标签: android encryption aes rsa

我从Android ->加密发送到服务器的文件,后来又收到了相同的文件,并且必须能够对其解密。

我从Server ->保存了这些加密文件,以在必要时将其返回并解密。

Android和服务器必须知道AES的{​​{1}}键。目前,我的encrypt / decryptAES不安全,并用代码编写。

请记住,如果我将加密的文件上传到服务器并且要在2个月后下载,则必须知道用于加密的密码。服务器不加密,仅返回它接收到的加密文件或将其解密以进行其他操作。

我已经考虑过要在Android中生成IV key密钥,并且Android会通过AES将其安全地发送到服务器。这样安全吗?因此,每个用户的所有文件都将拥有自己的RSA密码,并且只会与AES一起向服务器发送一次。

我该怎么做才能获得更高的安全性?

2 个答案:

答案 0 :(得分:0)

  • 如果您可以在服务器端进行加密和解密,请这样做。
  • 始终使用SSL在实体之间进行数据传输。
  • 尝试在每个会话中使用唯一的密钥。
  • IV可以简单发送。
  • 使用安全随机数生成IV和密钥。
  • 请勿使用ECB模式。
  • 使用标准填充模式。
  • 尝试使用密钥大小为256或更大的AES。
  • 将加密文件发送到服务器时,请尝试发送密钥并 将它们存储在服务器端。您以后可以同时获取密钥和加密文本。
  • 您可以使用密钥派生算法在手机上生成密钥 就像来自用户输入的PBKDF2。此方法不需要保存密码,但是需要执行 每次从用户输入获取PBKDF2。
  • 永远不要试图通过模糊来实现安全性。

安全性是逐步的方法,每一步都取决于数据的重要性。

答案 1 :(得分:0)

您实际上需要加密数据吗?

https://www.schneier.com/blog/archives/2015/06/why_we_encrypt.html

就像您的问题所暗示的那样,如果您确实具有 机密 要求,那么您还会继承其他挑战。 密钥分发,密钥轮换密钥协议

如果您决定,则需要加密数据,并且双方都需要密钥,我来看看...

  • 密钥协议协议; Diffie–Hellman。这给移动应用程序带来了显着的好处。您不必互相发送密钥。在Android / iOS环境中,当人们可以采用相对简单的方法来破坏TLS或证书固定保护时,该功能特别有用。
  • 从代码中删除硬编码的密钥。首先,对于每个正在使用的应用程序,您都有一个密钥。您将如何旋转此键?如果继续执行此路线,则可以考虑进一步加固。您可以找到对静态字符串进行加密的库,从而可以使其免受静态代码分析的影响。尽管如此,这种保护还是不利于调试器在apk中搜索特定模式。
  • 硬件支持的安全性。如果您只关心较新的Android设备,我将始终尝试使用硬件支持的加密技术生成密钥或存储密钥。 https://developer.android.com/training/articles/keystore。它具有密钥生成(https://developer.android.com/reference/javax/crypto/KeyGenerator)。

此处还有另一个与Android加密稍相关的问题:Double encryption

PS-您可能希望将其发布在:https://security.stackexchange.com/