Question

J'ai un client qui exécute un agrégateur d'informations à partir de plusieurs comptes. La base de données doit stocker les noms d'utilisateur et le mot de passe vers d'autres sites Web d'une manière qui peut être utilisée plus tard par un script pour se connecter à ces sites Web pour récupérer des données.

Plutôt que de les stocker en texte brut, je pense que nous pouvons les hacher pour le stockage. De toute évidence, quelqu'un pourrait toujours accéder à la version en texte brut s'il avait accès à la fois au code et à la base de données, mais pas s'ils n'en avaient que l'un ou l'autre.

Des meilleures idées?

Était-ce utile?

La solution

Si votre système demande à l'utilisateur un mot de passe, vous pouvez utiliser ce mot de passe pour générer une clé pour crypter / décrypter les mots de passe pour les autres sites Web.

Avec cela, vous avez besoin que votre utilisateur entre ce mot de passe pour pouvoir déchiffrer les mots de passe que vous avez stockés dans votre base de données.

Un flux plus détaillé ici:

  1. L'utilisateur entre dans le mot de passe "123456" lors de la connexion dans votre système.
  2. Vous utilisez le SHA256 du mot de passe "123456" et obtenez une clé: "8D969EEF6ECAD3C29A3A629280E686CF0C3F5D5A86AFF3CA12020C923ADC6C92"
  3. Utilisez cette clé "8d969 ..." pour décrypter avec les mots de passe des sites de votre base de données.

Vous pouvez affiner cela de plusieurs façons. Par exemple: Salage du mot de passe avant de calculer le hachage SHA.

Comme échantillon pratique sur un tel salage, Michael suggérer de l'utilisation Pbkdf2 (avec HMACSHA-256 comme ses deux paramètres pseudo fonction aléatoire).

Autre amélioration: stocker une version cryptée de la clé pour permettre à votre utilisateur de modifier son propre mot de passe sans avoir à réincrypter tous ses mots de passe ... etc ...

Autres conseils

Tout ce que vous pouvez faire pour utiliser vos informations d'identification, un attaquant peut également

Qu'est-ce que l'obscurcissement vous achète réellement? Temps. Les données sont là après tout, tout comme votre schéma pour l'utiliser vous-même. Ce n'est qu'une question de temps pour quelqu'un de comprendre quel est votre plan. Tout cela dépend de votre niveau de paranoïa ainsi que d'une évaluation du niveau de risque avec lequel vous êtes à l'aise. En particulier, la façon dont vous stockez des informations d'identification devrait dépendre de qui a accès à la machine exécutant la base de données.

Finalement, le caoutchouc doit prendre la route, alors allez-y et conquérir. Ne frappez pas complètement l'obscurcissement. Faites juste pour assurer le couple avec des pratiques intelligentes.

Approches et suggestions

Générer des clés API par application pour chaque compte, à utiliser par la machine

Si vous pouvez générer des clés API à partir des comptes tiers, cela vous donnerait la possibilité de révoquer l'accès aux comptes sans éliminer toutes les applications potentielles. Beaucoup de services ont ces types de clés API (Google, Twitter, StacKExchange, Facebook et bien d'autres).

Vous configurez simplement une "application", puis utilisez une clé de consommation et un secret ainsi qu'un jeton d'accès et un secret d'accès. La machine n'a qu'à stocker ces références. Si un compromis se produit, il vous suffit de révoquer cet ensemble de clés. De plus, ceux-ci vous permettent de spécifier les autorisations par compte.

Utilisez un mot de passe par utilisateur pour leur ensemble d'identification

Lorsqu'un utilisateur se connecte, ce n'est qu'alors que vous déverrouillez son ensemble de mots de passe. Pour ce faire, vous généreriez une clé basée sur un schéma de hachage approprié et une vérification de vérification qui se produit plusieurs étapes de hachage devant la clé.

Crypter de toute façon sur disque

Vous pouvez toujours crypter les informations d'identification avec une seule clé. Ensuite, vous n'avez qu'une seule clé à protéger (qui protège tous les autres secrets). Vous devrez alors décrypter avant d'accéder à vos autres informations d'identification.

Stockez les secrets dans le clés du système

Sur Linux, utilisez le gnome-keyring. Ensuite, vous pouvez effectuer des appels simples à la création de read-update, en le traitant comme une base de données de mot de passe. Le clés GNOME est basé sur la norme PKCS # 11.

La gnome-keyring a une API pour économiser sur les articles de clés et de récupération.

/* A callback called when the operation completes */
static void
found_password (GnomeKeyringResult res, const gchar* password, gpointer user_data)
{
  /* user_data will be the same as was passed to gnome_keyring_find_password() */
  // ... do something with the password ...
  /* Once this function returns |password| will be freed */
}

static void
find_my_password()
{
  gnome_keyring_find_password (GNOME_KEYRING_NETWORK_PASSWORD,  /* The password type */
                               found_password,                  /* callback */
                               NULL, NULL,     /* User data for callback, and destroy notify */
                               "user", "me", 
                               "server", "gnome.org",
                               NULL);
}

Sur Windows 7+, utilisez la fonction "Système de fichiers chiffrées" (EFS). Tous les fichiers sont cryptés avec un certificat avec sont à leur tour protégés par votre mot de passe Windows.

Ne laissez pas cela vous endormir dans un faux sentiment de sécurité. S'il s'agit d'un serveur sur lequel il s'exécute, si quelqu'un a accès au réseau à la boîte, il a également accès aux données de clés.

Configurez une machine distante qui accorde un accès

Pouvez-vous configurer une machine qui accorderait l'accès aux informations d'identification ou à une clé de déverrouillage en utilisant des paires de clés publiques et privées?

Sur hachage

Si vous hachez les noms d'utilisateur et les mots de passe, vous ne les récupérez pas. Les hachages sont conçus pour être des fonctions unidirectionnelles.

Vous pourriez encoder Les données pour l'obscurcissement, mais je ne le recommande pas.

Si vous hachez les informations, vous ne pouvez pas les récupérer plus tard. Si vous le cryptez, vous devez stocker la clé quelque part. Il n'y a pas de moyen fiable, sauf pour restreindre physiquement l'accès à la base de données, pour éliminer le potentiel d'utilisation malveillante des données.

Le hachage peut empêcher, de toutes les manières prévisibles, l'utilisation des données d'origine. Cependant, vous devez utiliser les données. Les hachages cryptographiques comme SHA-256 sont conçus pour qu'il soit difficile de calculer (sans fabriquer des tables de recherche de taille déraisonnable) m donné H(m)H est votre fonction de hachage préférée.

Si vous empruntez l'itinéraire de cryptage, vous devez stocker la clé de chiffrement et il peut être compromis ou du moins utilisé comme oracle de décryptage. Vous pouvez créer un courtier de service qui vous décryptage pour vous et utiliser des certificats d'authentification client et serveur pour assurer la sécurité. Cependant, si quelqu'un compromet un client autorisé, vous avez une fenêtre de temps entre le compromis et la détection où les comptes peuvent être compromis. Mais cette approche vous donne la flexibilité de révoquer les certificats et de refuser immédiatement l'accès au serveur, même si vous n'avez plus accès au client compromis.

Je recommande de configurer un service à distance qui n'est disponible que par une connexion directe (sur le même commutateur physique) et qui s'authentifie au client et exige que tous les clients s'authentifient. Peut-être que limiter le nombre de requêtes qu'il peut faire aiderait également à prévenir les abus si un client devait être compromis. Le service devra vérifier la révocation du certificat sur tous demande.

Ce service doit également être connecté à une installation de journalisation à distance, qui servira à auditer le système indépendamment. Ce service de journalisation doit à nouveau authentifier le client et s'authentifier avec un client. Le service de journalisation reçoit des données et les ajoute à un journal, il ne permet jamais de modification ou de suppression. Lorsqu'il reçoit une entrée de journal, il signe numériquement une entrée de journal horodomagie et entre dans un conteneur d'audit.

Ceci est similaire à la façon dont les autorités du certificat ont mis en place leurs pistes papier pour auditer la délivrance du certificat, afin de fournir le meilleur modèle de récupération possible pour un compromis, car la prévention du compromis est réellement impossible.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top