Aller au contenu

EncryptionServiceInterface

L'interface EncryptionServiceInterface est la sentinelle de la vie privée dans Synapse Core. Elle permet de chiffrer automatiquement les conversations et les données sensibles en base de données.

🛠 Pourquoi l'utiliser ?

  • Sécurité maximale : Même en cas de fuite de la base de données, les messages des utilisateurs restent illisibles.
  • Confiance : Offrir des garanties de confidentialité à vos clients.
  • RGPD : Facilite la mise en conformité en protégeant les données à caractère personnel (PII).

📋 Résumé du Contrat

Méthode Entrée Sortie Rôle
encrypt(string $data) Texte brut string Transforme le message en suite de caractères chiffrée.
decrypt(string $data) Texte chiffré string Restaure le message original pour l'affichage ou le LLM.
isEncrypted(string $data) Texte bool Détecte si une donnée est déjà chiffrée (prévention).

🚀 Exemple : Implémentation basée sur Libsodium

namespace App\Synapse\Security;

use ArnaudMoncondhuy\SynapseCore\Contract\EncryptionServiceInterface;

class SodiumEncryption implements EncryptionServiceInterface
{
    public function __construct(private string $key) {}

    public function encrypt(string $data): string
    {
        $nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
        $cipher = sodium_crypto_secretbox($data, $nonce, $this->key);
        return base64_encode($nonce . $cipher);
    }

    public function decrypt(string $data): string
    {
        $decoded = base64_decode($data);
        $nonce = substr($decoded, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
        $cipher = substr($decoded, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
        return sodium_crypto_secretbox_open($cipher, $nonce, $this->key);
    }

    public function isEncrypted(string $data): bool
    {
        return str_ends_with($data, '=='); // Détection simpliste
    }
}

💡 Conseils d'implémentation

[!CAUTION] Gestion des clés : Ne stockez JAMAIS votre clé de chiffrement dans le code source. Utilisez des variables d'environnement (.env.local) ou un coffre-fort de secrets (Vault).

  • Transparence : Synapse Core appelle automatiquement ces méthodes via le ConversationManager. Vous n'avez pas à gérer le chiffrement manuellement dans vos contrôleurs.