Suposiciones que debemos hacer:
* Conjunto de caracteres: El factor más crucial es qué caracteres están permitidos en la contraseña. Consideraremos algunos escenarios comunes:
* Solo letras minúsculas (A-Z): 26 posibles personajes.
* letras minúsculas y mayúsculas (A-Z, A-Z): 52 personajes posibles.
* letras y números (A-Z, A-Z, 0-9): 62 posibles personajes.
* letras, números y símbolos (A-Z, A-Z, 0-9 y ~!@#$%^&* () _+=-`): Esto puede variar según los símbolos específicos permitidos, pero supongamos alrededor de 95 caracteres.
* Ataque de fuerza bruta: Asumimos que la computadora intenta todas las combinaciones posibles en secuencia. Este es el ataque más básico.
* Velocidad de descifrado de contraseña: La velocidad a la que una computadora puede probar las contraseñas varía mucho según el hardware (CPU, GPU), el software de agrietamiento utilizado y el algoritmo utilizado para hash la contraseña. Estimaremos un rango de velocidades. Consideremos las operaciones por segundo:
* lento: 1,000 contraseñas/segundo (un sistema muy antiguo o débil)
* Moderado: 1,000,000 de contraseñas/segundo (una CPU moderna decente)
* rápido: 10,000,000,000 de contraseñas/segundo (una potente configuración de GPU)
Cálculos
1. Combinaciones totales posibles:
El número de contraseñas posibles se calcula como:
`Tamaño del conjunto de personajes ^ Longitud de la contraseña`
Entonces:
* Minúsculas (26):26
* Letras (52):52
* Letras y números (62):62
* Letras, números y símbolos (95):95
2. Tiempo promedio para romper:
En un ataque de fuerza bruta, la computadora, en promedio, encontrará la contraseña correcta a la mitad de la lista de posibilidades. Entonces, dividimos el número total de combinaciones por 2, y luego nos dividimos por la velocidad de agrietamiento.
`Tiempo promedio =(combinaciones totales / 2) / Velocidad de agrietamiento`
Resultados (en segundos):
| Conjunto de personajes | Combinaciones totales | Lento (1,000/seg) | Moderado (1,000,000/seg) | Rápido (10,000,000,000/seg) |
| ----------------------- | -------------------- | -------------------- | ----------------------- | -------------------------- |
| Minúsculas (26) | 456,976 | 228 segundos | 0.228 seg | 0.0000228 seg |
| Letras (52) | 7,311,616 | 3656 seg | 3.65 segundos | 0.000365 segundos |
| Letras y números (62) | 14,776,336 | 7388 seg | 7.38 segundos | 0.000738 seg |
| Letras, etc. (95) | 81,450,625 | 40725 segundos | 40.72 seg | 0.00407 seg |
Convertir a unidades más comprensibles
* Segundos / 60 =minutos
* Minutos / 60 =horas
* Horas / 24 =días
| Conjunto de personajes | Lento (1,000/seg) | Moderado (1,000,000/seg) |
| ----------------------- | -------------------- | ----------------------- |
| Minúsculas (26) | 3.8 minutos | 0.228 milisegundos |
| Letras (52) | 1.01 horas | 3.65 microsegundos |
| Letras y números (62) | 2.05 horas | 7.38 microsegundos |
| Letras, etc. (95) | 11.3 horas | 40.72 microsegundos |
Consideraciones importantes:
* Algoritmos de hash: El tipo de algoritmo de hash utilizado para almacenar la contraseña afecta significativamente el tiempo de descifrado. Los algoritmos de salmuera y de hash fuertes como Bcrypt, Argon2 o Scrypt hacen que agrietarse mucho más difícil, incluso con un hardware potente. Los cálculos anteriores suponen que el atacante puede probar directamente las contraseñas. Si la contraseña está bien calificada, deben realizar el cálculo del hash para cada suposición, lo que ralentiza drásticamente las cosas.
* ataques de diccionario: En lugar de forzar al bruto, los atacantes a menudo intentan palabras, nombres y patrones comunes primero. Esto puede ser mucho más rápido.
* Tablas de arcoiris: Las tablas de hashes precomputadas pueden acelerar el agrietamiento, especialmente para los algoritmos de hashing más débiles.
* Limitando la velocidad: Muchos sistemas implementan la limitación de tasas, lo que restringe el número de intentos de contraseña permitidos en un período de tiempo determinado. Esto efectivamente ralentiza los ataques de fuerza bruta.
En conclusión:
Una contraseña de 4 caracteres se puede descifrar muy rápidamente con hardware moderno, especialmente si usa un conjunto de caracteres pequeños (solo como letras en minúsculas) y/o si el hash de contraseña es débil. Una contraseña con un conjunto de caracteres más grande (incluidos números y símbolos) llevará más tiempo, pero aún puede ser vulnerable. Esta es la razón por la cual las recomendaciones modernas de contraseña son para contraseñas mucho más largas y el uso de algoritmos de hashing fuertes y bien salados.