1

나는 안드로이드 전화를 사용하여 펌웨어가 업데이트되는 제품을 만들고 있습니다. 안드로이드 응용 프로그램은 자동으로 펌웨어의 암호화 된 버전을 다운로드하고, 해독 한 다음 장치 부트 로더로 보냅니다. 동일한 비밀 키를 생성하기 위해 코드에서 암호와 salt를 지정합니다. 나는 apk가 디 컴파일 될 것이고 누군가가 우리의 펌웨어를 해독 할 수 있을지 걱정된다.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; 

} 

답변

1

예와 아니오.

아니요의 경우 암호 해독 루틴이 공격자에 의해 실행될 수있는 경우 (그러면 그렇지 않을 수도 있습니다) 그러면 펌웨어가 손상됩니다. 이를 방지하는 유일한 방법은 장치의 키에 보호 기능을 추가하는 것입니다. 이를 위해 OS/하드웨어 지원을 생각하거나 예를 들어 장치 외부에 키/암호를 저장하는 방법에 대해 생각할 수 있습니다. 그러나 하나의 손상된 장치가 펌웨어를 유출합니다. 이것은 DRM 수수께끼입니다.

그리고 PBKDF1, MD5 및 DES를 사용하는 것처럼 보이지만 특별히 안전하지는 않습니다. MD5는 그 목록에서 가장 깨진 알고리즘이지만 실제로 문제가 될 가능성이 가장 적은 알고리즘입니다. 대신 PBKDF2, SHA-2 및 AES를 사용해야합니다. this answer을 시도해보십시오. Java 8은 SHA-2와 함께 PBKDF2에 대한 지원을 추가했습니다. 또는 실제로 암호 기반 암호화 (PBE)를 사용하는 대신 완전 무작위 키를 사용할 수 있습니다.

암호화 및 코드 서명을 위해 비대칭 프리미티브 (ECDSA/RSA)를 고려할 수도 있습니다.

+0

이 답변에 누락 된 사항이 있습니까? 후속 조치를 잊지 마시고, 답변이 도움이 되었으면이를 수락하십시오. –

0

복호화 자체를 장치로 옮길 수 있습니까? 이렇게하면 장치에서 프로그램을 다시 읽을 수있는 방법이 없다는 가정하에 최종 사용자가 코드에 쉽게 액세스 할 수 없게됩니다.이 경우에도 문제가 발생할 수 있습니다.