nueva versión del programa más antiguo y compatible para recuperación de contraseñas (el proyecto se desarrolla desde 1996). Desde el lanzamiento de la versión anterior 1.8.0-jumbo-1 han pasado 4.5 años, durante los cuales se han realizado más de 6000 cambios (commits de git) de más de 80 desarrolladores. Gracias a , que incluye la revisión previa de cada cambio (pull request) en múltiples plataformas, durante este tiempo los desarrolladores recomendaron utilizar , cuyo estado se mantuvo estable a pesar de los cambios introducidos. El código principal del proyecto está bajo la licencia GPLv2+, mientras que el código de algunos componentes está bajo la licencia BSD.
Una característica de la nueva versión es la adición de soporte para FPGA (además de CPU, GPU y Xeon Phi). Para las , que incluyen 4 chips FPGA y que originalmente se utilizaban principalmente para minar Bitcoin, ahora se implementan 7 tipos de hash de contraseñas: bcrypt, descrypt clásico (incluyendo bigcrypt), sha512crypt, sha256crypt, md5crypt (incluyendo Apache apr1 y AIX smd5), Drupal7 y phpass (utilizado, entre otros, en WordPress). Algunos de ellos se implementan en FPGA por primera vez.
Para bcrypt, se ha alcanzado un rendimiento de ~119k c/s a 2^5 iteraciones («$2b$05») con un consumo de energía de aproximadamente ~27 vatios, que supera significativamente los resultados para las GPU más nuevas en términos de placa, costo del hardware y vatios. También se soportan de este tipo de placas, que se ha verificado hasta 16 placas (64 chips FPGA) controladas desde una Raspberry Pi 2. Se mantiene la funcionalidad habitual de John the Ripper, incluidos todos los modos de recuperación de contraseñas y la carga simultánea de un gran número de hashes.
Para acelerar el trabajo, se ha implementado el uso de máscara (modo «—mask», incluida en combinación con otros modos) y la comparación de los hashes calculados con los cargados en el lado de FPGA. Desde el punto de vista de la implementación, en muchos de los diseños (por ejemplo, para ) se aplican bloques compuestos por núcleos de procesador multihilo (soft CPU cores) que interactúan con núcleos criptográficos. El desarrollo de esta funcionalidad fue dirigido por Denis Burykin en coordinación con otros desarrolladores de jumbo.
Otros cambios importantes:
- Soporte para una amplia variedad de tipos de hash, cifrados, etc., incluyendo tanto hashes de contraseñas clásicos (por ejemplo, de las nuevas versiones de QNX) como wallets de criptomonedas, archivos cifrados y sistemas de archivos cifrados (como Bitlocker y FreeBSD geli), así como soporte para nuevas variedades de formatos que previamente se admitían (por ejemplo, se añadió soporte para bcrypt-pbkdf en OpenBSD softraid) y mucho más. En total, se han añadido 80 formatos para CPU y 47 para OpenCL. El número total de formatos ahora es de 407 para CPU (o 262 excluyendo los formatos "dinámicos" configurables desde archivos de configuración) y 88 para OpenCL.
- Abandono del soporte para el lenguaje CUDA en favor de OpenCL, lo que no interfiere en absoluto con el uso completo de las GPU de NVIDIA (e incluso ayuda, gracias al enfoque de desarrollo y optimizaciones en una única implementación de cada formato para GPU en lugar de dos implementaciones como antes).
- Soporte para nuevos conjuntos de instrucciones SIMD — AVX2, AVX-512 (incluido para la segunda generación de Xeon Phi) y MIC (para la primera generación) — así como un uso más versátil y completo de SIMD en implementaciones de muchos formatos, incluyendo la aplicación de conjuntos de instrucciones admitidos anteriormente hasta AVX y XOP en x86(-64) y
NEON, ASIMD y AltiVec en ARM, Aarch64 y POWER, respectivamente. - Numerosas optimizaciones para CPU y OpenCL, tanto para un funcionamiento más eficiente con una gran cantidad de hashes simultáneamente (por ejemplo, se probó la carga de 320 millones de hashes SHA-1 en GPU), así como para aumentar la velocidad de cálculo de hashes. Parte de estas optimizaciones son universales, algunas cubren diversos subconjuntos de formatos, y muchas son específicas para formatos individuales.
- (Auto-)ajuste de la optimización del almacenamiento en búfer de las contraseñas verificadas en CPU ("--tune=auto --verbosity=5") y de las dimensiones de tarea óptimas en OpenCL (incluido por defecto), teniendo en cuenta la lenta llegada a la plena frecuencia de trabajo de las GPU de la serie NVIDIA GTX 10xx y más recientes. Uso de hashes realmente cargados y la longitud real de las contraseñas verificadas (cuando se conoce de antemano) para tal autoajuste.
- Adición de un compilador de "expresiones dinámicas" que se indican directamente en la línea de comandos e implementan nuevos tipos híbridos de hash, por ejemplo, "--format=dynamic='sha1(md5($p).$s)'", calculados en CPU utilizando SIMD. Como componentes de tales expresiones, se soportan decenas de hashes rápidos (desde los comunes como MD5 hasta los moderadamente exóticos como Whirlpool), combinación de substrings, codificación y decodificación, transformación de mayúsculas y minúsculas, referencias a contraseñas, sal, nombres de usuario y constantes de cadena.
- Eliminación de diferencias no deseadas con hashcat, incluyendo soporte para reglas específicas de hashcat (comandos de reglas de listas de palabras), cambio a la numeración de dispositivos OpenCL comenzando desde 1, aplicación por defecto de las mismas longitudes de contraseñas (normalmente longitud 7) en pruebas de rendimiento.
- Nuevos modos de generación de contraseñas verificables (modos de cracking), incluyendo PRINCE de hashcat (forma 'frases' combinando varias palabras en orden creciente de longitud total), subsets (prueba contraseñas con insuficientes caracteres diferentes, incluso si esos caracteres provienen de un gran conjunto de posibilidades) y hybrid external (permite que modos externos, descritos en archivos de configuración en un lenguaje similar a C, generen múltiples contraseñas verificables basadas en cada 'palabra' base llegada desde otro modo). Además, varios nuevos modos externos predefinidos.
- Funciones adicionales para el uso simultáneo de varios modos (uno sobre otro — stacking), así como para usar conjuntos de reglas de esa manera (stacking de reglas de listas de palabras).
- Mejoras en los modos mask (estiramiento gradual de la máscara en el rango de longitudes especificado, aplicación de la máscara en el lado del dispositivo OpenCL o de la placa FPGA) y single crack (comportamiento razonable en dispositivos que calculan un gran número de hashes en paralelo, para lo cual antes en este modo faltaban contraseñas verificables, así como limitaciones en el uso de memoria).
- Muchas mejoras en el soporte de Unicode y otros codificadores en diferentes subsistemas.
- Muchas mejoras en los programas *2john (que transforman archivos de diferentes formatos para
uso con john), especialmente wpapcap2john (que procesa el tráfico WiFi). - Muchas nuevas opciones de línea de comandos, configuraciones en john.conf, opciones del script configure y sus nuevas capacidades correspondientes, no todas las cuales se han podido mencionar aquí.
- Mejora de la calidad del código gracias al soporte integrado para compilaciones de depuración con AddressSanitizer (ya disponible anteriormente) y UndefinedBehaviorSanitizer (agregado), la inclusión de un fuzzer de formatos incorporado (como parte de GSoC 2015), y la implementación de integración continua (compilaciones para decenas de combinaciones de sistemas operativos y compiladores y pruebas en ellos para asegurar el correcto soporte de todos los formatos).
Fuente: opennet.ru
