Foros del Web » Programando para Internet » PHP »

Encriptar contraseña en bbdd

Estas en el tema de Encriptar contraseña en bbdd en el foro de PHP en Foros del Web. Hola. Hasta ahora siempre he codificado la contraseña de un usuario en la bbdd de diferentes maneras: md5, sha1, sha1+salt, md5+sha1+salt, etc. Pero ahora me ...
  #1 (permalink)  
Antiguo 24/01/2012, 10:19
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años, 1 mes
Puntos: 5
Encriptar contraseña en bbdd

Hola. Hasta ahora siempre he codificado la contraseña de un usuario en la bbdd de diferentes maneras: md5, sha1, sha1+salt, md5+sha1+salt, etc.

Pero ahora me pregunto... qué importancia tiene codificar las contraseñas? Porqué es útil guardar la contraseña codificada? Es decir, si el canal no es seguro (no tiene certifcado SSL), porque se debe codificar la contraseña?

Por esta misma razón, da igual codificarla por base64, que por md5 que por nada, no?
  #2 (permalink)  
Antiguo 24/01/2012, 10:24
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: Encriptar contraseña en bbdd

no es lo mismo un algoritmo codificador como base64 que es perfectamente reversible que un HASH que es irreversible como MD5 y compañía

existen diversos factores del porqué se debe aplicar hash a la contraseña, entre ellas, proteger su privacidad, por ejemplo un usuario es libre de elegir la misma contraseña para muchos servicios, y si no hasheas la contraseña tienes un punto de acceso potencial para atacarlo en el futuro y que el usuario te demande a tí, por no tener tan básico nivel de seguridad en el sitio, y si por desventura te hackean la base de datos, el hacker obtendrá datos, más no la contraseña.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 24/01/2012, 11:14
Avatar de pzyrichipz  
Fecha de Ingreso: junio-2010
Ubicación: Metepec, Mexico
Mensajes: 66
Antigüedad: 13 años, 9 meses
Puntos: 5
Respuesta: Encriptar contraseña en bbdd

Cita:
Iniciado por maycolalvarez Ver Mensaje
no es lo mismo un algoritmo codificador como base64 que es perfectamente reversible que un HASH que es irreversible como MD5 y compañía

existen diversos factores del porqué se debe aplicar hash a la contraseña, entre ellas, proteger su privacidad, por ejemplo un usuario es libre de elegir la misma contraseña para muchos servicios, y si no hasheas la contraseña tienes un punto de acceso potencial para atacarlo en el futuro y que el usuario te demande a tí, por no tener tan básico nivel de seguridad en el sitio, y si por desventura te hackean la base de datos, el hacker obtendrá datos, más no la contraseña.
me interesa este tema mi duda el hash es iwual que MD5 ???????
  #4 (permalink)  
Antiguo 24/01/2012, 11:20
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Encriptar contraseña en bbdd

evidentemente es un filtro de seguridad para los usuarios ya que si un hacker consigue acceder a tu bd y apoderarse de toda una lista de contraseñas y emails imaginate que facil le seria saber las contraseñas reales ,se lo as puesto en bandeja...
  #5 (permalink)  
Antiguo 24/01/2012, 11:28
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Encriptar contraseña en bbdd

Comprendo. A ver si me podéis explicar una cosa.
Hay muchos foros y webs donde le he dado a "recordar contraseña" y me han enviado a mi buzón la contraseña tal y como la creé en su día. Es decir, que la contraseña no la han codificado, no? Porque en teoria md5 no es reversible.
  #6 (permalink)  
Antiguo 24/01/2012, 11:38
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Encriptar contraseña en bbdd

Cita:
Iniciado por cslbcn Ver Mensaje
Comprendo. A ver si me podéis explicar una cosa.
Hay muchos foros y webs donde le he dado a "recordar contraseña" y me han enviado a mi buzón la contraseña tal y como la creé en su día. Es decir, que la contraseña no la han codificado, no? Porque en teoria md5 no es reversible.
Correcto, eso es que no esta codificada. Los que la tienen codificada, suelen tener un sistema para recuperar la contraseña, pero te envían una nueva al correo asociado a ese usuario, que a su vez se guarda en la db.
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #7 (permalink)  
Antiguo 24/01/2012, 11:39
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Encriptar contraseña en bbdd

claro que no esta encriptada , en verdad un webmaster nunca debe de tener acceso a esas contraseñas ya que en registro se encriptan y desde el momento que entran en la bd ya estan encriptadas y ya no es reversible
  #8 (permalink)  
Antiguo 24/01/2012, 11:47
Avatar de cristian_cena
Colaborador
 
Fecha de Ingreso: junio-2009
Mensajes: 2.244
Antigüedad: 14 años, 9 meses
Puntos: 269
Respuesta: Encriptar contraseña en bbdd

Si te llegó al mail posterior al registro:
O no la encriptaron o la cifraron de modo reversible (base64) mediante una clave que solo conocen ellos (mcrypt). En ambos casos, está mal.
Las contraseñas deben ser encriptadas de modo irreversible siempre:
  • En caso de que el usuario pierda la contraseña darle la opción de generar una nueva.
  • En caso de que pierda el username y la contraseña se recurre a un tercer dato el cual se pide en el formulario de registro y puede corresponder por lo general al email o a una pregunta secreta (para cuando se usa el email en lugar del username).

Corríjanme si me equivoco:
  • MD5 o SHA deben usarse para los datos críticos del sistema: username y password de los usuarios.
  • base64 y mcrypt deben usarse para almacenar datos sensibles como ser todos los datos de los usuarios: nombre, dni, teléfono, localidad, código postal, etc.
  #9 (permalink)  
Antiguo 24/01/2012, 12:03
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: Encriptar contraseña en bbdd

MD5 y SHA son 2 algoritmos de HASH no reversibles, dependiendo de la seguridad / eficiencia se puede usar otro con más fuerza, debido a que MD5 por ejemplo es el más rápido pero no el más seguro

base64 sólo lo debes usar para el transporte de datos, porque NO requiere clave alguna, no aporta seguridad alguna, es una codificación diseñada para serializar datos y facilitar su almacenamiento y distribución, de modo que se conserve al máximo la integridad de los datos, no si son plagiados

mycrypt dependiendo del tipo de cifrado (sincrono/asincrono) si logra encriptar y asegurar datos con contraseña (o certificado), en el caso de web seguras, utilizar openSSL siempre utilizará un algoritmo asíncrono, o el que se adquiera con un certificado RSA security, además que sólo debe configurarse en el web server y es trasparente para php
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #10 (permalink)  
Antiguo 24/01/2012, 12:12
Avatar de pzyrichipz  
Fecha de Ingreso: junio-2010
Ubicación: Metepec, Mexico
Mensajes: 66
Antigüedad: 13 años, 9 meses
Puntos: 5
Sonrisa Respuesta: Encriptar contraseña en bbdd

Cita:
Iniciado por maycolalvarez Ver Mensaje
MD5 y SHA son 2 algoritmos de HASH no reversibles, dependiendo de la seguridad / eficiencia se puede usar otro con más fuerza, debido a que MD5 por ejemplo es el más rápido pero no el más seguro

base64 sólo lo debes usar para el transporte de datos, porque NO requiere clave alguna, no aporta seguridad alguna, es una codificación diseñada para serializar datos y facilitar su almacenamiento y distribución, de modo que se conserve al máximo la integridad de los datos, no si son plagiados

mycrypt dependiendo del tipo de cifrado (sincrono/asincrono) si logra encriptar y asegurar datos con contraseña (o certificado), en el caso de web seguras, utilizar openSSL siempre utilizará un algoritmo asíncrono, o el que se adquiera con un certificado RSA security, además que sólo debe configurarse en el web server y es trasparente para php

muchas gracias por la explicacion soy novato en esto pero como personas como tu Aprendere grandes cosas grxias:arr iba:
  #11 (permalink)  
Antiguo 24/01/2012, 12:32
Avatar de cristian_cena
Colaborador
 
Fecha de Ingreso: junio-2009
Mensajes: 2.244
Antigüedad: 14 años, 9 meses
Puntos: 269
Respuesta: Encriptar contraseña en bbdd

gracias maycolalvarez por tu aporte.
Cita:
Iniciado por maycolalvarez Ver Mensaje
... dependiendo de la seguridad / eficiencia se puede usar otro con más fuerza ...
¿en que contexto en concreto usarías md5? ¿y en cual otro usarías sha?
yo usaría md5 para guardar el password del usuario.
Creo haber leído que un tipo de sha es más poderoso que md5, pero sabiendo que desencriptar un md5 alfanumerico con mayúsculas y minúsculas llevaría años le resté importancia.

Cita:
Iniciado por maycolalvarez Ver Mensaje
... además que sólo debe configurarse en el web server y es trasparente para php
Me gustaría si puedes extender un poco más la relación entre los certificados y mcrypt.
Pues no tengo mucha experiencia en backend, solo una vez me tocó trabajar sobre un sitio con certificado ssl. En donde era norma cifrar con mcrypt los datos de los usuarios. Y pues eso hice desde php. Si es oportuno y no nos vamos por las ramas comparto las funciones.

Saludos.
  #12 (permalink)  
Antiguo 24/01/2012, 12:43
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: Encriptar contraseña en bbdd

bueno, yo siempre he usado MD5 y no he tenido problemas, pero si trabajas en un banco ellos optan por alguno un poco más fuerte, con mayor capacidad de cifrado 128 bits o más, los cuales pueden ser más lentos que MD5, MD5 es bueno y hasta la fecha se han reportado pocos casos en que contenidos o claves diferentes generen el mismo hash

mycript y openSSL no tienen nada que ver , en tu proyecto puedes usar mycript donde quieras, pero no cubre la brecha entre el envío de datos desde el navegador al server que cubre openSSL.

openSSL entre otros sólo se configura en el servidor web, donde añades un certificado (generalmente de pago, pero puedes generar uno gratis) y entonces al navegar por tu sistema con https, el servidor inicia una negociación con el navegador para cifrar la trasferencia, donde le pasa el certificado (llave pública) y con algoritmos matemáticos el navegador cliente encripta el request con us clave privada que el server recibe y desencipta con su propia clave privada + la pública, lo que se conoce como algoritmo asíncrono, donde increíblemente hay 1 clave privada de cada lado y una pública.

como indique, openSSL se configura en el servidor (apache por ejemplo) y en PHP no hay que hacer prácticamente nada, básicamente redirigir hacia https cuando se requiera

el certificado también es vulnerable hasta cierto punto, por ello los bancos lo renuevan cada 6 meses, si usas uno generado (gratis) es igual de seguro, sólo que el navegador te advertirá que dicho certificado no está registrado
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #13 (permalink)  
Antiguo 24/01/2012, 14:21
Avatar de cristian_cena
Colaborador
 
Fecha de Ingreso: junio-2009
Mensajes: 2.244
Antigüedad: 14 años, 9 meses
Puntos: 269
Respuesta: Encriptar contraseña en bbdd

Ya veo. Por un momento dudé de que exista relacion entre el certificado y mcrypt , pero ahora veo que lo hacía bien, es decir, por un lado el certificado (sin relación con php) y por otro ciframos igualmente para que en caso de que alguien se haga con la DB le sea más dificultoso obtener los datos sensibles de nuestros usuarios.

gracias, bye
  #14 (permalink)  
Antiguo 25/01/2012, 09:30
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Encriptar contraseña en bbdd

Otra consulta más.

Antes de almacenar un valor que introduce el usuario debe pasar por una capa de control, para comprobar si cumple con la integridad deseada: cantidad de caracteres, eliminar o "slashear" caracteres especiales, numeros o letras, etc.

En lugar de que un valor pase por mil controles, no sería mejor que pase por menos controles, solo por: cantidad de carácteres, si es numerico y poco más, después codificarlo en base64 y guardarlo así en la bbdd? Después para mostrar datos se descodifica y ya está.
  #15 (permalink)  
Antiguo 25/01/2012, 10:35
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: Encriptar contraseña en bbdd

Cita:
Iniciado por cslbcn Ver Mensaje
Otra consulta más.

Antes de almacenar un valor que introduce el usuario debe pasar por una capa de control, para comprobar si cumple con la integridad deseada: cantidad de caracteres, eliminar o "slashear" caracteres especiales, numeros o letras, etc.

En lugar de que un valor pase por mil controles, no sería mejor que pase por menos controles, solo por: cantidad de carácteres, si es numerico y poco más, después codificarlo en base64 y guardarlo así en la bbdd? Después para mostrar datos se descodifica y ya está.
lo más básico es aplicar anti sql-inyection, lo que corresponde a usar addslashes o funciones similares, opcionalmente el tamaño de la cadena, y por ultimo el HASH, de por sí la codificación del HASH convertirá una cadena de cualquier longitud en una longitud fija, y con caracteres seguros, por lo que base64 no hace falta al usar un hash
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #16 (permalink)  
Antiguo 25/01/2012, 10:53
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Encriptar contraseña en bbdd

Me refería a guardar datos que no son la contraseña, datos que necesito después mostrar sin codificar, como por ejemplo el nombre del usuario.

Por ejemplo: un usuario escribe en el campo nombre Juan ('Merengue').
Yo quiero que el usuario pueda grabar ese nombre así. En lugar de hacer un control comprobando los caracteres, etc etc. No sería una buena opción almacenarlo como base64_encode(Juan ('Merengue')) ?
  #17 (permalink)  
Antiguo 25/01/2012, 12:49
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: Encriptar contraseña en bbdd

bueno, el problema es que necesitas decodificarlo para dumpearlo, lo que consume más memoria y proceso, no es la vía más optima, por lo que el aplicar anti sql-inyection conservaría el contenido original
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...

Etiquetas: bbdd, contraseña, encriptar, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:30.