EL OUATINETECHNICIEN OUATINE

🔐 Gestion des clés

Service léger de chiffrement d’enveloppe : vos propres clés de données, enveloppées par une clé maîtresse qui ne quitte jamais le serveur, avec rotation et audit complet.

Qu’est-ce que le chiffrement d’enveloppe ?

Au lieu de chiffrer vos données directement avec la clé maîtresse, la plateforme génère une clé de données aléatoire (32 octets) pour chacune de vos clés. Vos données sont chiffrées avec la clé de données (AES-256-GCM), et la clé de données elle-même est chiffrée par la clé maîtresse puis stockée chiffrée. Résultat : la clé maîtresse ne sert qu’à envelopper les clés et ne touche jamais vos données — le même principe que les grands systèmes de chiffrement cloud.

Vos clés, sous votre contrôle

Chaque clé appartient à votre seul compte. Vous pouvez créer des clés, les faire pivoter (nouvelle clé de données, l’ancienne restant disponible pour déchiffrer les anciennes données) et les désactiver à tout moment. Une clé désactivée refuse tout nouveau chiffrement mais peut toujours déchiffrer — vous récupérez toujours vos données.

Un journal d’audit pour chaque opération

Chaque opération (création, chiffrement, déchiffrement, rotation, désactivation) est journalisée avec l’heure et l’adresse IP. Le journal ne contient que des métadonnées — aucune clé, aucun texte chiffré, aucune donnée déchiffrée.

Points d’accès

MéthodeCheminAccèsDescription
POST/api/kms/keysCompte clientCréer une nouvelle clé de données
POST/api/kms/encryptCompte clientChiffrer un texte (jusqu’à 64 Ko) — refusé si la clé est désactivée
POST/api/kms/decryptCompte clientDéchiffrer une enveloppe — fonctionne même pour les clés désactivées (récupération)
POST/api/kms/rotateCompte clientRotation : nouvelle clé de données, l’ancienne reste pour déchiffrer
POST/api/kms/disableCompte clientDésactiver la clé (bloque seulement les nouveaux chiffrements)
GET/api/kms/keysCompte clientVos clés — métadonnées uniquement, jamais les clés enveloppées

Exemple de code

// 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'

Notes de sécurité

  1. La clé maîtresse (32 octets aléatoires) vit dans un fichier sur le serveur uniquement, avec des permissions restreintes ; elle ne quitte jamais le serveur et n’apparaît dans aucune interface.
  2. Si la clé maîtresse est perdue ou le fichier supprimé, tout chiffrement s’arrête immédiatement (erreur 503) — c’est voulu : pas de clé maîtresse = pas de chiffrement, pas de mode dégradé.
  3. Les clés de données aléatoires sont effacées de la mémoire dès leur usage et ne sont jamais journalisées.
  4. Chaque enveloppe est liée à sa clé et à sa version (données authentifiées additionnelles) — impossible de la réutiliser avec une autre clé.
  5. Conception à clé maîtresse unique : simple et transparente, mais ce n’est pas un HSM — un accès root au serveur pourrait théoriquement lire le fichier. Sauvegardez-le en lieu sûr.
EL OUATINE — SecureCell Tech by El Ouatine LLC