Effectivement, c’est une bonne question.
En résumé, j’offre une API qui permet d’enregistrer des fichiers. J’aimerais sécurisé au mieux ces fichiers afin qu’un attaquant ne puisse pas en récupérer le contenu.
Concernant les modèles d’attaque, je vois ceci:
- l’API déchiffre les données et les renvoies (à l’attaquant) en clair
- Ce cas de figure est à sécurisé au niveau de l’API, le chiffrement ne va pas aider
- l’API à une faille et permet de récupérer la liste des fichiers (non déchiffrer)
- Le chiffrement va sécurisé cette partie la (même si l’API devra être sécurisé en amont pour éviter cela).
Maintenant côté serveur, c’est là que ça se complique pour moi.
Qu’arrive-t-il si l’attaquant parvient à avoir un accès au serveur ? Imaginon que les sécurités de base aient été mise en place pour protégé les élévations mais que l’attaquant y parvient tout de même. Comment faire en sorte qu’il ne puisse pas déchiffrer le contenu des fichiers ?
Si la clé (Application key + User key dans le cas ci-dessus) sont sur le même serveur, l’attaquant pour déchiffrer à sa guise les documents (peut importe que les fichiers soit en local ou non, puisque s’ils sont en remote, les informations de connexion devront bien être enregistré sur le serveur).
J’aimerais pouvoir au mieux gérer ce cas (et peut-être d’autres qui ne me vienne pas à l’esprit ?) J’ai imaginé, un deuxième serveur qui s’occuperait du chiffrement, qui lui contient une des deux clés nécessaire au chiffrement/déchiffrement. Mais comment s’assurer que la demande est légitime et non effectué par l’attaquant ?
J’imagine qu’il existe des patternes et que ces cas ont été étudier par des personnes bien plus au point que moi. Peut-être sauriez-vous m’aiguiller vers des ressources ou des "patterne" pour mettre en place ceci ?
Je suis navré, je sais que ma demande est vaste et confuse, et c’est là, j’imagine, mon principale problème. Car je suis un peu perdu, et j’aimerais faire ceci au mieux.
Je précise, ma question ne porte pas sur comment sécurisé le serveur pour éviter que l’attaquant y aie accès, mais plutôt "si l’attaquant y a accès, que se passe-t-il et comment protéger les documents au mieux ?"
Edit:
J’ai également imaginé une autre solution: imaginons que la clé de chiffrement User Key soit elle même chiffré à l’aide du mot de passe de l’utilisateur. L’API ne mémoriserait que la clé chiffré, et l’envoie au départ à l’utilisateur. Lors de l’envoie ou la réception d’un document, le client fourni cette clé déchiffré (l’opération de chiffrement/déchiffrement se ferait donc en local, par le client). Ceci ferait en sorte que les documents non chiffré/clé de chiffrement non chiffré ne se trouverait sur le serveur que temporairement dans sa mémoire, réduisant ainsi grandement les risques.