sql-server-2008 - para - encriptar contraseña c# sql server
almacenar contraseñas en SQL Server (4)
El cifrado de datos confidenciales es bueno. Sin embargo, con las contraseñas, nunca debería necesitar conocer el valor original, y dado que todo lo que está encriptado también puede descifrarse, pone esa información en peligro de ser descubierta.
En cambio, debe mantener un hash de la contraseña. Este proceso toma el valor y genera lo que equivale a una suma de comprobación muy complicada. Dado el número, no hay forma de volver a la contraseña original, lo que aumenta la seguridad de dicha información. Cuando quiere saber si alguien le ha dado la contraseña correcta, calcula el valor que le dieron y compara los valores hash.
La seguridad es un tema complicado. Incluso con hashes, puede terminar teniendo un sistema que tiene importantes fallas de seguridad. Obtener la ayuda de un asesor de seguridad no es una mala idea si nadie más en su equipo ya tiene ese tipo de conocimiento.
¿Cuál es la práctica recomendada para almacenar contraseñas de usuario en SQL Server 2008?
Estoy almacenando detalles de usuario para una intranet, y me gustaría obtener consejos sobre la mejor manera de almacenar detalles de un usuario como nombre, contraseña y privilegios de acceso de usuario, etc. Estoy pensando en crear una columna nvarchar y luego encriptar este texto antes de insertarlo en la mesa.
La forma habitual de almacenar contraseñas es utilizar una función hash en la contraseña, pero salt antemano. Es importante "saltear" la contraseña, para defenderse contra los ataques de tabla arcoiris .
Entonces tu mesa debería verse así
._______._________________.______________.
|user_id|hash |salt |
|-------|-----------------|--------------|
|12 |adsgasdg@g4wea...|13%!#tQ!#3t...|
| |... |... |
Al verificar si una contraseña determinada coincide con un usuario, debe concatenar la sal a la contraseña dada y calcular la función hash de la cadena de resultados. Si la salida de la función hash coincide con la columna hash
, es la contraseña correcta.
Sin embargo, es importante comprender que la idea de sal-hachís tiene una razón específica para evitar que cualquiera que tenga acceso a la base de datos conozca cualquier contraseña (se considera un problema difícil revertir una salida de función hash). Por ejemplo, el DBA del banco no podrá iniciar sesión en su cuenta bancaria, incluso si tiene acceso a todas las columnas.
También debería considerar usarlo si cree que sus usuarios usarán una contraseña sensible (por ejemplo, su contraseña para su cuenta de Gmail) como contraseña para su sitio web.
En mi humilde opinión, no siempre es una característica de seguridad necesaria. Entonces deberías pensar si lo quieres o no.
Vea este artículo para un buen resumen de este mecanismo.
Actualización: Vale la pena mencionar que, para mayor seguridad contra ataques dirigidos para revertir el hash de contraseñas individuales, debe usar bcrypt , que puede ser arbitrariamente difícil de calcular. (Pero a menos que tengas realmente miedo de que misterioso hombre de negro ataque tu base de datos específica, creo que sha1 es lo suficientemente bueno. No introduciría otra dependencia para mi proyecto para esta seguridad adicional. Dicho esto, no hay razón para no usar sha1 100 veces, lo que daría un efecto similar).
T-Sql incluye funciones de cifrado: 4Guys tenía un buen artículo sobre SQL Server 2005 hace un tiempo, pero creo que todo sigue siendo válido para 2008.
esa es generalmente la manera de hacerlo.
Su aplicación manejará el cifrado (y, opcionalmente, el descifrado), la base de datos solo almacenará la contraseña.
Recomiendo usar algo más fuerte que el defacto fechado - MD5
A la mayoría de los desarrolladores .net les gusta usar TDES