2013-05-25 3 views
1

J'ai une clé secrète utilisée à la fois par un serveur et par mon application. Cette clé est utilisée pour être sûr que les demandes proviennent de l'application. Le serveur n'a pas enregistré les utilisateurs, mais avec cette application, les utilisateurs peuvent envoyer des demandes.Protéger une clé symétrique dans une application

Je ne trouve pas d'autre solution ... Je pensais aux clés asymétriques, Diffie-Hellman ... mais rien ne résout mon problème en dehors de la clé symétrique ... Mais le problème est: comment stocker cette clé dans mon java coder et le protéger?

+1

Cela peut aider: http://stackoverflow.com/questions/2050292/how-to-securely-store-a-privatekey-in-code –

+0

Oui mais cela ne résout pas le problème ... Je pense que le seul C'est de confondre un hacker qui essaie d'obtenir cette valeur ... – Massimo

+0

Vous avez dit que vous pensiez aux clés asymétriques. Je pense que c'est en grande partie un moyen plus sûr que d'essayer de stocker la clé privée dans votre code. –

Répondre

1

Il est impossible de le faire sans obtenir un secret partagé (ex: mot de passe) d'une source externe (ex: utilisateur, SMS, etc.).

Tout le monde a accès à l'ensemble de votre programme. Si aucune information extérieure n'est utilisée, il sera toujours possible pour quelqu'un d'envoyer un paquet contrefait qui semble provenir de votre application.

Généralement, vous pouvez envoyer une chaîne de vérification unique à l'utilisateur par e-mail ou par SMS qu'il peut ensuite saisir dans l'application. Si la chaîne n'est valide que pendant une courte période (disons 5 minutes), elle ne doit pas être extrêmement longue.

Pour créer une clé temporaire à partir de cette chaîne, vous devez la hacher. Vous utilisez ensuite cette clé temporaire pour prouver au serveur que vous êtes bien ce que vous êtes et obtenez une clé à long terme du serveur et la stockez dans un endroit sûr.

+0

J'ai trouvé la classe ObfuscatedString, elle génère une chaîne avec un tableau de longs. En utilisant cette classe pour obscurcir une chaîne et proguard pour obscurcir le code cela pourrait fonctionner, à quoi pensez-vous? La création d'une chaîne est faite avec un code similaire à celui-ci: String key = new ObfuscatedString (new long [] {0x2233850333551220L, 0xFBAD239EF4CB2711L, 0xA21102AB357EF211L}). ToString(); J'ai essayé d'inverser l'engeneer le code et ne peux pas trouver les nombres longs passés au constructeur de ObfuscatedString. – Massimo

+0

Tout dépend de la motivation de quelqu'un à accéder à l'information obscurcie. Plus votre application est populaire, plus une personne peut être motivée pour déterminer votre clé secrète. Une approche serait de désosser l'application et de trouver où le code envoie des données. C'est très facile à faire car Proguard n'objecte pas (et ne peut pas) masquer les appels à android.jar. Ils travailleraient alors en arrière pour déterminer comment la demande a été formée. Dans de nombreux cas, ils ne remarqueraient probablement même pas que votre clé était obscurcie. – abh

Questions connexes