gpt4 book ai didi

java - Android 和另一个 Java 应用程序之间的预共享 key 安全吗?

转载 作者:搜寻专家 更新时间:2023-11-01 08:48:28 27 4
gpt4 key购买 nike

我有一个与另一个 Java 应用程序通信的 Android 应用程序。对于数据加密,我使用 javax.crypto 库通过预共享 key 加密和解密数据。

根据 this 问题,可以从 APK 文件中获取源代码。因此,如果有人能够读取我的应用程序的源代码,他也能够读取/操作加密数据。

这可能是真的,那么有没有办法防止这种情况(附加措施,其他安全方法)?不知道它是否有额外的值(value),但这是我的加密代码:

private static String   IV              = "AAAAAAAAAAAAAAAA";
private static String ENCRYPTION_KEY = "0123456789abcdef";

Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
SecretKeySpec key = new SecretKeySpec(ENCRYPTION_KEY.getBytes("UTF-8"), "AES");
cipher.init(Cipher.ENCRYPT_MODE, key,new IvParameterSpec(IV.getBytes("UTF-8")));
return cipher.doFinal(input.getBytes("UTF-8"));

编辑:通信通过 NFC 发送和接收。我的主要问题是,如果有人拥有 key ,他就能够向另一方(NFC 阅读器)读写(滥用)信息

最佳答案

预共享 key 不安全!

对于只有一点 java 逆向工程技能的人来说,反编译您的 APK 文件并提取 key 只需五分钟。完成此操作后,您的加密货币实际上就没有用了。

解决此问题的标准方法是使用 key 协商算法。例如,您可以使用 Diffie-Hellman key 交换来快速安全地生成两个设备之间的共同 secret :Wikipedia on Diffie-Hellman

从生成的公共(public) secret 构建哈希并将其用作此 session 的 AES 加密 key 更加安全并且不需要太多工作。

如果 NFC 是您的传输层,您需要双向数据交换才能使 Diffie-Hellman 工作。因此,您将无法使用 Android Beam。但是,您可以在一部手机上使用基于主机的卡仿真并在另一部手机上使用读/写器模式进行双向数据传输。

顺便说一下,在通过 NFC 传输数据时使用加密是个好主意,而且通信范围仅限于几厘米,您仍然可以从几米的距离嗅探通信。 NFC 不会为您进行任何加密。

最后一句警告:密码学在实践中很难做到。在您通过加密链接发送任何有值(value)的东西之前,请确保您对自己所做的事情有很好的理解。我推荐阅读这本书,这是一本很好且实用的密码学介绍书:Bruce Schneider - Cryptography Engineering

关于java - Android 和另一个 Java 应用程序之间的预共享 key 安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25891361/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com