web-dev-qa-db-fra.com

Comment gérer correctement les clés privées

Quelqu'un a-t-il une expérience pratique ou une référence pour un schéma qui implémente un schéma de gestion de clés qui serait conforme à la norme de sécurité PCI DSS ?

Il existe évidemment pas mal d'implémentations étant donné le nombre d'entreprises conformes à PCI DSS mais il est difficile de trouver des détails à leur sujet. Lorsqu'il s'agit de stocker des données privées, la discussion s'arrête normalement à ce que algorithme de chiffrement à utiliser. Après cela, il y a normalement une déclaration sur le stockage approprié de la clé privée, mais aucune discussion sur les moyens pratiques de le faire ou des choses comme changer périodiquement la clé ou fournir la clé aux applications, etc.

Plus précisément, je suis intéressé par les exigences des sections 3.5 et 3.6 de la norme PCI DSS.

3.5.2 Stockez les clés cryptographiques en toute sécurité dans le moins d'emplacements et de formes possibles.

3.6.a Vérifier l'existence de procédures de gestion des clés pour les clés utilisées pour le cryptage des données des titulaires de carte. Remarque: De nombreuses normes de l'industrie pour la gestion des clés sont disponibles à partir de diverses ressources, y compris NIST, qui peut être trouvé à http://csrc.nist.gov .

3.6.4 Vérifier que les procédures de gestion des clés sont mises en œuvre pour exiger des changements de clés périodiques au moins une fois par an.

J'ai jeté un coup d'œil aux Publications cryptographiques NIST comme le suggère le PCI DSS, mais en dehors des notes récentes d'un Atelier de gestion des clés cryptographiques il ne semble pas y avoir grand-chose en termes de véritables schémas ou normes implémentables.

Quant à ce que j'essaie de faire, ce n'est pas:

  1. Stockez les mots de passe + les sels comme hachages à sens unique pour l'authentification,
  2. Choisissez un algorithme symétrique fort pour le cryptage des données,
  3. Évitez de devoir stocker des données privées en premier lieu.
  4. Évitez le besoin de gestion des clés avec d'autres mécanismes: sécurité physique, sécurité de la base de données, dragons et assistants, etc.

Toutes ces préoccupations sont valables mais, dans ce cas, ne sont pas la réponse. Les écrous et les boulons de mes exigences sont dans une SO question . Net Design pattern pour stocker et récupérer les données sensibles par utilisateur mais tout se résume à la gestion des clés donc cette question plus raffinée.

48
sipwiz

Je connais la douleur que vous traversez. Nous avons eu du mal à mettre à jour un ancien système EFT vers la conformité PCI. La gestion des clés était certainement (de mon point de vue logiciel) la partie la plus difficile.

Je pense que je suis également tombé sur les Recommandations du NIST pour la gestion des clés que Martin a postées, et j'ai été incroyablement frustré par le manque d'exemples concrets.

ANSI X9.17 - Financial Institution Key Management est probablement le plus adapté à vos besoins, avec PCI-DSS. Bonne chance pour le lire, le document est une énorme collection de TLA que je sais que j'ai certainement eu du mal à lire. (X9.17 est mis à jour chaque année, et la dernière version est maintenant: NIST SP 800-57 Pt. 1 Rev.4 )

Quand la frustration s'est transformée en désespoir, je suis tombé sur The Electronic Money Mill qui est un conte fictif, avec un bon nombre de références techniques pertinentes. Chapitre 17 traite de X9.17 et peut aider à la compréhension.

À partir de tout ce matériel de référence, j'ai conçu un système de gestion des clés qui a plu à notre auditeur. Les documents de conception sont assez longs, mais en résumé, l'idée est que votre clé de cryptage de données est protégée par une clé de cryptage de clé, et la clé de cryptage de clé est stockée dans une boîte physiquement séparée, elle-même protégée par une clé principale.

Ma mise en œuvre était d'avoir une application Key Server exécutée sur une boîte Windows. Cette application nécessitait la saisie de deux "clés principales de serveur de clés" distinctes avant de pouvoir être utilisée. Ces clés ne seraient connues que des principaux administrateurs du serveur. Ces clés sont corrigées ensemble pour générer la clé principale, qui est stockée uniquement dans la mémoire protégée pendant l'exécution de l'application. L'application peut ensuite générer automatiquement des clés de chiffrement de clé cryptographiquement fortes, qui sont stockées sous forme chiffrée à l'aide de la clé principale.

Les applications qui ont besoin de chiffrement demanderont une clé de chiffrement de clé au serveur de clés. La KEK est utilisée par l'application pour crypter/décrypter la clé de cryptage des données, qui peut être stockée en toute sécurité avec les données de l'application.

Bonne chance. J'espère que vous trouverez également un défi intéressant!

35
PaulG

Avez-vous vu NIST SP 800-57 , Recommandation pour la gestion des clés?

7
Martin v. Löwis