En résumé, considérons une application Web qui stocke certaines informations dans une base de données sous forme de données chiffrées. Bien que j'essaie délibérément de garder ce quelque chose de générique, voici quelques hypothèses:
Questions:
Je sais que c'est une question de sécurité assez basique et donc s'il y a des ressources qui me manquent, ce serait aussi très, très utile. J'ai passé beaucoup de temps (au fil des ans) à essayer de saisir ces informations sur la base d'informations sur la sécurité des applications Web (OWASP, PCI DSS, etc.), mais souvent ces informations sont très génériques (par exemple, "protéger les données "," crypter les données ") ou très spécifique (" pour crypter quelque chose avec AES faire ceci ... ").
* Je comprends que ce n'est pas une solution de sécurité complète à part entière. Je comprends qu'il existe plusieurs vecteurs pour accéder à ces informations et les décoder. Je reconnais que cela peut être une mauvaise question à cet égard :)
Modifié pour ajouter plus d'informations sur les hypothèses à cette question
Où/comment stockez-vous la ou les clés utilisées pour le chiffrement?
Approche standard si vous utilisez un chiffrement intégré sur quelque chose comme une base de données SQL ou Oracle, la base de données générera une clé de chiffrement et la chiffrera avec une autre clé de protection de clé ou une clé principale. Cela peut être une phrase de passe ou une clé plus longue stockée dans par ex. Fichier .pem.
Il est généralement stocké dans un répertoire restreint auquel seuls root/Administrateur et le compte de service de base de données peuvent accéder. Au lancement de la base de données, la clé est lue et chargée en mémoire. Il est ensuite utilisé pour déchiffrer les clés de chiffrement.
Tout d'abord, dans un système où les serveurs Web et de base de données sont identiques, comment gérez-vous la clé?
La clé est stockée dans un répertoire sur le serveur. Le renouvellement ou la révocation s'effectue généralement via le programme de base de données.
Deuxièmement, dans les systèmes où le serveur Web et les serveurs DB sont séparés, comment gérez-vous la clé?
La clé est stockée localement uniquement sur le serveur de base de données. Une option plus sécurisée consiste à utiliser un module de sécurité matérielle (HSM) dans l'un ou l'autre scénario. Il s'agit d'un périphérique matériel qui est connecté au serveur et utilisé pour stocker la clé plutôt qu'un dossier restreint sur le serveur.
Les clés ne sont-elles que des fichiers à autorisation restreinte? Stockées dans un outil/logiciel séparé? J'ai vu que parfois les clés de cryptage sont également cryptées, mais ne savent pas où cela peut aider.
Restreindre le dossier est acceptable tant que vous gérez l'accès administrateur et surveillez les éléments tels que les connexions non autorisées, les connexions en tant que compte de service, les nouveaux comptes ou les groupes ajoutés avec accès au dossier. Comme mentionné ci-dessus, un HSM est l'option la plus sécurisée si les données que vous protégez et les menaces auxquelles vous êtes confronté en ont besoin.
Généralement, la base de données créera des clés d'instance ou de table, puis les chiffrera avec la clé principale. Il y a un avantage minime à chiffrer davantage la clé principale.
Bien que de bonnes informations aient été fournies dans la réponse précédente, il existe un défaut de conception critique, qui n'est pas vraiment remarqué - mais provient de certaines des hypothèses implicites de la question.
La différence ne doit pas être entre:
La conception doit commencer par:
Ou, en fait, encore plus correct:
Qui, à son tour, provient de:
Ce n'est que sur la base de ces questions que vous pouvez concevoir un cryptosystème correctement conçu. (Et évitez la poussière de crypto-fée à laquelle @ D.W.a fait référence).
Donc, quelques exemples de scénarios:
Par souci de simplicité, supposons que le chiffrement doit être effectué côté serveur, la responsabilité incombe au serveur et l'utilisateur final (et l'administrateur) n'a aucune influence sur le chiffrement.
La question principale est donc le chiffrement effectué par le serveur d'applications ou le serveur de base de données? (En fait pas si simple, il y a d'autres options ...)
Cela, comme la plupart des problèmes de sécurité, revient à un compromis:
Etc. (Notez que certaines des questions ci-dessus ne sont pas pertinentes et ne peuvent pas être résolues par le chiffrement du serveur).
Supposons maintenant que vous ayez pris votre décision, sur la base de ce qui précède, entre le cryptage du serveur d'applications et le cryptage de la base de données.
Notez que si le serveur Web et la base de données sont sur le même serveur ou non, cela n'a presque aucun effet ici - si l'application est en train de crypter, alors elle envoie simplement des données "spéciales" à la base de données, sinon c'est théorique. Cependant, ceci le fait affecte la discussion sur les menaces ci-dessus - certains problèmes sont obsolètes par la conception, certains sont améliorés ...