簡體   English   中英

如何保護APK中的解密密碼和鹽

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM