web-dev-qa-db-fra.com

Comment stocker une clé API secrète dans le binaire d'une application?

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

#define QQTwitterConsumerSecret @"MYSECRETYOUMAYNOTKNOW"

[[QQTwitterEngine alloc] initWithConsumerKey:QQTwitterConsumerKey consumerSecret:QQTwitterConsumerSecret];

C'est dans la section data du binaire de mon application. Les pirates peuvent lire ceci, désassembler l'application, etc.

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

40
user142019

Il n'y a pas vraiment de solution parfaite. Peu importe ce que vous faites, quelqu'un qui y est dédié pourra le voler.

Même Twitter pour iPhone/iPad/Android/Mac/etc. a une clé secrète dedans, ils ont probablement juste obscurci en quelque sorte.

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

Remarque: À l'aide d'un éditeur hexadécimal, vous pouvez lire les chaînes ascii dans un fichier binaire, ce qui est le moyen le plus simple. En la divisant en plusieurs parties ou en utilisant des appels de fonction pour créer la clé secrète, cela rend généralement ce processus plus difficile.

26

Vous pouvez simplement l’encoder en base64 pour l’obscurcir. Ou, meilleure idée, 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 pirate informatique le trouvera quoi qu'il arrive; Le seul moyen de le protéger des yeux des autres est d'utiliser une fonction de hachage sécurisée, mais vous ne pourrez pas le récupérer aussi :)

7
user500944

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

Même si tout est parfaitement caché, vous pouvez toujours surveiller les données transitant par le fil. Et comme il s’agit de votre appareil, vous pouvez même manipuler SSL (au milieu, un certificat créé par une autorité de certification personnalisée qui a été ajouté à la liste des autorités de certification approuvées de l’appareil). Vous pouvez également vous connecter à la bibliothèque SSL pour intercepter les données avant leur chiffrement.

2
ThiefMaster

Une réponse très tardive ...

Si vous configurez votre propre serveur, vous pouvez l'utiliser pour vous aider à autoriser les utilisateurs de Twitter sur votre application de bureau sans partager (c'est-à-dire: intégrer) votre clé secrète. 

Vous pouvez utiliser cette approche:

Lorsqu'un utilisateur installe votre application de bureau, il 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 vers l'URL d'autorisation *) L'utilisateur autorise votre application sur Twitter et y colle le PIN généré *) à l'aide du PIN votre application saisit le jeton *) Toutes les communications ultérieures utilisent le jeton et n'impliquent pas votre serveur

Remarque: l'application se connecte à votre serveur à l'aide des informations d'identification de l'utilisateur (par exemple: ID et mot de passe) pour votre serveur.

0
hawk78