9 de noviembre de 2009

reCAPTCHA

Creo que la medida de seguridad que hoy voy a presentar a pesar de ser bien conocida -a la par que odidada en algunas ocasiones- añadirá un puntito adicional a su favor que otras soluciones parecidas no disponen: bajo coste y robustez. Hablábamos hace un par de entradas de “encuestas seguras”, su cada vez mayor presencia y relevancia en los medios de comunicación que pueden (y no es erróneo decirlo) engañar a la opinión pública. Pues bien, una aplicación práctica de reCAPTCHA es la protección contra ataques por repetición en las encuestas. Claro está a alguno le puede parecer exagerado para una encuesta, es solo un ejemplo, seguro que se os ocurren otras muchas aplicaciones.
Entrando en detalle, reCAPTCHA es un servicio que puede incrustarse de forma gratuita en cualquier aplicación web, incluye 2 palabras distintas que deben escribirse separadas, lo cual añade un puntito más de robustez. Además incluye compatibilidad para discapacitados permitiendo la emisión de CAPTCHAs en forma de sonido. Para instalarlo es necesario darse de alta en el sistema con el dominio que se vaya a utilizar, con esto se nos proporcionarán dos claves, una pública y una privada. Al incrustar el siguiente código javascript en nuestro frontal web:

Se hará una llamada a los servidores de recaptcha y se incrustará el desafío en el frontal, lo que vayamos a hacer con él ya es nuestra decisión. Ahora bien dependiendo del lenguaje de nuestra aplicación web deberemos acudir aquí para obtener los recursos que analicen y verifiquen el CAPTCHA, por ejemplo en ASP deberemos añadir una librería a nuestro proyecto que contiene una serie de llamadas para verificar el CAPTCHA, este proceso se realiza nuevamente contra servidores externos, para mayor claridad:

Es decir, en 1) el usuario carga la página web que tiene incrustado el CAPTCHA, en 2) el browser solicita a los servidores de reCAPTCHA el reto, esta petición la hace con la clave publica del servidor. Después en 3) el usuario soluciona el reto y esa solución es enviada al servidor de aplicaciones (o el frontal web dependiendo de la arquitectura), en 4) este servidor contacta con el API Server, aquí es cuando se utiliza la clave privada para verificar que efectivamente la petición no ha sido manipulada en su recorrido, el API server devuelve el resultado del desafio, esto lo recogerá el servidor de aplicaciones proporcionando una respuesta dependiendo de si se ha superado el desafió o no.


¿Sencillo? A mi me parece que sí, como detalle final añadir que el API Server detecta las IP de los clientes que solucionan “muchos” CAPTCHA en pocos minutos, evitando así que en caso de que el desafío se haya visto comprometido se realicen ataques por repetición bloqueando la IP origen temporalmente.


Bueno, bonito y barato, lo ideal para comenzar la semana :)

Salu2


PD: Entrada relacionada de Breaking CAPTCHAS.

3 comentarios:

Txalin dijo...

Ademas tiene otro servicio mas desconocido. La segunda palabra que aparece pertenece a una bbdd de palabras que no han podido ser interpretadas por los softwares de digitalizacion de libros, con lo que cuando metes un captcha contribuyes a digitalizar un libro :)

GigA ~~ dijo...

Siiii, leí que utilizaba palabras que los OCR eran incapaces de analizar. Luego las tachaban y les hacían mil diabluras, lo que no me paré a leer era que aprovechaban ese proceso para digitalizar libros, al parecer tienen ahora un proyecto con el New York Times:

reCAPTCHA improves the process of digitizing books by sending words that cannot be read by computers to the Web in the form of CAPTCHAs for humans to decipher. More specifically, each word that cannot be read correctly by OCR is placed on an image and used as a CAPTCHA. This is possible because most OCR programs alert you when a word cannot be read correctly.

But if a computer can't read such a CAPTCHA, how does the system know the correct answer to the puzzle? Here's how: Each new word that cannot be read correctly by OCR is given to a user in conjunction with another word for which the answer is already known. The user is then asked to read both words. If they solve the one for which the answer is known, the system assumes their answer is correct for the new one. The system then gives the new image to a number of other people to determine, with higher confidence, whether the original answer was correct.

Currently, we are helping to digitize old editions of the New York Times.

Una muy buena idea :D

David dijo...

Buscar sobre 'reCaptcha pennis' esta interesante.