以下資訊以應用程式含有不安全加密模式的開發人員為對象。即是,利用靜態運算的私密金鑰、鹽或初始化向量 (IV) 產生的加密文字。請查看您應用程式的「Play 管理中心」通知,以尋找不安全加密的所在位置。
請查看您應用程式中用於加密操作的靜態運算金鑰、初始化向量和/或鹽,並確保這些值安全建構。例如,以下程式碼使用可靜態運算的私密金鑰和可靜態運算的初始化向量:
// Console alert refers to this method
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);
}
// The unsafe key and initialization vector are here and should be changed
byte[] cipherText = encryptionUtil(“abcdef...”, “010203040506”, plainText);
靜態運算值 靜態運算值是每次執行您的應用程式時均相同的值。靜態運算的加密值可以從您的應用程式中擷取,並用於攻擊應用程式的加密資料。即使您使用過往以複雜方式操縱金鑰、初始化向量和鹽,若這些操縱在每次執行程式時相同,它們仍然不安全。
Android 最佳策略 建議您使用 Jetpack Security 進行對稱加密。如果您的應用程式加密 API 金鑰、個人識別資料 (PII) 或其他敏感資料,EncryptedSharedPreferences 可用於安全儲存這些資料,而無需擔心私密金鑰、初始化向量和鹽的出現。此頁面提供更多最佳策略和範例。為了將資料安全傳輸到其他系統,開發人員應該使用 TLS/SSL 保護傳輸中的資料。
Jetpack Security 使用 Google 開放原始碼項目 Tink 處理對稱的身分驗證加密。對於有關低級加密操作的進階使用案例,建議直接使用 Tink。
如果上述 Android 最佳策略不符合您的使用案例,且您必須明確管理金鑰、初始化向量和鹽,則建議遵循以下標準 :
您的應用程式將再次接受審查。如果未正確更新應用程式,您仍會看到警告。 此程序可能需時幾小時。
如有關於此漏洞的技術問題,請在 Stack Overflow 發佈並加上「android-security」標籤。
就此文章提供意見
相似问题