您的应用程序包含不安全的加密模式 - 我该如何消除此警告?

12

几天前,在Google Play控制台的“APK预发布报告”中,它开始向我发出警告。

Translated text:

几天前,在Google Play控制台的“APK预发布报告”中,它开始向我发出警告。

Unsafe encryption

Detected in APK ???

Your app contains unsafe cryptographic encryption patterns. Please see this Google Help Centre article for details.

Vulnerable classes:

c.j.a.s.J.b

在这里输入图片描述


然而,自从APK早期以来,我没有改变加密代码/描述代码。因此,我不确定为什么Google开始警告我最近的APK?

有什么解决方法吗?因为对于易受攻击的类c.j.a.s.J.b的信息并不有用。

我尝试使用Proguard + mapping.txt来回溯c.j.a.s.J.b,但无法确定那是哪个类。

你有什么办法可以摆脱Google安全警告吗?


你找到任何解决方案了吗? - Hemil Kumbhani
并没有。我没有找到任何解决方案。 - Cheok Yan Cheng
资源中是否有一个类,其完整限定名称的每个部分都以字母 cja 开始等等?例如:com.java.android.sample.Java... - Boris
试着找到使用加密类的方式,就像这个问题https://dev59.com/Ubbna4cB1Zd3GeqPa3Bw所述一样,您会发现KEY是不安全的加密方式。我通过使用Android NDK Native解决了这个问题。 - Holi Boom
1
我曾遇到同样的问题,而我没有使用任何静态密钥进行加密,但是该方法是静态的,因此我将其更改为常规类级别方法,并解决了该问题。 - AbuMaaiz
显示剩余4条评论
2个回答

3

谷歌应用商店建议使用带有函数名称的弱点类,这可以在对话框中查看。

检查您的应用程序是否具有静态计算的密钥、初始化向量和/或盐,这些值用于加密操作,并确保这些值的构造方式安全。

例如:

public byte[] encryptionUtil(String key, String iv, byte[] plainText) {
    Cipher cipher = Cipher.getInstance(“AES/GCM/NoPadding”);
    SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), “AES”);
    GCMParameterSpec paramSpec = new GCMParameterSpec(256, iv.getBytes());
    cipher.init(Cipher.ENCRYPT_MODE, keySpec, paramSpec);
    return cipher.doFinal(plainText);
  }

你正在调用一个函数:

byte[] cipherText = encryptionUtil(“abcdef...”, “010203040506”, plainText);

这里提供的加密密钥“abcdef...”是一个静态字符串。静态计算值是每次执行应用程序时相同的值。静态计算的加密值可以从您的应用程序中提取并用于攻击您的应用程序的加密数据。

因此,您可以使用EncryptedSharedPreferences来本地存储数据。

参考链接https://developer.android.com/reference/androidx/security/crypto/EncryptedSharedPreferences

或者

Jetpack Security

更多细节请参见:修复不安全的加密


安全加密库强制更新最低SDK版本为26。有没有适用于较低版本的解决方案? - Azay Gupta

0

我认为你正在使用一些带有静态存储密钥的加密/解密代码。 静态计算值是每次执行应用程序时都相同的值。静态计算的加密值可以从您的应用程序中提取并用于攻击您的应用程序的加密数据。 因此,Google建议更改存储密钥为动态生成的密钥。 为此,您可以在每次启动时生成不同的密钥。 要解决这个问题,请在每次启动时生成动态加密/解密密钥。 您可以在这里找到更多信息 https://developer.android.com/jetpack/androidx/releases/security


2
如果您需要解密以前使用旧密钥加密的某些数据,该怎么办? - Roman Samoilenko
你可以使用非对称加密来实现。这种加密方式使用不同的私钥加密数据,然后使用公钥在另一端解密数据。这个链接可能会对你有所帮助。 - Mahesh
2
如何可能拥有一个单一的公钥,可以解密使用不同私钥加密的消息?密钥不是作为独立对生成的吗? - Roman Samoilenko
我认为这与原来提出的问题无关。请提出单独的问题。 但是你可以在这里找到你的问题的答案:https://ssd.eff.org/en/module/deep-dive-end-end-encryption-how-do-public-key-encryption-systems-work。 - Mahesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接