Ver Mensaje Individual
  #6  
Antiguo 09-01-2009
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.114
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Vamos a ver si podemos entendernos. Si de lo que se trata es de que nadie pueda interceptar los datos que un cliente envía a un servidor, efectivamente, se ha de utilizar un protocolo como HTTPS, en lugar de HTTP. Ahora bien, eso que dices de que la aplicación ha de guardar en el servidor una clave cifrada, y recibir una clave cifrada del cliente, que en el servidor se descifran y se comparan ambas claves... eso no es lo normal, lo que yo conozco, lo que puede verse en decenas de aplicaciones.

Lo normal es que una aplicación (en el servidor) no guarde la contraseña cifrada, ni por supuesto "en claro", sino que lo que guarda es un "hash", una "firma" de la contraseña del usuario, que será única para la misma contraseña. De este modo, en el servidor no se conoce, en realidad, la contraseña del usuario: nadie puede conocerla, de hecho, porque no se usa ningún algoritmo de cifrado y descifrado, sino que se usa un algoritmo de "hashing", que retornará una cadena única partiendo de una cadena que sólo el usuario conoce.

¿Nunca te ha pasado que has perdido la contraseña de usuario de un sitio web y el sitio web te ha tenido que mandar una nueva contraseña? Te mandan una nueva contraseña, porque tu contraseña no la conoces sino tú: nadie más la conoce, ni el servidor, ni el cliente, ni nadie. Así que son cosas distintas. Efectivamente, es posible (pero tal vez no probable) que alguien "espíe" una comunicación entre un cliente y un servidor, pero, para evitar esto se puede usar un protocolo como "HTTPS", donde se cifra toda la conexión, no sólo unos determinados datos que viajen en ella.

Pero el mecanismo de autenticación es el mismo. Insisto, no se trata de cifrar y descifrar una contraseña. Se trata de que nadie más que el usuario conoce la contraseña. Tú "juegas" en el servidor con un "hash" de esa contraseña, que ha de coincidir con el "hash" que previamente guardaste. No puedes descifrar nada. No conoces la contraseña, y, si alguien "entrara" en el servidor y accediera a la base de datos, lo único que encontraría serían un puñado de "hash", a partir de los cuales no es posible, al menos en teoría, descubrir la contraseña que hay detrás.

Ahora piensa esto: si existe un mecanismo de cifrado y descifrado, alguien podrá siempre descifrar cierta información, si averigua qué mecanismo de cifrado se utilizó, empero, nadie puede descifrar un "hash": por tanto se evita el cifrado y descifrado, y es el usuario quien únicamente conoce su contraseña. Si se le "pierde", tal como he dicho ya, hay que crear una nueva, por decirlo así, puesto que ni siquiera tú conocerás las contraseñas de tus usuarios. Ahora bien, ¿no te parece esto una mejor solución? Yo creo que sí, pero, es que además es el "sistema" que se utiliza en estos casos.

PD. Ya digo, siempre que estemos hablando de lo mismo, que todavía no me queda muy claro.

PD. Parece claro que el protocolo HTTPS debería usarse cuando se intercambia información "sensible", empero, o me equivoco, o no resulta trivial apoderarse de datos a través de HTTP, así sin más. ¿Por qué digo esto? Bueno, porque el protocolo HTTPS lo utilizan determinados sitios web, pero, estarás conmigo en que otros muchísimos sitios no lo usan. Sin ir más lejos, estos foros no usan el protocolo HTTPS, sino que usan HTTP (y precisamente un sistema similar al que he descrito) para autenticar usuarios. Ahora bien, ¿hay alguien ahí interceptando lo que estoy enviando al ClubDelphi cuando me autentifico? ¿Es posible? Tal vez, pero, según parece, no es tan probable ni tan sencillo.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 09-01-2009 a las 03:01:45.
Responder Con Cita