2011-03-09 14 views
20

Tengo que almacenar una pequeña cantidad de campos de base de datos (~ 3) en forma cifrada en las tablas de la base de datos.sql server vs .net encryption

En general, ¿es mejor encriptar/desencriptar datos dentro de una aplicación utilizando la criptografía .net o cifrar/descifrar datos en una base de datos usando cifrado de clave simétrica? ¿Cuáles son los pros/contras de los dos métodos?

Aquí es mi medio ambiente:
Aplicación - intranet aplicación web
Plataforma de Desarrollo - Visual Studio 2010, ASP.Net, .Net Framework 3.5
sistema operativo del servidor - Windows Server 2008
base de datos - SQL Server 2008

Respuesta

11

Esta es una gran pregunta.

Mi opinión es permitir que la parte responsable del almacenamiento de los datos también sea responsable de cualquier encriptación de la misma. En este caso, permita que el servidor SQL administre el cifrado.

La razón principal es que rara vez creamos aplicaciones independientes. Es más común tener múltiples aplicaciones que utilicen el mismo back-end de base de datos. Además, es más común reemplazar la tecnología utilizada para construir una aplicación que reemplazar el motor de la base de datos debajo de ella.

Si lo hace en código, entonces cada aplicación que use el almacén de datos tendría que usar su propia biblioteca de cifrado/descifrado para obtener acceso a los datos. Si se realiza en un servidor SQL, entonces las aplicaciones pueden ignorar el proceso a la vez que se mantiene el mismo nivel de protección.

Junto con esto, debe aprovechar la capacidad de cifrar las conexiones con el servidor SQL, que se encargaría de mantener los datos cifrados mientras está en movimiento entre el servidor web/de la aplicación y la base de datos. También debe tener SSL habilitado entre el navegador y su sitio web para garantizar que los datos nunca se descifren entre el navegador -> servidor web -> servidor de base de datos.

Espero que ayude.

+0

+1 buenos puntos en todos los aspectos :) –

3

Para aplicaciones internas en las que no le preocupan los "investigadores" de Internet, prefiero realizar el cifrado en la base de datos. De esa forma, si algo va hacia el sur con su aplicación (por el motivo que sea) no depende de esa aplicación para recuperar los datos. Su aplicación también, entonces, no tiene la dependencia de los mecanismos de cifrado o la sobrecarga de la ejecución de la aplicación. Puede suponer que se tratará en la base de datos haciendo que el código sea más fácil de mantener.

También es más conveniente para aplicaciones que tienen múltiples interfaces o puertas de enlace. Los datos se cifran/descifran centralmente. Lo que necesitaría en ese caso, sin embargo, es asegurarse de que los datos se transfieren a/desde la base de datos a través de un túnel seguro (SSL o VPN o algo similar); de lo contrario, no significa nada cifrar los datos en todas; se puede interceptar fácilmente con un sniffer de red estándar.

Para entornos de alojamiento compartido prefiero hacer el cifrado dentro de la aplicación por razones de seguridad. En esa situación, controlo las claves y no el proveedor de host.