Où stocker les hachis, les sels, les clés dans les applications bureautiques

J'essaie de déterminer où ou comment je devrais stocker les secrets d'application et les clés dans une application de bureau.
Par exemple, une clé d'application Facebook ou une clé de dépôt et un secret.

J'ai donc lu que je devrais hacher, saler, crypter, etc., ces valeurs. Ceci est pour empêcher quelqu'un d'ingénierie inverse de mon code et de voir les clés.

  • Les styles d'analyse Android pour un widget personnalisé ne fonctionnent pas
  • Dois-je déclarer toutes les activités dans un fichier manifeste?
  • Découpez l'écran du téléphone sur deux parties qui font simultanément deux choses
  • Android AppCompat v21 fournit SwitchCompat ne fournit pas SwitchCompatPerefrence
  • Ouvrir le lien depuis Android Webview dans le navigateur normal comme popup
  • Comment puis-je obtenir un tokenizer MultiAutoCompleteTextView similaire à l'application Facebook?
  • Tout est bien et bon, mais avec toutes ces méthodes, je stocke juste une valeur de sel ou de hachage quelque part au lieu de la clé elle-même, à la fin. Sûrement, si un pirate peut accéder au sel / hash et éventuellement au code source, ils pourront décrypter la clé cryptée et obtenir mon mot de passe / clé / secret de toute façon?

    Une option que j'ai lue à propos de cela semble la plus sûre est de ne pas stocker cette valeur dans l'application de bureau, mais d'appeler un service Web pour obtenir la clé (probablement chiffrée). Mais ma question est que, même dans ce cas, un pirate malveillant aurait sûrement fait un vidage de mémoire ou quelque chose pour voir quelle est la valeur renvoyée par le service Web, et nous sommes de retour au carré 1.

    La meilleure alternative suivante semble être l'obscurité.

    Est-ce que je manque quelque chose complètement?

    Sur une note parallèle, à quoi servirait une clé / secret facebook / twitter / dropbox / etc à un pirate informatique de toute façon? Sûrement, ils ont encore besoin des informations d'identification d'un utilisateur ou du jeton d'accès pour pouvoir l'utiliser de toute façon?

    Tout conseil ou suggestion sera apprécié.

  • Android modifie le texte comment commencer à taper dans le coin supérieur gauche?
  • Android: Canvas.DrawBitmap VS Drawable.Draw - Augmentation énorme de la performance
  • Android - onglets, MapView, activités dans les onglets
  • GoogleMaps GroundOverlay clignote mes images
  • PopupWindow ne répond pas aux événements de glisser-déposer
  • Contact d'édition Android
  • One Solution collect form web for “Où stocker les hachis, les sels, les clés dans les applications bureautiques”

    Pour chaque compte utilisateur, créez un nouveau jeton d'accès pour l'application lors de la connexion à votre service. Votre service de connexion devrait être conçu comme une connexion pour un site Web:

    • L'API ne doit permettre qu'un nombre défini (par exemple 5) de mauvaises tentatives de connexion qui rapporte au client de bureau que le nom d'utilisateur / mot de passe ne correspond pas.
    • L'API doit renvoyer un jeton affilié à cet utilisateur uniquement lorsque l'utilisateur se connecte avec succès.
    • Utilisez SSL et une méthode de hachage localisée pour transmettre les mots de passe utilisateur à votre API

    Ce jeton d'authentification fourni par votre API ne fonctionnera que pour le compte individuel et, en tant que tel, ne devrait permettre à l'utilisateur d'effectuer des opérations qu'à leur compte individuel. Ainsi, par exemple, si un utilisateur veut effectuer une opération, il doit pouvoir fournir un jeton d'authentification valide afin de compléter l'action. En utilisant cette méthode, les attaquants pourront toujours obtenir une clé d'authentification, mais cette clé d'authentification ne pourra exécuter que des opérations pour le compte dans lequel elle est générée. Il ne sera pas en mesure d'effectuer des opérations sur un autre compte. L'idée ici est de les laisser gâcher des données mais de garder la mauvaise activité compartimentée sur un seul compte.

    À partir de là, si vous avez des appels API génériques (par exemple, une recherche d'image) qui accède aux données de plusieurs comptes, assurez-vous de ne jamais revenir ou de permettre à tout compte d'accéder directement à toutes les données de votre système. Fournissez seulement un nombre limité d'enregistrements. Dans ce cas, le système exécute toujours son travail, mais ne permet à aucun moment d'accéder à tous les enregistrements de votre système.

    J'impose généralement un service comme celui-ci:

    • L'utilisateur se connecte et obtient un jeton d'authentification. Je stocke ledit jeton d'authentification dans une base de données associée à cet utilisateur.
    • L'utilisateur appelle un service Web avec un jeton auth. Je recherche le compte utilisateur par le jeton d'authentification transmis et l'ID utilisateur (deux formes d'authentification) et utilisez le compte utilisateur découvert pour effectuer toutes les opérations. Je n'assume pas seulement que l'identifiant d'utilisateur est correct, il faut que celui-ci soit authentifié.
    • Si un utilisateur doit effectuer une opération délicate comme réinitialiser un mot de passe, mon application ouvre une fenêtre de navigateur ou une tâche de navigateur dans l'application où l'utilisateur peut demander et administrer une réinitialisation. Je peux plus facilement sécuriser une application Web que celle d'un client inconnu.

    En utilisant ces méthodes, vous devriez pouvoir créer une application de bureau entièrement opérationnelle. Il existe des valeurs aberrantes à cette fonctionnalité, si vous avez une publication dans les commentaires et nous pouvons plonger davantage dans le problème et voir si cette solution peut encore fonctionner pour vous.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.