Cet exemple a plusieurs aspects différents. Je mentionnerai quelques points qui, je pense, n'ont pas été explicitement abordés ailleurs.
Protéger le secret en transit
La première chose à noter est que l'accès à l'API Dropbox à l'aide de leur mécanisme d' authentification d'application vous oblige à transmettre votre clé et votre secret. La connexion est HTTPS, ce qui signifie que vous ne pouvez pas intercepter le trafic sans connaître le certificat TLS. Il s'agit d'empêcher une personne d'intercepter et de lire les paquets pendant son trajet de l'appareil mobile vers le serveur. Pour les utilisateurs normaux, c'est un très bon moyen de garantir la confidentialité de leur trafic.
Ce qui n'est pas bon, c'est d'empêcher une personne malveillante de télécharger l'application et d'inspecter le trafic. Il est vraiment facile d'utiliser un proxy man-in-the-middle pour tout le trafic entrant et sortant d'un appareil mobile. Il ne nécessiterait aucun démontage ni ingénierie inverse du code pour extraire la clé et le secret de l'application dans ce cas en raison de la nature de l'API Dropbox.
Vous pouvez effectuer un épinglage qui vérifie que le certificat TLS que vous recevez du serveur est celui que vous attendez. Cela ajoute une vérification au client et rend plus difficile l'interception du trafic. Cela rendrait plus difficile l'inspection du trafic en vol, mais la vérification de l'épinglage se produit chez le client, il serait donc toujours possible de désactiver le test d'épinglage. Cela rend cependant les choses plus difficiles.
Protéger le secret au repos
Dans un premier temps, l'utilisation de quelque chose comme proguard aidera à rendre moins évident où se trouvent les secrets. Vous pouvez également utiliser le NDK pour stocker la clé et le secret et envoyer des demandes directement, ce qui réduirait considérablement le nombre de personnes possédant les compétences appropriées pour extraire les informations. Un obscurcissement supplémentaire peut être obtenu en ne stockant pas les valeurs directement en mémoire pendant une durée quelconque, vous pouvez les crypter et les décrypter juste avant l'utilisation comme suggéré par une autre réponse.
Options plus avancées
Si vous êtes maintenant paranoïaque à l'idée de mettre le secret n'importe où dans votre application et que vous avez le temps et l'argent pour investir dans des solutions plus complètes, vous pouvez envisager de stocker les informations d'identification sur vos serveurs (en supposant que vous en ayez). Cela augmenterait la latence de tous les appels à l'API, car elle devra communiquer via votre serveur, et pourrait augmenter les coûts de fonctionnement de votre service en raison de l'augmentation du débit de données.
Vous devez ensuite décider de la meilleure façon de communiquer avec vos serveurs pour vous assurer qu'ils sont protégés. Ceci est important pour éviter que les mêmes problèmes ne se reproduisent avec votre API interne. La meilleure règle empirique que je puisse donner est de ne transmettre aucun secret directement à cause de la menace de l'homme du milieu. Au lieu de cela, vous pouvez signer le trafic à l'aide de votre secret et vérifier l'intégrité de toutes les demandes envoyées à votre serveur. Une façon standard de procéder consiste à calculer un HMAC du message saisi sur un secret. Je travaille dans une entreprise qui a un produit de sécurité qui opère également dans ce domaine, c'est pourquoi ce genre de choses m'intéresse. En fait, voici un article de blog de l'un de mes collègues qui revient sur la plupart de cela.
Combien dois-je faire?
Avec des conseils de sécurité comme celui-ci, vous devez prendre une décision en termes de coûts / avantages sur la difficulté à faire en sorte que quelqu'un pénètre. Si vous êtes une banque protégeant des millions de clients, votre budget est totalement différent de celui qui prend en charge une application dans leur temps libre. Il est pratiquement impossible d'empêcher quelqu'un de briser votre sécurité, mais dans la pratique, peu de gens ont besoin de toutes les cloches et sifflets et avec quelques précautions de base, vous pouvez faire du chemin.