Feeds:
Entradas
Comentarios

Posts Tagged ‘funciones hash’

La mejor contraseña es aquella más larga

Este mito, sorprendentemente extendido, no es completamente falso, sino que se trata de una verdad a medias. Por supuesto, conviene dejar claro desde un principio que «mejor«, para el contexto que nos ocupa, quiere decir «más segura«; pues podríamos definir otras métricas para establecer la calidad: más fácil de recordar, más graciosa

Por supuesto, es obvio que la mejor contraseña, desde el punto de vista de la seguridad, es aquella que resulta más complicada de romper, violar, obtener de forma fraudulenta, etc. Lo cual nos lleva a otra cuestión: ¿cómo se rompen las contraseñas?

Como caso general, podemos decir que mediante los denominados ataques de fuerza bruta. Cuando éstos se realizan sobre el conjunto de todas las posibles contraseñas, se denominan simplemente ataques de fuerza bruta. Cuando, por contra, se realizan sobre un conjunto definido de pruebas, se denominan ataques mediante diccionario. Así, podemos decir que un ataque mediante diccionario es un caso particular de un ataque de fuerza bruta. A su vez, existen casos particulares de ataques mediante diccionario, cuando la generación del diccionario de ataque se lleva a cabo mediante técnicas concretas, como los generadores de Markov, o la utilización de máscaras o expresiones regulares de generación.

También existen otros casos particulares de los ataques de fuerza bruta, pero diferentes de los ataques mediante diccionario. Un ejemplo sería la utilización de tablas hash precalculadas, como por ejemplo las famosas tablas Rainbow.

Sea como fuere, al final, el ataque suele consistir en probar todas las posibilidades de un conjunto dado, que normalmente es generado mediante algún algoritmo. Además, el ataque puede ir dirigido contra un servicio de autenticación (como comenté hace poco), o contra el almacén de contraseñas, entre otros. El ataque a servicios de red suele conllevar ciertas circunstancias no deseables: es más lento, es muy ruidoso (y, por tanto, fácilmente detectable), y deja muchas huellas. Por otra parte, atacar al almacén de contraseñas (en el caso de que éste sea ininteligible, que debería serlo) requiere el cálculo constante de valores hash para las pruebas.

En cualquier caso, podemos definir dos características que hacen a una contraseña fuerte.

En primer lugar, la contraseña debe ser «no obvia«; esto es, que no pueda encontrarse en un diccionario. Esto incluye diccionarios genéricos, así como diccionarios que pudieran generarse ad-hoc para un determinado caso (por ejemplo, palabras significativas para un determinado individuo, encontradas en los documentos de su disco duro, etc.). Siendo más formales, la contraseña debe contener la mínima información (máxima entropía) posible, o lo que es lo mismo, ser aleatoria (o al menos parecerlo). Esto dificulta también el uso de ataques con generadores de Markov, al no existir un modelo de Markov subyacente en la información aleatoria.

En segundo lugar, la contraseña debe ser «compleja«; esto es, que sea larga (aquí se encuentra la verdad parcial de nuestro mito) y que su alfabeto de generación sea lo más amplio posible. El número de posibles combinaciones de contraseñas, para una longitud y un alfabeto dados, se puede expresar como A^L, siendo A el número de elementos del alfabeto y L la longitud. Así, y para una misma longitud, tenemos que cuanto mayor sea el alfabeto, más combinaciones existirán, y por tanto más compleja será la contraseña.

Es más, se da la circunstancia de que, en ocasiones, un alfabeto más amplio y una longitud menor generan un mayor número de combinaciones. Por ejemplo, las posibles contraseñas en mayúsculas y minúsculas de 5 caracteres son 52^5; mientras que las posibles contraseñas numéricas de 8 caracteres son 10^8. Dado que 52^5 es aproximadamente 380 millones, mientras que 10^8 es exactamente 100 millones, vemos que una contraseña de 5 caracteres con mayúsculas y minúsculas es aproximadamente cuatro veces más compleja que una de 8 caracteres numéricos.

Resumiendo, la seguridad de una contraseña depende principalmente de tres factores:

  • La entropía de la misma, que debería ser máxima. Idealmente, generada de forma aleatoria.
  • La complejidad de la misma, que a su vez depende de…
    • La longitud de la misma, que debería ser lo mayor posible.
    • El alfabeto de generación de la misma, que debería ser lo más complejo posible.

Por supuesto, esto se refiere exclusivamente a las contraseñas en sí mismas. En la seguridad de cualquier sistema intervienen muchos otros elementos potencialmente atacables: claves de cifrado, vulnerabilidades, ingeniería social… así que tampoco conviene confiar ciegamente en una buena contraseña.

Como siempre, espero que os haya resultado interesante.

Read Full Post »