Comment stocker une clé API secrète dans le binary d’une application?

Je crée un client Twitter pour Mac OS X et j’ai un secret de consommateur. C’est à ma compréhension que je ne devrais pas partager cette clé secrète . Le problème est que lorsque je le mets en tant que littéral de chaîne dans mon application et l’utilise, comme ceci:

#define QQTwitterConsumerSecret @"MYSECRETYOUMAYNOTKNOW" [[QQTwitterEngine alloc] initWithConsumerKey:QQTwitterConsumerKey consumerSecret:QQTwitterConsumerSecret]; 

Il se trouve dans la section des données du fichier binary de mon application. Les pirates peuvent lire ceci, démonter l’application, etc.

Existe-t-il un moyen sûr de stocker le secret du consommateur? Dois-je le chiffrer?

Il n’y a pas de solution parfaite. Quoi que vous fassiez, une personne qui y est dédiée pourra le voler.

Même Twitter pour iPhone / iPad / Android / mac / etc. a une clé secrète là-dedans, ils l’ont probablement masquée d’une manière ou d’une autre.

Par exemple, vous pouvez le diviser en différents fichiers ou chaînes, etc.

Note: En utilisant un éditeur hexadécimal, vous pouvez lire des chaînes ASCII dans un fichier binary, ce qui est la manière la plus simple. En le décomposant en différents morceaux ou en utilisant des appels de fonctions pour créer la clé secrète, cela rend généralement ce processus plus difficile.

Vous pouvez simplement l’encoder en 64 pour le masquer. Ou mieux, générez la clé au lieu de la stocker – écrivez quelque chose comme ceci:

 char key[100]; ++key[0]; ... ; ++key[0]; // increment as many times as necessary to get the ascii code of the first character // ... and so on, you get the idea. 

Cependant, un très bon hacker le trouvera quoi qu’il arrive; le seul moyen de le protéger réellement des yeux des autres est d’utiliser une fonction de hachage sécurisée, mais vous ne pourrez pas le récupérer aussi 🙂

Vous ne devez pas utiliser de clé secrète api dans une application qui ne s’exécute pas uniquement sur votre serveur.

Même si elle est parfaitement cachée, vous pouvez toujours regarder les données qui passent par le fil. Et puisque c’est votre appareil, vous pouvez même manipuler SSL (un homme au milieu avec un certificate créé par une autorité de certificateion personnalisée qui a été ajouté à la liste des autorités de certificateion de confiance de l’appareil). Vous pouvez également accéder à la bibliothèque SSL pour intercepter les données avant de les chiffrer.

Une réponse vraiment tardive …

Si vous configurez votre propre serveur, vous pouvez l’utiliser pour vous aider à obtenir l’autorisation de votre application de bureau sur Twitter sans partager (c.-à-d. En intégrant) votre clé secrète.

Vous pouvez utiliser cette approche:

Lorsqu’un utilisateur installe votre application de bureau, elle doit l’enregistrer avec twitter et avec votre serveur *) *) L’application demande au serveur de générer l’URL de demande de jeton *) Le serveur envoie l’URL générée à l’application *) L’application dirige l’utilisateur à l’URL d’autorisation *) L’utilisateur autorise votre application sur Twitter et y colle le code PIN généré *) Utilisation du code PIN utilisé par votre application *) Toutes les communications ultérieures utilisent le jeton et n’impliquent pas votre serveur

Remarque: l’application se connecte à votre serveur en utilisant les informations d’identification de l’utilisateur (par exemple: id et mot de passe) pour votre serveur.