Chiffrement dans MySQL : rotation de la clé principale

En prévision du début d'une nouvelle inscription au cours "Base de données" nous continuons à publier une série d'articles sur le chiffrement dans MySQL.

Dans l'article précédent de cette série, nous avons discuté comment fonctionne le cryptage par clé principale. Aujourd'hui, sur la base des connaissances acquises précédemment, examinons la rotation des clés principales.

La rotation de la clé principale consiste à générer une nouvelle clé principale et à rechiffrer les clés de l'espace table (qui sont stockées dans les en-têtes de l'espace table) avec cette nouvelle clé.

Rappelons à quoi ressemble l'en-tête d'un tablespace chiffré :

Chiffrement dans MySQL : rotation de la clé principale

D'après l'article précédent, nous savons que le serveur lit les en-têtes de tous les espaces de table chiffrés au démarrage et mémorise le plus grand KEY ID. Par exemple, si nous avons trois tables avec KEYID = 3 et une table avec KEYID = 4, alors l'ID de clé maximum sera de 4. Appelons ceci KEY ID - MAX KEY ID.

Comment fonctionne la rotation de la clé principale

1. L'utilisateur exécute ALTER INNODB MASTER KEY.

2. Le serveur demande au trousseau de clés de générer une nouvelle clé principale avec l'UUID et la CLÉ du serveurID égal à un plus MAXclé - KEYIDENTIFIANT. Nous obtenons donc un identifiant de clé principale égal à INNODBCLÉ-UUID-(MAXclé - KEYidentifiant + 1). Lors de la génération réussie de la clé principale, MAX KEY ID est incrémenté de un (c'est-à-dire MAXclé - KEYID=MAXclé - KEYidentifiant + 1).

3. Le serveur analyse tous les tablespaces chiffrés avec la clé principale, et pour chaque tablespace :

  • chiffre la clé de l'espace de table avec la nouvelle clé principale ;

  • met à jour l'identifiant de la clé vers le nouveau MAXclé - KEYIDENTIFIANT;

  • si l'UUID est différent de l'UUID du serveur, mettez à jour l'UUID du serveur.

Comme nous le savons, l'ID de clé principale utilisé pour déchiffrer une table se compose d'un UUID et d'un ID de clé lus à partir de l'en-tête de l'espace de table. Ce que nous faisons maintenant, c'est mettre à jour ces informations dans l'en-tête de chiffrement de l'espace de table afin que le serveur reçoive la clé principale correcte.

Si nous avons des espaces de table à différents emplacements, tels que des sauvegardes différentes, ils peuvent utiliser différentes clés principales. Toutes ces clés principales devront être extraites du référentiel au démarrage du serveur. Cela peut ralentir le démarrage du serveur, en particulier si un magasin de clés côté serveur est utilisé. Avec la rotation de la clé principale, nous chiffrons à nouveau les clés des tablespaces avec une seule clé principale qui est la même pour tous les tablespaces. Le serveur ne devrait désormais recevoir qu'une seule clé principale au démarrage.

Ceci, bien sûr, n'est qu'un effet secondaire agréable. L'objectif principal de la rotation de la clé principale est de rendre notre serveur plus sécurisé. Dans le cas où la clé principale a été volée d'une manière ou d'une autre dans le coffre (par exemple, à partir du serveur Vault), il est possible de générer une nouvelle clé principale et de chiffrer à nouveau les clés de l'espace de table, invalidant ainsi la clé volée. Nous sommes en sécurité... presque.

Dans un article précédent, j'ai expliqué qu'une fois qu'une clé d'espace de table est volée, un tiers peut l'utiliser pour déchiffrer des données. Pourvu qu'il y ait accès à notre disque. Si la clé principale est volée et que vous avez accès aux données chiffrées, vous pouvez utiliser la clé principale volée pour déchiffrer la clé de l'espace de table et obtenir les données déchiffrées. Comme vous pouvez le voir, la rotation de la clé principale n'aide pas dans ce cas. Nous chiffrons à nouveau la clé de l'espace de table avec la nouvelle clé principale, mais la clé réelle utilisée pour chiffrer/déchiffrer les données reste la même. Par conséquent, le "pirate" peut continuer à l'utiliser pour décrypter les données. Plus tôt j'ai laissé entendre que Serveur Percona pour MySQL peut effectuer un véritable rechiffrement de tablespace, et pas seulement un simple rechiffrement de clé de tablespace. Cette fonctionnalité est appelée threads de chiffrement. Cependant, cette fonctionnalité est encore expérimentale pour le moment.

La rotation de la clé principale est utile lorsque la clé principale est volée, mais il n'y a aucun moyen pour un attaquant de l'utiliser et de déchiffrer les clés de l'espace de table.

Inscrivez-vous pour une leçon de démonstration gratuite.

Lire la suite:

Source: habr.com