خدمة تشفير مغلف خفيفة: مفاتيح بيانات خاصة بك، ملفوفة بمفتاح رئيسي لا يغادر الخادم أبداً، مع تدوير تلقائي وسجل تدقيق كامل لكل عملية.
بدل تشفير بياناتك مباشرة بالمفتاح الرئيسي، تُنشئ المنصة مفتاح بيانات عشوائي (32 بايت) لكل مفتاح من مفاتيحك. بياناتك تُشفَّر بمفتاح البيانات (AES-256-GCM)، ومفتاح البيانات نفسه يُشفَّر بالمفتاح الرئيسي ويُخزَّن مشفّراً. النتيجة: المفتاح الرئيسي يُستعمل فقط للفّ المفاتيح ولا يلمس بياناتك أبداً — وهذا هو نفس المبدأ المستعمل في أنظمة التشفير السحابية الكبرى.
كل مفتاح تملكه مرتبط بحسابك وحده. يمكنك إنشاء مفاتيح جديدة، تدويرها (إصدار مفتاح بيانات جديد مع الاحتفاظ بالقديم لفك تشفير البيانات السابقة)، وتعطيلها متى شئت. المفتاح المعطّل يرفض أي تشفير جديد لكنه يبقى قادراً على فك التشفير — لتستعيد بياناتك دائماً.
كل عملية (إنشاء، تشفير، فك تشفير، تدوير، تعطيل) تُسجَّل في سجل تدقيق مع الوقت وعنوان IP. السجل يحمل بيانات وصفية فقط — لا يُخزَّن فيه أي مفتاح ولا أي نص مشفّر ولا أي بيانات مفكوكة.
| الطريقة | المسار | الصلاحية | الوصف |
|---|---|---|---|
POST | /api/kms/keys | حساب الزبون | إنشاء مفتاح بيانات جديد |
POST | /api/kms/encrypt | حساب الزبون | تشفير نص (حتى 64KB) — يُرفَض إذا كان المفتاح معطلاً |
POST | /api/kms/decrypt | حساب الزبون | فك تشفير ظرف — يعمل حتى للمفاتيح المعطلة (استعادة) |
POST | /api/kms/rotate | حساب الزبون | تدوير: إصدار مفتاح بيانات جديد، والقديم يبقى لفك التشفير |
POST | /api/kms/disable | حساب الزبون | تعطيل المفتاح (يوقف التشفير الجديد فقط) |
GET | /api/kms/keys | حساب الزبون | قائمة مفاتيحك — بيانات وصفية فقط، لا مفاتيح ملفوفة |
// Node.js — create a key, encrypt, decrypt (customer session cookie)
const base = 'https://securecelleouatine.com';
const k = await (await fetch(base + '/api/kms/keys', { method: 'POST' })).json();
const keyId = k.key_id; // ek_...
const enc = await (await fetch(base + '/api/kms/encrypt', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ key_id: keyId, plaintext_b64: Buffer.from('secret').toString('base64') })
})).json();
// enc.envelope = { v, iv, ct, tag } — store it, it only decrypts with this key
const dec = await (await fetch(base + '/api/kms/decrypt', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ key_id: keyId, envelope: enc.envelope })
})).json();
console.log(Buffer.from(dec.plaintext_b64, 'base64').toString()); // 'secret'