John the Ripper trabaja probando posibles contraseñas, muy rápidamente. No siempre romperá una cripta basada en DES, o al menos no fácilmente.
Con la función de hashing basada en DES, las contraseñas pueden tener hasta 8 caracteres, y solo se usan 7 bits para cada carácter (el bit superior se ignora). Teniendo en cuenta que un usuario puede escribir la contraseña en algún momento en un teclado, se puede suponer que hay 95 valores posibles para cada carácter (caracteres ASCII del espacio [32] a tilde [127]), por lo tanto 6704780954517121 contraseñas potenciales (eso es 1 + 95 + 95 2 + 95 3 + ... + 95 8 ). Es bastante; Enumerar todas las posibilidades en una PC llevará al menos unas pocas semanas. Pero todavía es tecnológicamente viable.
DES es una función de cifrado, pero la cripta basada en DES es no DES; la función interna se altera (por la sal, a saber), se ejecuta 25 veces y, lo que es más importante, se intercambian los roles de la clave y el mensaje. El resultado final es que el nombre "crypt" es incorrecto (aunque tradicional): ya no es una función de cifrado ; debería llamarse "hash basado en DES ". Lo que esto significa es que podría haber (y de hecho hay) dos contraseñas distintas que tienen el mismo valor (incluso si usan el mismo valor sal). Por ejemplo, esta publicación de blog muestra que con la sal " hi
", ambos " cqjmide
" y " ifpqgio
" tienen el mismo valor " hiH9IOyyrrl4k
" (la publicación del blog afirma que esta es la primera colisión de este tipo que se conoce públicamente, lo que muestra cuán interesante es el problema, ya que no es difícil: estos son valores de 64 bits, por lo que el costo de encontrar una colisión es aproximadamente 2 32 invocaciones de crypt()
; que la primera colisión publicada apareció solo a fines de 2010, solo prueba que nadie lo intentó antes. .
(Nota: al contrario de lo que dice la publicación del blog, la posibilidad de encontrar colisiones no tiene ninguna influencia en la seguridad del sistema de hashing de contraseñas. El hash basado en DES ya no debe utilizarse más por la facilidad de producción. este tipo de colisiones, pero debido a que tiene espacios de entrada y salida demasiado pequeños, y es demasiado rápido.)
En consecuencia, solo con la sal y el hash, no hay forma de identificar "la" contraseña, porque la información simplemente no está allí. A través de la enumeración de todas las contraseñas posibles, uno puede construir la lista de contraseñas coincidentes, pero no hay manera de decir cuál es la que el usuario pensó. Sin embargo, y ese es el punto importante aquí, la máquina que usa el resultado del hash basado en DES en un sistema de verificación de contraseña tampoco puede decir: cualquier contraseña que coincida con el valor de sal y hash es una buena contraseña , tan real como cualquier otro. Si la sal y el hash son " hiH9IOyyrrl4k
", entonces se aceptan tanto " cqjmide
" como " ifpqgio
": incluso si usted pensó que su contraseña era "cqjmide", todavía puedo ingresar con su nombre usando " ifpqgio "como contraseña.
Tenga en cuenta, sin embargo, que la gran mayoría de los posibles valores hash tienen una única contraseña coincidente, por lo tanto, una búsqueda exhaustiva encontrará esa contraseña y ninguna otra.
En una nota similar, ya que solo se usan los primeros ocho caracteres, puede tener una contraseña de 40 caracteres, de los cuales los últimos 32 caracteres serán totalmente ignorados por el hash basado en DES. No hay forma de recuperarlos del valor hash, ya que simplemente se eliminan y no tienen ninguna influencia en el hash calculado.