web-dev-qa-db-fra.com

Comment sécuriser un mot de passe / clé dans le code source

S'il est nécessaire que le code source contienne un mot de passe, comment le sécuriser? Ceci est purement un exemple, mais disons qu'il existe une application qui utilise une API et que vous ne voulez pas exposer votre clé API, mais vous devez l'avoir dans le code source, car elle est utilisée. Comment disposez-vous d'une chaîne que l'utilisateur ne peut pas encore récupérer peut être utilisée. Ne semble pas possible sans demander au serveur la chaîne.

RE: Pourquoi pouvons-nous encore casser des photos snapchat en 12 lignes de Ruby?

16
Peter

Réponse courte: vous ne pouvez pas.

Vous ne pouvez jamais protéger un mot de passe que vous distribuez. Vous pouvez le cacher entre certaines chaînes et utiliser d'autres opérations pour "couvrir" le mot de passe mais, à la fin, vous devrez tout rassembler pour que votre fonction fonctionne. Et c'est là que le cracker va l'emmener.

Il n'y a pas de moyen facile de résoudre ce problème et cela signifie généralement que vous n'avez pas choisi le meilleur schéma de sécurité ou, si vous le jugez suffisant, cela signifie peut-être que vous n'avez tout simplement pas besoin de ce type de sécurité.

Et si vous avez vraiment, vraiment, vraiment besoin de faire de cette façon, vous devrez aller avec "la sécurité par l'obscurité" après tout, plus il faut de temps pour être cracké, mieux c'est. Vous feriez mieux d'avoir un système de détection lorsque cela se produit.

Par exemple, considérons l'industrie du jeu toutes ces années avec leurs protections contre la copie et ainsi de suite, s'il y avait eu un moyen d'assurer la sécurité au sein du code lui-même qui signifierait la fin du "piratage".

23
kiBytes

Bien que la réponse de @kiBytes soit correcte d'un point de vue pratique, je voudrais ajouter que n article récent par Amit Sahai suggère une manière (théorique) de construire un Obfuscateur de boîte noire cryptographiquement "difficile" à inverser. (Voir ici pour un article câblé à ce sujet).

Cependant, ce n'est pas comme si vous pouviez ou même deviez l'implémenter: jusqu'à présent, il est complètement impossible de l'utiliser sur de vrais logiciels et il n'a pas encore été correctement vérifié. C'est quand même intéressant.

8
Stephane

Comme le dit @kiBytes, vous ne pouvez tout simplement pas sécuriser un mot de passe ou une clé dans le code source. J'ajouterais (au cas où les gens arriveraient à cette question en essayant de résoudre un problème général) que dans l'exemple que vous donnez (une application utilisant une API), il n'est pas nécessaire que la clé d'API soit stockée dans le code source de l'application.

En règle générale, la clé API est stockée sur un serveur que vous contrôlez. Pour accéder à l'API, votre application fait une demande au serveur, qui lui-même fait une demande à l'API, puis répond à votre application avec les informations qu'elle a récupérées de l'API.

En passant, idéalement, la clé API n'est pas non plus stockée dans le code source sur le serveur, car cela est probablement vérifié dans le contrôle de version et donc potentiellement non sécurisé.

1
joegoldbeck