Almacenar contraseñas de forma segura (o casi)

etiquetas: programación, php, seguridad, criptografía

Hace muy poco empecé a trabajar en un par de proyectos que utilizarán criptografía para garantizar la privacidad de los usuarios. De entre todo lo que esos proyectos van a implicar en cuanto a seguridad, hoy quiero hablar de las funciones hash y de su relación con las contraseñas.

1. Funciones hash

1.1. ¿Qué son?

También conocidas como «resúmenes criptográficos», funcionan tomando un conjunto variable de datos, y después de aplicar una serie de transformaciones sobre ellos, devuelven una cadena de longitud determinada, a la que podríamos llamar huella. Para que sean útiles en el campo de la criptografía, uno de sus requisitos es que debe ser computacionalmente imposible encontrar dos conjuntos de datos con el mismo hash: esto se llama resistencia a colisiones.

MD5("cadena uno") => ae9be994423206ae723bf717b6c32f96
MD5("cadena dos") => e2b8d5adcd7b0ace8a931972febd6909
El algoritmo MD5 es una de las muchas funciones hash que existen.

Se utilizan para comprobar la integridad de los datos transmitidos por cualquier medio, y también como parte fundamental en algoritmos HMAC.

Seguir leyendo...

Empezando con Rust

etiquetas: programación, rust

Debo reconocer que me aburre el enfoque habitual con el que se intenta enseñar un lenguaje de programación. Comprendo que de alguna forma hay que presentar sus elementos y características, pero cuando uno está familiarizado con el paradigma que utiliza, es tedioso enfrentarse a explicaciones interminables de conceptos ya conocidos. Y no me entendáis mal, no es que descarte por completo ese modo de enseñar: es solo que no presto la misma atención que cuando estaba comenzando.

fn main() {
    println!("Hello, World!");
}
Siguiendo la tradición.

Igual que no aprendí a conducir viendo cómo lo hacían los demás, a programar tampoco lo hice así. Y aunque evidentemente el código de otras personas me ayudó mucho al principio, fue desarrollar mis propios proyectos lo que me puso en la buena dirección.

«Neo, tarde o temprano entenderás igual que yo, que existe diferencia entre conocer el camino y andar el camino.»

The Matrix, 1999

Por eso, cuando quiero aprender un nuevo lenguaje, lo que hago es plantear algún problema y escribir un programa que lo solucione. Es una vez finalizado cuando estudio con calma la documentación, y todas aquellas características que no tuve necesidad de utilizar. Sin pretender abarcarlo todo, consigo familiarizarme con los aspectos más básicos al tiempo que evalúo su facilidad de uso.

Seguir leyendo...