Chiffrement au repos
Le chiffrement au repos correspond aux données de la base de données lorsqu'elles ne sont pas utilisées/accessibles ou mises à jour. Le cryptage en mouvement est des choses comme TLS
où les données (de la base de données ) est transporté d'un serveur à l'autre au navigateur, au serveur, au navigateur, etc. TLS est parfaitement bon dans la plupart des situations s'il est manipulé avec soin et abordé avec une attitude selon laquelle vous devez faire plus que le strict minimum pour le rendre réellement sûr.
Un exemple typique est celui des personnes qui mettent un certificat TLS de LetsEncrypt sur leur domaine et pensent que tout à coup toutes leurs affaires sont en sécurité; mais ils ne chiffrent pas leurs sessions ou leurs cookies laissant ainsi un énorme trou potentiel dans leurs défenses.
N'utilisez pas le système de chiffrement intégré de MySQL.
Je ne peux insister assez sur ce point; le système de cryptage intégré à MySQL n'est pas adapté à la protection réelle des données sécurisées.
Veuillez lire ma réponse à une question très similaire ici quant aux détails (je ne veux pas simplement copier/coller ).
Ok, alors, parce que vous insistez... ici :
D'après ce que j'ai lu dans mes propres recherches sur ce sujet, le lien fourni par Magnus vers defuse/php -chiffrement est l'un des meilleurs moyens d'empêcher MySQL de compromettre vos données, en ne laissant jamais le programme/serveur MySQL voir la valeur en clair de vos données.
-- Réponse publiée le 7 mai 2017.
Aussi la réponse de Bill Karwin à la même question donne des informations supplémentaires précieuses :
-- Réponse publiée le 7 mai 2017.
Point de clôture :
La sécurité est complexe. Si vous voulez le faire correctement et avoir confiance en vos peaux d'oignon protectrices, vous devez faire beaucoup de choses (voir les puces ci-dessous) ; mais la première chose que vous devez faire est :
-
Définissez contre qui vous protégez
Sérieusement. Vous avez besoin de stratégies différentes contre quelqu'un qui veut voler vos noms et adresses en clair contre quelqu'un qui veut prendre le contrôle de votre serveur contre quelqu'un qui veut simplement détruire les données juste parce que. C'est un mythe que vous pouvez protéger contre tout le monde tout le temps, par concept c'est impossible*; vous devez donc définir les agresseurs les plus probables, puis déterminer la meilleure façon d'atténuer leurs avancées.
Spécifiquement à MySQL, quelques recommandations claires :
-
Gardez le SQL et le PHP sur le même serveur. Ne pas accéder à distance aux données MySQL.
-
Exclure l'accès externe au SQL (c'est donc
localhost
uniquement) -
Masquez vos noms de table et noms de colonne ; si quelqu'un s'introduit dans vos données et que vous avez
HDTBJ^BTUETHNUYT
sous la colonneusername
alors ils savent que ce tronquage est probablement un nom d'utilisateur, ils ont donc un très bon départ pour essayer de casser votre cryptage. -
IMPORTANT :Verrouillez vraiment l'accès à votre table ; configurer de nombreux utilisateurs MySQL, chacun avec seulement les privilèges minimaux pour faire ce dont ils ont besoin ; vous voulez qu'un utilisateur lise le tableau (seulement ) et ne lisent que certains tableaux ; les utilisateurs peuvent écrire dans certaines tables mais n'ont pas accès aux autres tables. C'est la séparation des préoccupations de sorte que si un utilisateur de MySQL est compromis ; vous n'avez pas automatiquement perdu toutes les données qu'il contient.
-
Utilisez les services de cryptage PHP. Stockez les clés de chiffrement dans un endroit complètement séparé ; par exemple, vous avez un autre serveur que vous utilisez uniquement pour la sauvegarde auquel vous pouvez accéder uniquement pour atteindre les clés de cryptage, donc si votre serveur PHP/MySQL est compromis, vous avez de la place pour couper et verrouiller le serveur de clés afin que vous puissiez limiter les dégâts. Si le serveur de clés a également des sauvegardes, alors vous n'êtes vraiment pas trop compromis (selon la situation ).
-
Configurez de nombreux observateurs et informateurs par e-mail pour vous dire exactement quand certains processus sont en cours d'exécution et quels utilisateurs du serveur (pas des personnes mais des programmes) font quoi. Vous pouvez donc voir pourquoi un processus inattendu commence à s'exécuter à 5h du matin pour essayer de mesurer la taille des tables MySQL. WTF ?
-
Il y a beaucoup de potentiel pour que vos données MySQL AES_ENCRYPT soient "sniffées" même si elles ne sont pas au repos dans la base de données, mais si le site Web est compromis (ou pire, le code PHP n'est pas sécurisé), les attaques temporelles peuvent fonctionner. contenu des données en chronométrant les recherches de requêtes et les retours de paquets de données.
-
La sécurité est un trou noir; à un moment ou à un autre, vous allez penser "Merde, j'en ai assez fait". Personne n'a jamais une sécurité totale, certaines organisations très dévouées en ont assez Sécurité. Vous devez déterminer la distance que vous êtes prêt à parcourir avant d'avoir parcouru la distance.
* Pourquoi impossible ? Car pour protéger vos données de toutes les menaces, tout le temps, il faudrait qu'elles soient illisibles, inutilisables, comme un hachage. Un hachage est protégé de tout le monde, tout le temps. Mais un hachage ne peut jamais être dé-haché.