2011-03-09 8 views
20

Je dois stocker un petit nombre de champs de base de données (~ 3) sous forme cryptée dans les tables de base de données.sql server vs cryptage .net

En général, est-il préférable de crypter/décrypter des données dans une application en utilisant cryptographie .net ou crypter/décrypter des données dans une base de données en utilisant le cryptage à clé symétrique? Quels sont les avantages/inconvénients des deux méthodes?

Voici mon environnement:
Application - application web intranet
Plateforme de développement - Visual Studio 2010, ASP.Net, Net Framework 3.5
serveur du système d'exploitation - Windows Server 2008
Database - SQL Server 2008

Répondre

11

C'est une bonne question.

Mon avis est de laisser la partie responsable du stockage des données être également responsable de tout cryptage de celle-ci. Dans ce cas, laissez le serveur SQL gérer le chiffrement.

La raison principale est que nous construisons rarement des applications autonomes. Il est plus fréquent d'avoir plusieurs applications utilisent le même backend de base de données. En outre, il est plus courant de remplacer la technologie utilisée pour créer une application que de remplacer le moteur de base de données en dessous. Si vous le faites en code, chaque application qui utilise le magasin de données devra utiliser sa propre bibliothèque de chiffrement/déchiffrement pour accéder aux données. Si cela est fait dans un serveur SQL, les applications peuvent être assez ignorantes du processus tout en conservant le même niveau de protection. Parallèlement à cela, vous devez tirer parti de la possibilité de crypter les connexions au serveur SQL, ce qui permettrait de conserver les données cryptées alors qu'il est en mouvement entre le serveur Web/App et la base de données. Vous devriez également avoir SSL activé entre le navigateur et votre site Web pour s'assurer que les données ne sont jamais décryptées entre le navigateur -> serveur web -> serveur de base de données.

Espérons que cela aide.

+0

+1 points positifs tout autour :) –

3

Pour les applications internes où vous ne vous inquiétez pas des "investigateurs" d'Internet, je préfère faire le chiffrement à la base de données. De cette façon, si quelque chose va vers le sud avec votre application (pour une raison quelconque), vous n'êtes pas tributaire de cette application pour récupérer les données. Votre application n'a donc pas non plus la dépendance aux mécanismes de chiffrement ou à la surcharge de l'application. Il peut supposer qu'il sera pris en charge à la base de données rendant le code plus maintenable.

Il est également plus pratique pour les applications dotées de plusieurs interfaces ou passerelles. Les données sont chiffrées/décryptées de manière centralisée. Dans ce cas, vous devez toutefois vous assurer que les données sont transférées vers/depuis la base de données via un tunnel sécurisé (SSL ou VPN ou similaire), sinon cela ne signifie rien de chiffrer les données à tout; il peut être facilement intercepté avec un renifleur de réseau standard.

Pour les environnements d'hébergement partagés, je préfère faire du chiffrement dans l'application à des fins de sécurité. Dans cette situation, je contrôle les clés et non le fournisseur de l'hôte.