Consejos para generar claves seguras

Estamos acostumbrados a oir en los medios, que para que una clave sea segura, es necesario que contenga letras mayúsculas, letras minúsculas, números, y caracteres espececiales.

Pero ¿Qué hay de verdad en esto? ¿Es en verdad necesario complicarnos tanto la vida para generar claves seguras? ¿Es segura una clave solo por tener esas características?

Este post está dedicado al tema de la seguridad en claves. Si te interesa el tema, sigue leyendo.

Observa estas dos claves: eG2xoCh2 y gierohthuvah. Las dos son claves generadas de forma aleatoria y, en principio, no contienen palabras que podamos encontrar en un diccionario, ni fechas, ni secuencias del estilo abc, 123. Pero una tiene 8 caracteres y utiliza mayúsculas, minúsculas y números; Y la otra tiene 12 carácteres y solo usa letras minúsculas.

¿Qué claves crees que sería mas segura de las dos?

Para responder a esta pregunta, habrá que buscar alguna forma para evaluar la seguridad de una clave.

Uno forma de medir la seguridad de una clave, es analizando su fortaleza ante un ataque de fuerza bruta. Para medir dicha fortaleza es necesario calcular cuantas claves diferentes se pueden generar que tenga las mismas cualidades que la clave a analizar. Para ello yo yo os propongo la siguiente fórmula.

N=jlN=j^{l}

Dónde:

  • NN es el número de claves diferentes que se pueden generar
  • jj es la longitud del juego de caracteres
  • Y ll es la longitud de la clave, osea el número de caracteres utilizados.

Por ejemplo, para un PIN de cuatro dígitos, los valores serían los siguientes:

  • j=10j=10, ya que el juego de caracteres sería {0,1,2,3,4,5,6,7,8,9}\{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 \}
  • l=4l=4, ya que el pin es solo de cuatro dígitos

Por tanto:

N=jl=104=10000N=j^{l}=10^4=10000

Osea solo existen 10000 combinaciones posibles.

Por otro lado, para una contraseña del estilo de ahhiebie, donde hemos usado solo 8 letras minúsculas (asumiremos que solo usamos las 26 letras del alfabeto inglés) el cálculo de NN sería el siguiente:

N=268=208827064576N=26^{8}=208827064576

Como era de esperar, una clave de ocho letras minúsculas es bastante mas segura que una de cuatro digitos, ya que el número de claves que se pueden generar con ocho letras minúsculas es mucho mayo que el que se puede generar con cuatro digitos.

Para no tener que trabajar con números tan grandes, podemos utilizar en lugar del valor de NN, el logarítmo en base dos (log2log_2) del valor de NN. Llamaremos por comodidad BB a dicho valor, siendo la forma de calcularlo la siguiente:

B=log2(N)=log2(jl)B=\log_2(N)=\log_2(j^{l})

Volviendo a los dos ejemplos de antes:

Para un PIN de cuatro digitos

B=log2(1000)12.29B=\log_2(1000) \approx 12.29.

Y para una clave de ocho letras minúsculas

B=log2(208827064576)37.60B=\log_2(208827064576) \approx 37.60

Y tal como era de esperar, dado que 12.29<37.6012.29 < 37.60 el segundo sistema es mas seguro que el primero.

Este número ( BB ), a parte de ser mas manejable, coincidirá de forma aproximada con la longitud de una clave binaria equivalente.

Lo que quiere decir, que un PIN de cuatro digitos y una clave de ocho letras minúsculas equivaldría, de forma aproximada, a una clave binaria de 12bits y 37 bits, respectivamente.

Ahora volviendo a la pregunta inicial ¿Cuantas combinaciones posibles habrían para claves del estilo eG2xoCh2 y del estilo de gierohthuvah?

Pues para eG2xoCh2, los valores serían los siguietes:

  • j=26+26+10=62j=26+26+10=62 por que combina 26 letras mayúsculas y 26 minúsculas y 10 dígitos.
  • l=8l=8, por que mantenemos la longitud de la clave a ocho caracteres.

Por tanto:

B=log2(N)=log2(628)47.63B=\log_2(N)=\log_2(62^{8}) \approx 47.63.

Y para para gierohthuvah, los valores serían los siguientes:

  • j=26j=26
  • l=12l=12

Entonces:

B=log2(N)=log2(2612)56.41B=\log_2(N)=\log_2(26^{12}) \approx 56.41

Se podría entonces decir que que 47.63<56.4147.63<56.41, una clave del estilo gierohthuvah, es varios ordenes de magnitud mas segura que una clave del estilo de eG2xoCh2

Desde mi punto de vista una clave de doce caracteres en mínusculas como gierohthuvah no solo es mas segura que una de ocho con minúsculas, mayúsculas, y números; Si no que es mas manejable, fácil de recordar, de teclear, y de, en caso necesario, comunicar de forma verbal

En la siguiente tabla podéis ver los diferente valor de BB para determinadas combinaciones de logitud de clave y tamaño de juego de caracteres usado:

Comparación de seguridad de claves

(Podéis, si queréis, descargaros el fichero de Libreoffice Calc con el que he hecho la tabla )

Cómo podéis ver, la seguridad aumenta mas rapido cuando aumentamos la longitud de la clave, que cuando aumentamos el número de caracteres usados. Sin ir mas lejos, es mas seguro utilizar un clave de 11 letras minúsculas ( \approx clave 51 bits), que una de ocho caracteres que utilice mayúsculas, minúsculas, numeros, y diez caracteres especiales ( \approx clave de 49 bits )

Se podría decir que la seguridad de una clave, aumenta de forma exponencial según aumentamos la longitud de la misma. No obstante, solo aumenta de forma polinómica con cada nuevo caracter que añadamos al juego de caracteres usado.