Hoy mientras estaba en clase medio grogi (probablemente por los efectos de algo de fiebre) ha llegado a mis oídos algo interesante: CHAP.
El protocolo de autentificación CHAP (o protocolo de autentificación por desafío) sirve para auntentificarse frente a un servidor, isp, … La principal ventaja frente al modelo tradicional (envío de nombre de usuario como texto en plano ) es que no necesita enviar la contraseña del usuario para realizar la autentificación.

Este protocolo no es para nada nuevo, es usado en PPP desde principio de los 90, funciona de la siguiente forma:
- Tanto el servidor como el cliente conocen la contraseña.
- El cliente envía una petición al servidor, donde incluye el nombre de usuario.
- El servidor recibe el nombre de usuario, genera una cadena aleatoria de caracteres, la envía al cliente, almacena temporalmente el nombre de usuario, codifica la cadena usando algún algoritmo de cifrado (como md5 o sha1), la almacena temporalmente y permanece a la espera de respuesta por parte del cliente.
- El cliente recibe la cadena aleatoria y la codifica usando el mismo algoritmo de cifrado empleado por el servidor (las cadenas obtenidas en el servidor deben ser idénticas) y la envía al servidor.
- El servidor recibe la petición del cliente, compara la cadena que le envía con la que tenía almacenada de antes, sin son iguales se concede permiso al usuario (usuario autentificado), en caso contrario vuelve a generar una cadena aleatoria y enviarla al cliente, repitiendo el proceso.
- En caso de que el servidor no reciba respuesta del cliente, vuelve a generar una cadena aleatoria y enviarla al cliente repitiendo el proceso.
El protocolo es bastante sencillo y como veis no requiere que se envíe la contraseña en ningún momento.
Aunque obviamente es más seguro que enviar la contraseña en plano, tampoco es perfecto. Si alguien consigue la cadena aleatoria que envía el servidor al cliente (mediante snffing por ejemplo), conoce el algoritmo de cifrado empleado y el nombre de usuario no necesitará la contraseña para autentificarse.
Solo tiene que codificar la cadena usando el algoritmo y enviarla al servidor obteniendo acceso. Tendrá que repetir el proceso cada vez quiera autentificarse ya que las cadenas son aleatorias.
Una aplicación interesante podría ser su uso en páginas web para autentificar usuarios. A no ser que se emplee https el nombre de usuario y contraseña viajaran como texto en plano por la red de redes.
Hasta ahora implementar CHAP en html y javascript era algo pesado, pero actualmente u gracias a Ajax podría implementarse de manea totalmente transparente al usuario.
La programación Ajax está aún fuera de mi alcance, pero si alguien quire ya sabe por donde empezar ;)







