[英]How Do I Protect Decryption Password And Salt in APK
我正在創建一個使用Android手機更新其固件的產品。 android應用程序會自動下載固件的加密版本,對其進行解密,然后將其發送到設備的引導加載程序。 為了生成相同的密鑰,我在代碼中指定了密碼和鹽。 我擔心apk會被反編譯,並且有人可以解密我們的固件。
有沒有更好的解密/加密文件或保護代碼的方法?
碼:
private byte[] DecryptFile(byte[] encryptedFileBuffer) {
final int iterationCount = 10;
byte[] dataDecrypted = null;
SecretKey secKey = null;
try {
byte[] salt = "salt1234".getBytes();
String accessThingy = "Password";
KeySpec keySpec = new PBEKeySpec(accessThingy.toCharArray(), salt, iterationCount);
secKey = SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);
AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount);
Cipher desCipher;
// Create the cipher
desCipher = Cipher.getInstance(secKey.getAlgorithm());
desCipher.init(Cipher.DECRYPT_MODE, secKey,paramSpec);
dataDecrypted = desCipher.doFinal(encrptedFileBuffer);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
return dataDecrypted;
}
是的,沒有。
不 ,如果解密例程可以由攻擊者執行(為什么不執行),則固件將受到損害。 避免這種情況的唯一方法是為設備上的密鑰添加保護。 您可以考慮為此提供OS /硬件支持,或者例如將密鑰/密碼存儲在設備外部。 但是,一個受損的設備會泄漏固件。 這就是DRM的難題。
是的,就像您似乎在使用PBKDF1,MD5和DES一樣,它們都不是特別安全的。 MD5是該列表中最破損的算法,但它實際上不太可能成為問題。 您應該改用PBKDF2,SHA-2和AES。 嘗試這個答案 ,Java 8還添加了對帶有SHA-2的PBKDF2的支持。 或者,您實際上可以使用完全隨機的密鑰,而不是使用基於密碼的加密(PBE)。
您可能還需要考慮使用非對稱原語(ECDSA / RSA)進行加密和代碼簽名。
是否可以將解密移至設備本身? 假設沒有任何方法可以從設備讀回程序,則最終用戶將無法通過這種方式訪問代碼(這也會在此處引起問題)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.