Question

J'utilise le module PHP mcrypt pour chiffrer les données sensibles dans mon entreprise. Cela a bien fonctionné. Cependant, on m'a demandé de créer un nouveau mot de passe principal qui devrait pouvoir décrypter toutes les données. Le problème est que ce mot de passe principal devrait être codé en dur dans un fichier de script. S'il vous plaît, corrigez-moi si je me trompe, mais le seul moyen sûr semble être de coder en dur une clé publique dans le script et de l'utiliser pour chiffrer des données tout en préservant la clé privée et de ne la déchiffrer que si nécessaire.

mcrypt ne semble pas avoir d'implémentation pour un tel schéma. Quelqu'un connaît-il une bibliothèque (module PHP ou PHP pur) qui le ferait?

Était-ce utile?

La solution

Je suggère d’examiner les liaisons PHP OpenSSL, et en particulier la fonction openssl_public_encrypt () . Vous pouvez en effet incorporer une clé publique principale dans le script et le faire chiffrer avec la clé AES de chaque utilisateur avec cette clé publique. Conservez la clé privée principale correspondante dans le coffre-fort de l'entreprise.

Si vous avez besoin de la fonction de déchiffrement principale, vous devez extraire la clé d'utilisateur chiffrée, la déchiffrer avec la clé privée principale, puis déchiffrer les données d'origine.

Autres conseils

Il existe une extension PECL pour cela. http://us2.php.net/manual/fr/book.gnupg. php

Vous pouvez également utiliser l'outil de ligne de commande gnupg à partir de php, s'il ne doit pas nécessairement être très rapide: http://devzone.zend.com/article/1265

Je n'ai pas essayé ces méthodes.

Je ne vois pas comment cela fonctionnerait. Toute fonction de chiffrement bidirectionnel ne va être déchiffrée que si le mot de passe spécifique utilisé pour le chiffrement est fourni (à moins que vous ne soyez le NSA et que vous remettiez des portes dans les algorithmes). Vous ne pouvez pas avoir deux mots de passe déchiffrant le même fichier (à moins qu'il y ait des collisions de hachage, mais ce n'est pas quelque chose que vous pouvez faire facilement).

En ce qui concerne le stockage de votre mot de passe principal dans le programme, il serait préférable de le stocker dans un fichier séparé lu par le programme afin de pouvoir utiliser une sécurité plus stricte au niveau du système d'exploitation sur ce fichier.

N'oubliez pas que mcrypt n'est pas une cryptographie à clé publique. Avec la cryptographie à clé publique, vous pourrez peut-être faire ce que vous voulez. Par exemple, avec PGP / GPG, vous pouvez chiffrer un fichier de manière à ce que trois utilisateurs différents puissent le déchiffrer à l'aide de leur clé privée, sans connaître les clés privées de chacun. Vous pouvez donc avoir un utilisateur virtuel avec le mot de passe principal qui peut tout décrypter.

Une autre option serait de conserver deux copies de toutes les données chiffrées. l'un crypté avec le mot de passe de l'utilisateur et l'autre crypté avec le mot de passe principal.

Juste pour être sûr de votre besoin de ce mot de passe principal ,

  1. Est-il prévu de l'utiliser uniquement en tant que commande pour chiffrer cette "qui" scellera "quelque chose

    qui ne peut alors être ouvert que par une personne connaissant la clé privée en question? Ou,
    • Attendez-vous à ce que le chiffrement effectué dans l'entreprise soit ouvert?
    • Je veux juste être sûr que votre phrasé ne doit pas être interprété de cette deuxième façon
    • votre phrase ' décrypter toutes les données ' semble dangereuse

      (et non faisable / pratique avec le cryptage à clé asymétrique)

Mise à jour en fonction du commentaire.

  • Vous envisagez de créer deux copies des données , chacune cryptée avec des clés différentes.
    • une copie doit être chiffrée avec la clé maître publique .
      • peut être déchiffré avec toute personne disposant de la clé maître privée
        la clé privée principale doit alors être sécurisée (la clé publique n'est pas critique)
    • la deuxième copie doit être chiffrée avec la clé Rijndael 256
  • le but est de permettre au maître de déchiffrer les données à tout moment

    en particulier, en l'absence de la personne qui l'a crypté

Cette approche fonctionnera pour, accès facile des données par l'individu avec la clé Rijndael,
sans intervention du propriétaire de la clé privée principale.
Et, lorsque le secret des données est confié au propriétaire de la clé privée principale.

Votre schéma devra mettre à jour la copie principale (en supprimant l'ancienne et en chiffrant une nouvelle) à chaque fois que l'utilisateur mettra à jour sa copie.

Toutefois, si les données utilisateur sont approuvées par le maître (comme c'est clairement le cas ici),

  • une approche plus simple consisterait à émettre la clé Rijndael à partir du maître
  • Le maître peut le garder crypté avec la clé maître-publique elle-même
  • Les données peuvent ensuite être cryptées avec uniquement la clé Rijndael émise.
    • il sera toujours accessible avec la clé maître-privée
      qui peut ouvrir la clé Rijndael de l'utilisateur

Si l'utilisateur doit signer les données, vous pouvez le faire séparément.
Cela vous évitera de conserver des doubles copies et de les conserver.

Pour signer les données , l'utilisateur peut générer une paire de clés.

  • Avant de chiffrer les données avec la clé privée Rijndael
  • la clé publique principale cryptée avec la clé privée de l'utilisateur peut y être ajoutée
  • la clé publique utilisateur partagée avec le maître (au moins)

    sera suffisant pour authentifier que l'utilisateur a fourni les données
  • Dans le pire des cas, si l'utilisateur n'est pas disponible et que la confirmation de la clé échoue,
    le maître peut avoir confiance en l'authenticité des données - qui peuvent encore être déchiffrées
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top