تدوير المفاتيح
تدوير المفاتيح
تدوير مفاتيح التشفير لتعزيز الأمان باستخدام DuoKey EKM
نظرة عامة
يُعد تدوير المفاتيح من أفضل الممارسات الأمنية التي تتضمن استبدال مفاتيح التشفير دوريًا. في DuoKey SQL EKM، يوجد نوعان من المفاتيح يمكن تدويرهما:
المتطلبات المسبقة
- قاعدة بيانات مشفّرة بـ DuoKey EKM
- SQL Server مكوّن مع مزوّد DuoKey EKM
- تثبيت SQL Server Management Studio (SSMS)
- امتيازات Sysadmin على SQL Server
- فهم التسلسل الهرمي للمفاتيح في TDE
أنواع المفاتيح وسيناريوهات التدوير
مفتاح التشفير الرئيسي (MEK)
مفتاح غير متماثل مخزّن في منصة DuoKey
مفتاح تشفير قاعدة البيانات (DEK)
مفتاح متماثل يشفّر قاعدة البيانات
| السيناريو | ما الذي يُدوَّر | التعقيد | نوع العملية |
|---|---|---|---|
| تدوير DEK فقط | مفتاح تشفير قاعدة البيانات | منخفض | متصل، روتيني |
| تدوير MEK فقط | المفتاح غير المتماثل (MEK) | متوسط | مخطّط، منسّق |
| التدوير الكامل | كل من DEK و MEK | عالٍ | مخطّط، منسّق |
تدوير المفتاح الرئيسي (غير المتماثل) ليس مهمة روتينية "بلا توقف". يجب التخطيط لها وتنسيقها: اربط المفتاح الرئيسي الجديد، وأعد تشفير كل DEK تابع بالمفتاح الجديد، واحتفظ بالمفتاح الرئيسي القديم حتى يُرحَّل كل قاعدة بيانات تابعة وكل نسخة احتياطية تعتمد عليه. لا تحذف مفتاحاً رئيسياً مربوطاً أو تدوّره أو تنقله بينما لا تزال أي قاعدة بيانات TDE أو نسخة احتياطية تعتمد عليه، وإلا ستنتقل قاعدة البيانات إلى حالة مشبوهة/غير متصلة لأنه لم يعد بالإمكان فك تغليف DEK الخاص بها.
لماذا تدوير المفاتيح؟
الحد من التعرّض
يقلل خطر اختراق المفاتيح بمرور الوقت
الامتثال
تلبية المتطلبات التنظيمية (PCI-DSS، HIPAA)
الاستجابة للحوادث
جزء من إجراءات حوادث الأمان
أفضل ممارسة
ممارسة أمنية معيارية في الصناعة
جدول التدوير الموصى به
| تصنيف البيانات | فترة التدوير |
|---|---|
| البيانات الحرجة | كل 3-6 أشهر |
| البيانات الحساسة | كل 6-12 شهرًا |
| البيانات القياسية | سنويًا |
| قائم على الحوادث | فورًا عند الاشتباه في الاختراق |
تدوير DEK فقط
أبسط تدوير - يعيد توليد مفتاح تشفير قاعدة البيانات مع الاحتفاظ بنفس MEK.
التحقق من الحالة الحالية
SELECT
DB_NAME(database_id) AS DatabaseName,
encryption_state,
percent_complete,
key_algorithm,
key_length
FROM sys.dm_database_encryption_keys
WHERE DB_NAME(database_id) = 'EmployeeDB';
GOإعادة توليد DEK
USE EmployeeDB;
ALTER DATABASE ENCRYPTION KEY
REGENERATE
WITH ALGORITHM = AES_256;
GOمراقبة التقدّم
SELECT
DB_NAME(database_id) AS DatabaseName,
encryption_state,
CASE encryption_state
WHEN 4 THEN 'Key change in progress'
WHEN 3 THEN 'Key change complete'
ELSE 'Unexpected state'
END AS Status,
percent_complete
FROM sys.dm_database_encryption_keys
WHERE DB_NAME(database_id) = 'EmployeeDB';
GOأثناء تدوير DEK، تشير encryption_state = 4 إلى أن التدوير قيد التقدّم.
التدوير الكامل للمفاتيح (MEK + DEK)
أكمل تدوير المفاتيح بإنشاء مفتاح غير متماثل جديد وتدوير DEK.
إنشاء مفتاح غير متماثل جديد
USE master;
CREATE ASYMMETRIC KEY SQL_EKM_Key_Rotated
FROM PROVIDER DuoKeyProvider
WITH ALGORITHM = RSA_2048,
PROVIDER_KEY_NAME = 'SQL_EKM_Key_Rotated',
CREATION_DISPOSITION = CREATE_NEW;
GOإنشاء بيانات اعتماد للمفتاح الجديد
CREATE CREDENTIAL SQL_EKM_Key_Rotated_CRED
WITH IDENTITY = '<client_id>',
SECRET = '<enrolled-agent-key>'
FOR CRYPTOGRAPHIC PROVIDER DuoKeyProvider;
GOإنشاء تسجيل دخول للمفتاح الجديد
CREATE LOGIN SQL_EKM_Key_Rotated_LOGIN
FROM ASYMMETRIC KEY SQL_EKM_Key_Rotated;
GO
ALTER LOGIN SQL_EKM_Key_Rotated_LOGIN
ADD CREDENTIAL SQL_EKM_Key_Rotated_CRED;
GOتمكين Encrypt في DuoKey
يجب تمكين عملية التشفير في DuoKey قبل المتابعة.
- سجّل الدخول إلى DuoKey Cockpit
- انتقل إلى قسم Keys
- ابحث عن
SQL_EKM_Key_Rotated - فعّل عملية Encrypt
- احفظ التغييرات
إعادة تشفير DEK بالمفتاح الرئيسي الجديد
اربط DEK الموجود بالمفتاح غير المتماثل الجديد. يُعاد تشفير DEK (يُعاد تغليفه) بالمفتاح الرئيسي الجديد؛ وتبقى خوارزميته AES_256 دون تغيير.
USE EmployeeDB;
ALTER DATABASE ENCRYPTION KEY
ENCRYPTION BY SERVER ASYMMETRIC KEY SQL_EKM_Key_Rotated;
GOلا يوجد تغيير وسيط للخوارزمية. يبقى DEK بخوارزمية AES_256 طوال العملية — يتغيّر المفتاح الرئيسي الذي يحميه فقط. احتفظ بالمفتاح الرئيسي السابق حتى تُرحَّل كل قاعدة بيانات تابعة وكل نسخة احتياطية إلى المفتاح الجديد.
لإصدار DEK جديد أيضًا تحت المفتاح الرئيسي الجديد، شغّل ALTER DATABASE EmployeeDB ENCRYPTION KEY REGENERATE WITH ALGORITHM = AES_256; بعد اكتمال إعادة التشفير.
التحقق من التدوير
SELECT
DB_NAME(database_id) AS DatabaseName,
encryption_state,
encryptor_thumbprint,
encryptor_type
FROM sys.dm_database_encryption_keys
WHERE DB_NAME(database_id) = 'EmployeeDB';
GO
-- Compare with new key thumbprint
USE master;
SELECT
name AS AsymmetricKeyName,
thumbprint,
algorithm_desc
FROM sys.asymmetric_keys
WHERE name = 'SQL_EKM_Key_Rotated';
GOمهام ما بعد التدوير
اختبار عمليات قاعدة البيانات
-- Test read access
USE EmployeeDB;
SELECT TOP 10 * FROM Employees;
GO
-- Test write access
INSERT INTO Employees (EmployeeID, FirstName, LastName, Salary)
VALUES (999, 'Test', 'User', 50000.00);
GO
-- Verify and cleanup
SELECT * FROM Employees WHERE EmployeeID = 999;
DELETE FROM Employees WHERE EmployeeID = 999;
GOإنشاء نسخة احتياطية جديدة
أنشئ دائمًا نسخة احتياطية لقواعد البيانات فور تدوير المفاتيح.
BACKUP DATABASE EmployeeDB
TO DISK = 'C:\Backups\EmployeeDB_AfterRotation.bak'
WITH
COMPRESSION,
CHECKSUM,
STATS = 10;
GOالتدوير التلقائي للمفاتيح
USE msdb;
GO
EXEC dbo.sp_add_job
@job_name = N'QuarterlyKeyRotation',
@enabled = 1,
@description = N'Rotates DEK for encrypted databases';
GO
EXEC dbo.sp_add_jobstep
@job_name = N'QuarterlyKeyRotation',
@step_name = N'RotateDEK',
@subsystem = N'TSQL',
@command = N'
USE EmployeeDB;
ALTER DATABASE ENCRYPTION KEY
REGENERATE WITH ALGORITHM = AES_256;
-- Wait for completion
WAITFOR DELAY ''00:01:00'';
-- Backup after rotation
BACKUP DATABASE EmployeeDB
TO DISK = N''C:\Backups\EmployeeDB_PostRotation.bak''
WITH COMPRESSION;',
@retry_attempts = 2,
@retry_interval = 5;
GO
EXEC dbo.sp_add_schedule
@schedule_name = N'Quarterly',
@freq_type = 16, -- Monthly
@freq_interval = 1,
@freq_recurrence_factor = 3; -- Every 3 months
GO
EXEC dbo.sp_attach_schedule
@job_name = N'QuarterlyKeyRotation',
@schedule_name = N'Quarterly';
GOيجب اختبار التدوير التلقائي ومراقبته بدقة. ضمّن دائمًا معالجة الأخطاء والإشعارات.
التدوير الطارئ للمفاتيح
في حالة الاشتباه في اختراق المفتاح، نفّذ التدوير الطارئ على الفور.
الإجراءات الفورية
- عزل الأنظمة: قيّد الوصول إلى الأنظمة المتأثرة
- إبلاغ فريق الأمان: نبّه أمن المعلومات
- تقييم التأثير: حدد نطاق الاختراق المحتمل
- تنفيذ التدوير: نفّذ تدويرًا معجّلًا
-- 1. Create emergency key
USE master;
CREATE ASYMMETRIC KEY Emergency_Rotation_Key
FROM PROVIDER DuoKeyProvider
WITH ALGORITHM = RSA_2048,
PROVIDER_KEY_NAME = 'Emergency_Rotation_Key',
CREATION_DISPOSITION = CREATE_NEW;
GO
-- 2. Configure credentials (follow standard steps)
-- 3. Enable encrypt operation in DuoKey
-- 4. Re-encrypt the DEK by the emergency master key
-- (DEK stays AES_256 - no intermediate algorithm change)
USE EmployeeDB;
ALTER DATABASE ENCRYPTION KEY
ENCRYPTION BY SERVER ASYMMETRIC KEY Emergency_Rotation_Key;
GO
-- 5. Optionally issue a fresh DEK under the new master
ALTER DATABASE ENCRYPTION KEY
REGENERATE WITH ALGORITHM = AES_256;
GO
-- 6. Verify and backup
SELECT * FROM sys.dm_database_encryption_keys;
GO
BACKUP DATABASE EmployeeDB
TO DISK = 'C:\Backups\EmergencyRotation.bak'
WITH COMPRESSION;
GO