Foros del Web » Programando para Internet » Javascript »

Encriptación XOR

Estas en el tema de Encriptación XOR en el foro de Javascript en Foros del Web. He creado un sistema de usuarios con PHP. Además he programado una función que encripta datos mediante el operador XOR en JavaScript, para que cuando ...
  #1 (permalink)  
Antiguo 09/01/2005, 07:47
Avatar de thunder-ion  
Fecha de Ingreso: diciembre-2004
Mensajes: 106
Antigüedad: 19 años, 4 meses
Puntos: 0
Encriptación XOR

He creado un sistema de usuarios con PHP.

Además he programado una función que encripta datos mediante el operador XOR en JavaScript, para que cuando un usuario inicie su sesión su contraseña viaje encriptada.

Cada usuario tiene una clave privada que se le asigna cuando se registra, para poder saber con que clave se codificó, cuando llega la información al servidor, este encripta la información encriptada en XOR, a MD5.

Mi problema es que cuando un usuario entra a la página, el sistema automáticamente le asigna una clave que crea aleatoriamente, y cuando el usuario inicia la sesión su contraseña se encripta con esta clave aleatoria, cuando llega al servidor, este lo desencripta, y con la cadena (que es la contraseña del usuario) el servidor lo vuelve a encriptar en XOR, pero esta vez con la clave privada del usuario y luego lo encripta en MD5 y compara ambas claves: la que hay en la base de datos, y la que ha introducido el usuario, si son iguales, le da acceso al sistema, pero si son distintas, se lo niega.

El problema es, que cuando el usuario inicia su sesión necesito mandar junta la contraseña encriptada, la clave de desencriptación, por lo que si alguien intercepta la comunicación podría desencriptar la contraseña del usuario fácilmente y todo se iría al traste.

¿Como puedo solucionar este agujero? ¿Existe una solución más eficaz (me abstengo a los certificados)?

GRACIAS A TODOS!! SE LO AGRADEZCO MUCHO !!

Saludoss
  #2 (permalink)  
Antiguo 09/01/2005, 12:15
 
Fecha de Ingreso: diciembre-2003
Mensajes: 54
Antigüedad: 20 años, 4 meses
Puntos: 0
Una forma...

En principio, una solución podria ser:
* Para no mandar la contraseña de forma que se pueda desencriptar (ni por el servidor ni por nadie) puedes hacer un hash md5 de la contraseña en js (hay scripts hechos)
* Luego, para que lo que se transmita al servidor no sea algo estatico, que se pueda falsificar, podrias mandar un valor aletorio (similar a lo que haces con la clave xor), concatenarlo con el md5 de la clave y luego hacer un nuevo md5.
* Del lado del servidor, tomarias el md5 de la clave que tienes en de la bdd, y harias lo mismo que para el punto anterior y luego compararias los resultados.

En resumen:

Al cliente le mandas un valor aleatorio, cuando este intenta logearse haces un md5 de la clave, al resultado le concatenas el valor aleatorio y vuelves a hacer md5.
En el servidor, obtienes el md5 de la clave guardada en la bdd, concatenas el valor que le mandaste al cliente, haces md5 y luego comparas el resultado con lo que te mando el cliente. Como aclaración, no tienes que utilizar del valor aleatorio que te manda el cliente(si es que lo envias en el formulario como un campo hidden), ya que puede ser falsificado, sino que debes guardar el valor en sesion o utilizar alguna otra medida para garantizar que el valor no fue alterado (ej:mandar otro valor al cliente que sea el mismo valor aleatorio pero encriptado con una clave privada)

Seguramente hay variantes a lo anterior, pero creo que esto te puede servir.

Saludos
  #3 (permalink)  
Antiguo 09/01/2005, 14:48
Avatar de thunder-ion  
Fecha de Ingreso: diciembre-2004
Mensajes: 106
Antigüedad: 19 años, 4 meses
Puntos: 0
Tu metodo me convence más, es más seguro y más sencillo.

El problema es que tengo que hechar mano del módulo MD5 JavaScript que ha creado otra persona, lo que entramos con en tema de las licencias etc....

Lo que en una de tus líneas me has dado una buena idea, y es de almancenar el valor ese aleatorio que decia yo, almacenarlo en alguna variable de sesion, de forma que solo se envie la clave encriptada.

Haré alguna modificaciones al script de PHP y JavaScript y creo que así funcionará.

No es tan seguro como tu proposición, porque siempre existe la posibilidad de que alguién descubra la clave de encriptación, pero si la hago bien dificil, scostará bastante de desencriptar.

MUCHAS GRACIAS!!!!! Me has hecho caer del burro !
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 12:46.