Une clé pré-partagée est-elle sûre entre Android et une autre application java?


J'ai une application Android qui communique avec une autre application java. Pour le cryptage des données, j'utilise la bibliothèque javax.crypto pour crypter et déchiffrer les données avec une clé pré-partagée.

Selon ce question, il est possible d'obtenir le code source à partir d'un fichier APK. Donc, si quelqu'un est capable de lire le code source de mon application, il est également capable de lire/manipuler des données chiffrées.

C'est probablement vrai, alors existe-t-il un moyen d'empêcher cela (supplémentaire mesures, autre méthode de sécurité)? Je ne sais pas s'il a une valeur supplémentaire mais voici mon code de cryptage:

private static String   IV              = "AAAAAAAAAAAAAAAA";
private static String   ENCRYPTION_KEY  = "0123456789abcdef";

Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
SecretKeySpec key = new SecretKeySpec(ENCRYPTION_KEY.getBytes("UTF-8"), "AES");
cipher.init(Cipher.ENCRYPT_MODE, key,new IvParameterSpec(IV.getBytes("UTF-8")));
return cipher.doFinal(input.getBytes("UTF-8"));

MODIFIER: La communication est envoyée et reçue par NFC. Mon problème principal est que si quelqu'un a la clé, il est capable de lire et d'écrire des informations (abusées) de l'autre côté (le lecteur NFC)

Author: Community, 2014-09-17

1 answers

La clé pré-partagée n'est pas sûre!

Pour quelqu'un avec juste peu de compétences en ingénierie inverse java, il faut cinq minutes pour décompiler votre fichier APK et extraire la clé. Une fois cela fait, votre crypto est effectivement inutile.

L'approche standard pour résoudre ce problème consiste à utiliser un algorithme d'accord de clé. Vous pouvez par exemple utiliser l'échange de clés Diffie-Hellman pour générer rapidement et en toute sécurité un secret commun entre deux appareils: Wikipedia sur L'Échange De Clés Diffie-Hellman

Construisez un hachage à partir du secret commun généré et utilisez-le car votre clé de cryptage AES pour cette session est beaucoup plus sécurisée et ne prend pas beaucoup de travail.

Si NFC est votre couche de transport, vous avez besoin d'échanges de données bidirectionnels pour que Diffie-Hellman fonctionne. Par conséquent, Android Beam ne sera pas utilisable pour vous. Vous pouvez cependant effectuer un transfert de données bidirectionnel en utilisant l'émulation de carte basée sur l'hôte sur un téléphone et le mode lecteur/écrivain sur l'autre.

Utilisation du chiffrement en passant, lorsque la transmission de données via NFC est une bonne idée, la portée de communication est également limitée à quelques centimètres, vous pouvez toujours renifler la communication à quelques mètres de distance. NFC ne fait aucun cryptage pour vous.

Un dernier mot d'avertissement: la Cryptographie est difficile à faire en pratique. Avant d'envoyer quelque chose de valeur sur un lien cryptographique, assurez-vous de bien comprendre ce que vous faites. Je recommande de lire ce livre qui est un bon et pratique introduction de la cryptographie: Bruce Schneider-Ingénierie de la cryptographie

 3
Author: Nils Pipenbrinck, 2014-09-18 11:15:40