10
Mar
2012

Diseño de un mecanismo de autenticación – Parte I

En esta serie de artículos quiero presentar un mecanismo de autenticación web sencillo, de la familia challenge-response, que diseñe para el sitio Live! -la idea no es original obviamente-.

Lo más típico en la autenticación web es que el sitio pregunte al usuario por la contraseña. El usuario la ingresa y en el servidor se calcula su digest. Este digest se compara contra el digest guardado en la base de datos y si son iguales, la autenticación es válida.

Este mecanismo es sencillo y no almacena la contraseña en el servidor. Pero puede ser peligroso: la contraseña viaja desde el cliente al servidor en texto plano. Cualquiera que pueda interceptar uno de estos paquetes (a nivel de Internet o de la red interna), podría visualizarla. ¿Puede ser útil este tipo de autenticación? Sí, si se utiliza el protocolo HTTPs (SSL) en la comunicación cliente-servidor.

Supongamos que, habiendo evaluado el impacto y riesgo, llegamos a la conclusión de que HTTPs no es una opción. Lo que debemos hacer es implementar un mecanismo de autenticación que reduzca a un atacante sus posibilidades de éxito. Por ejemplo, que aún sniffeando y registrando todos los paquetes de una conexión, no pueda autenticarse.

autenticacion web segura


Leer el resto del artículo »

21
Mar
2011

Funciones virtuales en C++

En la clase pasada de Análisis Numérico, Alejandro mencionó la posibilidad de utilizar funciones virtuales en las clases “padre” definidas en el lenguaje C++.

¿Qué son las funciones virtuales?

Son funciones que pueden ser reimplementadas en las subclases, comportamiento que por defecto no se permite. Si la función es puramente virtual, no existe una implementación en la clase padre sino que se debe especificar en alguna subclase. Es una forma de definir interfaces.

Veamos el siguiente ejemplo tomado del libro C++ GUI Programming with Qt 4 (segunda edición):

#ifndef SHAPE_H
#define SHAPE_H
#include "point2d.h"
class Shape
{
public:
      Shape(Point2D center) { myCenter = center; }
      virtual void draw() = 0;
protected:
      Point2D myCenter;
};
#endif

Allí se puede visualizar que la función draw es virtual. También, podemos ver que es puramente virtual por la definición draw() = 0. ¡Que sintáxis horrible!


Leer el resto del artículo »