encriptar encriptada encriptacion desencriptar definicion datos contraseña cifrado algoritmos database language-agnostic passwords

database - encriptada - encriptar datos sql server 2012



Encriptación de contraseña simple (14)

Apoyo la votación para MD5 o SHA con una sal. Cualquiera de los principales lenguajes de desarrollo web tiene funciones integradas para calcular el hash (en PHP, por ejemplo, el paquete mcrypt contiene las funciones necesarias).

¿Qué es un esquema de cifrado bueno y simple para proteger contraseñas en una base de datos? No necesito necesariamente algo que sea hiperseguro ni necesito nada que sea rapidísimo, pero esas cosas serían agradables. Principalmente, solo quiero algo fácil de implementar sin ser terriblemente lento o inseguro.


Como dice mk, SHA1 o MD5 son los estándar, junto con SHA2.

Lo que quiere es más generalmente llamado función de hash criptográfica. Los hash criptográficos están diseñados para ser de una sola dirección (dado el hash resultante, no debería poder derivar la entrada original). Además, la probabilidad de que dos cadenas arbitrarias tengan el mismo hash (conocido como colisión hash) debe ser baja (idealmente 1 / número de valores hash).

Desafortunadamente, el hecho de que sus contraseñas sean hash no lo libera de tener que esforzarse mucho para mantener seguras las versiones hash. Demasiadas personas usarán contraseñas débiles que serían vulnerables a un ataque de fuerza bruta fuera de línea.

Editar: varias personas ya han señalado la importancia de usar una sal. Una sal es un valor constante que se mezcla con la entrada antes de usar la función hash. Tener una sal única evita que los atacantes usen tablas precomputadas de contraseñas comunes (tablas de arcoíris) para forzar tus contraseñas de forma aún más rápida.


Debe utilizar un algoritmo hash unidireccional como SHA-1 sugerido anteriormente con una sal. Sugeriría este sitio para más información. Incluye algunos ejemplos de código / implementación. http://www.obviex.com/samples/hash.aspx


Ese fue un problema mío hace un par de semanas. Estábamos implementando un gran proyecto de MIS en 975 ubicaciones geográficas diferentes donde nuestra propia tienda de credenciales de usuario se utilizará como un autenticador para diferentes conjuntos de aplicaciones ya implementadas y en uso. Ya proporcionamos servicios de autenticación basados ​​en REST y SOAP, pero el cliente insistió en poder llegar a la tienda de credenciales del usuario desde otras aplicaciones con solo una conexión de base de datos a la vista de solo lectura de la tabla o vista relacionada. Suspiro ... (esta mala decisión de diseño altamente acoplada es un tema de otra pregunta).

Eso nos obligó a sentarnos y convertir nuestro esquema de almacenamiento de contraseñas salado e iterativamente hash a una especificación y proporcionar algunas implementaciones de lenguaje diferente para una fácil integración.

En resumen, lo llamamos Contraseñas hash bastante seguras o FSHP . Implementado en Python, Ruby, PHP5 y lanzado a dominio público. Disponible para ser consumido, bifurcado, flameado o escupido en GitHub en http://github.com/bdd/fshp

FSHP es una implementación de hashing de contraseñas sateada e iterativa.

El principio de diseño es similar con la especificación PBKDF1 en RFC 2898 (también conocido como PKCS # 5: Especificación de criptografía basada en contraseña versión 2.0). FSHP permite elegir la longitud de sal, el número de iteraciones y la función de cifrado subyacente entre SHA-1 y SHA-2 (256, 384, 512). El prefijo de metadefinición al comienzo de cada salida lo hace portátil y le permite al consumidor elegir su propia línea base de seguridad de almacenamiento de contraseñas.

SEGURIDAD :

El FSHP1 predeterminado usa sales de 8 bytes, con 4096 iteraciones de hash SHA-256. - La sal de 8 bytes hace que los ataques de tabla arcoíris no sean prácticos al multiplicar el espacio requerido por 2 ^ 64. - 4096 iteraciones hace que los ataques de fuerza bruta sean bastante caros. - No hay ataques conocidos contra SHA-256 para encontrar colisiones con un esfuerzo computacional de menos de 2 ^ 128 operaciones en el momento de este lanzamiento.

IMPLEMENTACIONES:

  • Python: probado con 2.3.5 (con hashlib), 2.5.1, 2.6.1
  • Ruby: Probado con 1.8.6
  • PHP5: probado con 5.2.6

Todos son más que bienvenidos para crear implementaciones de idiomas faltantes o pulir las implementaciones actuales.

OPERACIÓN BÁSICA (con Python) :

>>> fsh = fshp.crypt(''OrpheanBeholderScryDoubt'') >>> print fsh {FSHP1|8|4096}GVSUFDAjdh0vBosn1GUhzGLHP7BmkbCZVH/3TQqGIjADXpc+6NCg3g== >>> fshp.validate(''OrpheanBeholderScryDoubt'', fsh) True

PERSONALIZAR LA CRIPTA:

Vamos a debilitar nuestro esquema de hashing de contraseñas. - Disminuya la longitud de la sal del valor predeterminado de 8 a 2. - Reduzca la ronda de iteración de los valores predeterminados 4096 a 10. - Seleccione FSHP0 con SHA-1 como el algoritmo hash subyacente.

>>> fsh = fshp.crypt(''ExecuteOrder66'', saltlen=2, rounds=10, variant=0) >>> print fsh {FSHP0|2|10}Nge7yRT/vueEGVFPIxcDjiaHQGFQaQ==




La clave para una mejor seguridad, creo, es usar sales dinámicas. Esto significa que genera una cadena aleatoria para cada nuevo usuario y usa esa cadena para eliminar el hash. Por supuesto, necesita almacenar esta sal en la base de datos para poder verificar la contraseña más tarde (no la encripto de ninguna manera).


Me he dado cuenta de una gran confusión acerca de cómo hacer hash de contraseñas correctamente, especialmente en . Así que escribí una página que debería aclarar todo. Hay un poco más que usar un hash simple.

Más información: Cómo hacer hash de contraseñas correctamente


Para una encriptación no reversible, definitivamente iría con SHA256 o SHA1. El MD5 ahora tiene bastantes colisiones y se han puesto muchos esfuerzos para romperlo, por lo que no es bueno usarlo.



Si desea una solución a prueba de futuro, recomendaría SHA256 o SHA512. El geekworld criptográfico está inquieto por MD5 y, en menor medida, SHA1.

O, si puede, espere SHA-3



Si usa MD5 o SHA1, use una sal para evitar los hacks de tablas del arco iris.

En C # esto es fácil:

MD5CryptoServiceProvider hasher = new MD5CryptoServiceProvider(); string addSalt = string.Concat( "ummm salty ", password ); byte[] hash = hasher.ComputeHash( Encoding.Unicode.GetBytes( addSalt ) );


Use el algoritmo de hash de una forma SHA junto con una sal única. Es el algoritmo principal que uso para almacenar mis contraseñas en la base de datos.