Introducción

Las contraseñas han formado parte de nuestra vida desde el primer correo que creamos, hoy en día recordar nuestra primera contraseña tal vez sea un tema de vergüenza porque puede que no fuera lo más elaborado o simplemente era tan sosa y de pronto hasta cómica, el numero telefónico, nombre propio, o un apodo. Los correos y tantos sitios web han impulsado el uso de nuevas contraseñas seguras para ayudar al usuario, para que el ingreso sea único y exclusivo del dueño, algunos sitios nos recomiendan ciertas longitudes, símbolos y algunos hasta verifican que no haya digitado en la contraseña parte de la información de registro (fecha, edad, numero telefónico, documento) todas estas condiciones que son tediosas nos permiten proteger nuestro correo o logeo a páginas que acabamos de registrarnos. En este estudio analizamos datos tomados de múltiples fuentes sobre el uso de contraseñas que aunque sean solo números ó cosas más elaboradas como letras con números, el problema real que planteamos aquí es que todas estas contraseñas son parte de diccionarios que usan muchos atacantes y consta no de miles ni millones de palabras sino billones de palabras, usando letras de nuestro abecedario común y los números. Los ataques a contraseñas han sido uno de los crímenes más dañinos y que permiten que usuarios mal intencionados obtengan acceso a uno o más servicios si la víctima es descuidada y usa la misma contraseña insegura en todas partes, en la tabla de estos datos los tiempos mostrados en años pueden parecer poco probables de ser vulnerados, pero como dije anteriormente toda contraseña analizada aquí es parte de una compilación de diccionarios donde serán los primeros valores para comparar y vulnerar cuentas.

¿Que tan segura es mi contraseña?

Seguir las recomendaciones del sitio web no es algo para tomar a la ligera, pero si usted quisiera saber que tan segura es la palabra o combinación de caracteres que ha elegido debe hacer uso de ecuaciones que no son complejas, y conviene tener mayor número de caracteres y de elementos y así pueden generar resultados mejores, por ende, más seguros.

el valor es resultado de:

\(𝒌^{𝒏}\)

Donde K es el valor que puede tomar la “keyspace” este término se refiere al conjunto de posibles valores de un sistema criptográfico donde en el caso de ser solo letras del abecedario seria 26 o solo las vocales 5 o todos los números enteros seria 10, y si consideramos todos los símbolos especiales posibles seria 32 símbolos N se refiere al número de caracteres que tiene la contraseña.

Si el sitio web nos exige estas condiciones:

  • Al menos una mayúscula
  • Al menos un numero
  • Al menos 8 caracteres
  • Al menos un carácter especial de estos (#$%&/?+~)

Paso a paso:

Entonces tenemos para el primer paso al menos una mayúscula, tomando las 26 letras y cada una tiene su versión en mayúscula tenemos 52 posibles variaciones

Para el segundo solo serian 0-9 por ende 10 posibles variaciones

para el tercero, nos dicen cuántos caracteres y el ultimo solo 8 símbolos de esos, entonces procedemos a sumar:

\(k= 52+10+8 ==70\)

y ya reemplazando en nuestra ecuación tenemos:

\(70^ {8} = 576'480.100'000.000\)

Es lo mínimo que podemos crear siguiendo los requisitos que nos plantearon, pero esto no previene que con el suficiente tiempo el actor malicioso pueda ingresar. Estos modelos presentados fueron analizados por diversas empresas de seguridad y con los actuales sistemas computacionales, dentro de poco la computación cuántica va a desplazar las mejores contraseñas y posiblemente toque que recurrir a alternativas donde las contraseñas sean cosa del pasado.

La forma de los datos

Hoy en día las contraseñas que manejamos son de 6 dígitos en adelante, pero como vimos en la tabla anterior, algunas contraseñas de 6 dígitos no llegan ni a un nivel medio de seguridad. nuestra tabla de datos esta compuesta por 500 contraseñas, algunas son pequeñas variaciones de otras contraseñas contenidas aquí ej: password y passw0rd, y otras son variaciones que parecen ser más complejas, para mostrar algunas características de los datos fue necesario una variable adicional que es la longitud, con esta podemos ver que tanto aporta a la seguridad la cantidad de dígitos de la contraseña. Primero veamos como esta compuesto el conjunto de datos:

Como podemos ver, en esta tabla hay una gran presencia de contraseñas con 6 dígitos,luego las que tienen 7 y 8 , tenemos 1 sola contraseña con 9 dígitos pero como vayamos comparando los resultados notaremos que en este caso particular la cantidad de dígitos no ofrece una seguridad adicional.

La siguiente gráfica es una ayuda para poder apreciar las longitudes vs fortaleza con una organización de color dependiendo a que categoría de datos pertenezcan

##Fortaleza y sus influencias como lo vimos anteriormente en la tabla ademas de sus longitudes, la fortaleza de las mismas también es influenciada por los tipos de caracteres involucrados.

Tomemos una gráfica que relacione nuestras categorías de claves y que tanta fortaleza están reflejando.

Con esto podemos ver que son pocos los datos que son de la categoría alfanumérico simple que tienen una fortaleza decente, las categorías con mas texto podrían considerarse mas seguras y la pop/geek que encierra nombres formados por texto y números tiene varios elementos con mucha fortaleza.

por ultimo una gráfica que relaciona Las longitudes en función de la unidad de tiempo

Era de esperar que estuvieran tan estrechamente relacionadas, ya que al analizarse el keyspace que permite estimar el tiempo, también tenemos en cuenta la longitud, ademas de los tipos de dígitos(letras minúsculas, letras mayúsculas,números y/ó caracteres especiales) .

Algo que podemos notar es que al momento toda contraseña formada por un tipo de dígito(texto ó número) siempre esta de ultimo, en casi todos nuestros análisis.

Analisis de tiempos.

Como he mencionado anteriormente los datos aquí presentados son inseguros, ninguno sirve como una contraseña, basta con mirar la siguiente gráfica.

Aquí claramente se ve la reducción de tiempos entre los métodos, el segundo, el ataque OFFLINE es mucho mas eficiente que un ataque online, el cual consiste en tomar la clave totalmente cifrada del objetivo y llevarla a un equipo con las capacidades computacionales ideales y lejos de toda detección de parte de la victima, o su sistema de seguridad en el caso de una empresa, con el tiempo suficiente este podrá obtener acceso a la contraseña y por ende al sistema y logear como si fuera el administrador y/o propietario y poder realizar un ataque más grande o generar perdidas irreparables en la compañía.

Detallando la gráfica, podemos ver que la contraseña de más duración solo toma 29 segundos en ser vulnerada, eso es una reducción del 99,9999990026897% de tiempo al respecto al tiempo que demora con un ataque online, que ademas de ser lentos son detectables, y pueden contar con limitadores que dilaten aun más este tiempo, por ejemplo: solo 10 intentos por minuto o bloqueo al usuario después de cierta cantidad de intentos.

Calculos para variables cuantitativas

Nuestro conjunto de datos tiene una organización de tiempos que varían desde pocos segundos hasta varios años, para analizar el comportamiento de estos consideré que era apropiado ver como se comportaban los tiempos de ataques online en esas diferentes escalas, para análisis más generales como la correlación, usare tiempos estandarizados. Para calcular covarianza necesitamos dos variables: X y Y para multiplicar sus variaciones individuales y con ese valor dividir el resultado de cov()


Unidad de tiempo: tiempo.ataques.OFFLINE:

Cuartiles:

##        0%       25%       50%       75%      100% 
## 1.110e-07 3.210e-03 3.210e-03 8.350e-02 2.927e+01

Kurtosis:

## [1] 107.4077

Asimetria estadística:

## [1] 9.999244

Promedio:

## [1] 0.5000096

Mediana:

## [1] 0.00321

Moda:

## [1] 0.00321

Desviación:

## [1] 2.658132

Varianza:

## [1] 7.065665
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.


Unidad de tiempo: years(años)

Cuartiles:

##    0%   25%   50%   75%  100% 
##  2.56  6.91  6.91  6.91 92.27

Kurtosis:

## [1] 14.22774

Promedio:

## [1] 11.82831

Mediana:

## [1] 6.91

Moda:

## [1] 6.91

Desviación:

## [1] 20.79197

Varianza:

## [1] 432.3062

Valor de correlación de tiempo(year)

## [1] 0.9999914

correlación de tiempo(Year)


Unidad de tiempo: month(meses)

Cuartiles:

##   0%  25%  50%  75% 100% 
## 3.19 3.19 3.19 3.19 3.19

Kurtosis:

## [1] NaN

Promedio:

## [1] 3.19

Mediana:

## [1] 3.19

Moda:

## [1] 3.19

Desviación:

## [1] 0

Varianza:

## [1] 0

Unidad de tiempo: weeks(semanas)

Cuartiles:

##   0%  25%  50%  75% 100% 
## 1.84 3.70 3.70 3.70 3.70

Kurtosis:

## [1] 3.25

Promedio:

## [1] 3.328

Mediana:

## [1] 3.7

Moda:

## [1] 3.7

Desviación:

## [1] 0.8318173

Varianza:

## [1] 0.69192

Valor de correlación de tiempo(week)

## [1] 1

correlación de tiempo(week)


Unidad de tiempo: days(dias)

Cuartiles:

##   0%  25%  50%  75% 100% 
## 1.29 3.72 3.72 3.72 3.72

Kurtosis:

## [1] 45.62146

Promedio:

## [1] 3.66895

Mediana:

## [1] 3.72

Moda:

## [1] 3.72

Desviación:

## [1] 0.349226

Varianza:

## [1] 0.1219588

Valor de correlación de tiempo(days)

## [1] 1

correlación de tiempo(days)


Unidad de tiempo: hours(horas)

Cuartiles:

##    0%   25%   50%   75%  100% 
##  3.09  3.43  3.43  3.43 17.28

Kurtosis:

## [1] 40.88407

Asimetria estadística:

## [1] 6.090386

Promedio:

## [1] 3.728372

Mediana:

## [1] 3.43

Moda:

## [1] 3.43

Desviación:

## [1] 2.11762

Varianza:

## [1] 4.484314

Valor de correlación de tiempo(hours)

## [1] 0.9999966

correlación de tiempo(hours)


Unidad de tiempo: minutes(minutos)

Cuartiles:

##    0%   25%   50%   75%  100% 
##  1.85  7.92  7.92 18.52 18.52

Kurtosis:

## [1] 1.583625

Promedio:

## [1] 11.42314

Mediana:

## [1] 7.92

Moda:

## [1] 7.92

Desviación:

## [1] 5.422729

Varianza:

## [1] 29.40599

Valor de correlación de tiempo(hours)

## [1] 1

correlación de tiempo(minutes)


Unidad de tiempo: seconds(segundos)

Cuartiles:

##    0%   25%   50%   75%  100% 
## 11.11 11.11 11.11 11.11 11.11

Kurtosis:

## [1] NaN

Promedio:

## [1] 11.11

Mediana:

## [1] 11.11

Moda:

## [1] 11.11

Desviación:

## [1] 0

Varianza:

## [1] 0

Intervalos de confianza

Análisis exploratorio de los datos:

## Size (n)  Missing  Minimum   1st Qu     Mean   Median   TrMean   3rd Qu 
##  500.000    0.000    0.000    6.000    7.432    7.000    6.898    8.000 
##      Max    Stdev      Var  SE Mean   I.Q.R.    Range Kurtosis Skewness 
##   48.000    5.416   29.328    0.242    2.000   48.000   25.474    4.429 
## SW p-val 
##    0.000

Intervalo de confianza para fortaleza:

##                2.5 %   97.5 %
## (Intercept) 6.956162 7.907838

Análisis exploratorio de los datos:

## Size (n)  Missing  Minimum   1st Qu     Mean   Median   TrMean   3rd Qu 
##  500.000    0.000    0.000    0.003    0.500    0.003    0.196    0.084 
##      Max    Stdev      Var  SE Mean   I.Q.R.    Range Kurtosis Skewness 
##   29.270    2.658    7.066    0.119    0.081   29.270  103.978    9.969 
## SW p-val 
##    0.000

Intervalo de confianza para tiempo_hackeo.offline.:

##                 2.5 %    97.5 %
## (Intercept) 0.2664519 0.7335674

Conclusiones.

Con los datos aqui mostrados podemos ver la reduccion de tiempos para vulnerar contraseññas que son parecidas a algunas que hemos usado, los elementos que caracterizan y que elementos son claves en la seguridad de estos, usar contraseñas esta siendo una herramienta vulnerable por si sola, hoy en dia se usa mucho el sistema 2FA que implica que haya una comprobacion por correo para poder acceder a un servicio, o dejarle la cotraseña a un adminsitrador de contraseñas en un dispositivo de confianza, estos cambios han surgido porque no importa que tan larga sea la contraseña si el atacante tiene una idea del esquema de seguridad este podra “tumbar” la seguridad de esta.

Hoy en dia contamos con sistemas de lenguaje masivo y otras herramientas que hace que el generar texto sea mucho mas facil, sumemosle que estamos a punto de ver equipos cuanticos, veremos todas estas herramientas de seguridad de nuestra actualidad, delegadas a un segundo plano, un computador capaz de almacenar un servidor puede generar billones de combinaciones en pocos segundos, y un atacante con un equipo capaz de esto y la suficiente motivacion puede vulnerar su objetivo sin alguna deteccion. los atacantes usan los ataques online para algunos casos, pero la informacion que mas les ayuda se encuentra en redes o sitios webs relacionados con la victima, por cosas como estas se recomienda no usar contraseñas usando informacion que esta a una “busqueda de google de distancia”

Para la actualidad lo mejor es usar la mejor contraseña que podamos respaldar con un 2FA o con otro sistema seguro para que nuestra identidad o nuestro dinero no quede a merced de malintencionados, actualizar dispositivos y buscar un sistema de seguridad que permita tener seguridad adicional (software, sistema operativo, hardware).

Recomendaciones para mejora futuras

Enlaces consultados