2010-01-03 4 views
6

J'utilise un FPS incroyable et je dois stocker la clé secrète dans le code java. Cependant, j'ai peur que quelqu'un décompile mon apk et trouve la clé. J'ai décompilé l'apk moi-même et n'ai pas pu trouver la clé, mais je ne suis pas un expert VM. De l'aide?Clé de stockage Android, décompilation de la peur

+7

Vous ne pouvez pas "vraiment" empêcher les gens de décompiler un programme. Votre modèle de sécurité devrait mieux en tenir compte. :-) –

+0

Si je le charge à partir du serveur web (la clé), comment puis-je m'assurer que la requête ne peut pas être faite par quelqu'un d'autre (en supposant que la décompilation) –

+0

http://en.wikipedia.org/wiki/Public-key_cryptography pourrait être utile pour authentifier les demandes. –

Répondre

8

Vous ne pouvez pas mettre votre clé de chiffrement dans votre application et espérer qu'elle reste secrète. Tout ce qu'il faut, c'est qu'un programmeur déterminé le décompile et trouve la clé, et ils peuvent le partager avec le monde.

La cryptographie asymétrique/clé publique est exactement la solution que vous voulez. Créez une paire de clés publique/privée, puis placez la clé publique dans votre application et conservez la clé privée vous-même. Ensuite, vous pouvez faire deux choses:

  • Votre application peut Crypter un message en utilisant la clé publique, qui ne peut être déchiffré avec la clé privée.
  • Ou, vous pouvez signer un message en utilisant la clé privée, qui peut être authentifié en utilisant la clé publique dans votre application.
+0

vrai. mais si vous mettez la clé privée ou la clé publique dans l'application, ils peuvent également l'utiliser pour déchiffrer la clé. –

+1

@Patrick Boos: C'est tout à fait le point de crypto asymétrique: vous ne pouvez pas calculer la clé privée à partir de la clé publique. La façon dont cela fonctionne est que vous * crypter * sur votre serveur, en utilisant la clé privée (que vous ne partagez avec personne, ce n'est que sur le serveur), et l'application sur le client a la clé * public * avec laquelle peut déchiffrer; En outre, l'application sur le client signe avec la clé * public * et le serveur vérifie à l'aide de la clé privée. Les clés publiques * sont destinées à être partagées librement. – Piskvor

+0

@Piskvor Afin d'être sécurisé, la cryptographie à clé publique nécessite que les clés privées soient gardées secrètes. Mais que se passe-t-il si quelqu'un a une clé privée stockée dans l'application (par exemple en la décompilant)? Ensuite, il ou elle peut toujours lire toutes les données secrètes encodées avec la clé publique (exactement comme l'application originale). Est-ce qu'il y a un moyen d'éviter cela? – Piotr

1

Un individu assez déterminé sera en mesure d'extraire votre clé, et il n'y a vraiment pas grand-chose à faire à ce sujet. Vous pouvez essayer d'obscurcir les clés en quelque sorte (en élevant la barre sur la façon dont ils doivent être déterminés), mais vous ne pouvez pas les empêcher d'obtenir la clé. Toutefois, selon la raison pour laquelle vous devez stocker la clé secrète, vous pouvez utiliser Asymmetric Key Cryptography. Vous serez en mesure de stocker une clé publique qui peut être limitée au chiffrement (et non au décryptage) ou à des fins d'authentification, tout en conservant la sécurité de la clé privée.

+1

La clé publique n'est utile que pour le cryptage et la vérification de signature. –

Questions connexes