John the Ripper 1.9.0-jumbo-1 avec prise en charge FPGA

Publié nouvelle version du plus ancien programme de recherche de mot de passe pris en charge, John the Ripper 1.9.0-jumbo-1. (Le projet se développe depuis 1996.) Sur page du projet Les sources sont disponibles en téléchargement, ainsi que des assemblys prêts à l'emploi pour Windows.

Il est à noter que 1.8.0 ans se sont écoulés depuis la sortie de la version 1-jumbo-4.5, au cours desquels plus de 6000 80 modifications (git commits) ont été apportées par plus de XNUMX développeurs. Pendant cette période, les développeurs ont recommandé d'utiliser édition actuelle de GitHub, dont l'état est resté stable malgré les changements apportés grâce à Intégration continue, qui comprend une vérification préliminaire de chaque modification (pull request) sur de nombreuses plateformes. Une particularité de la nouvelle version est l'apparition de la prise en charge du FPGA (FPGA) en plus du CPU, du GPU et du Xeon Phi.


Pour les planches ZTEX 1.15 ans, comprenant 4 puces FPGA et initialement utilisé principalement pour le minage de Bitcoin, 7 types de hachages de mots de passe sont désormais implémentés : bcrypt, classic descrypt (dont bigcrypt), sha512crypt, sha256crypt, md5crypt (dont Apache apr1 et AIX smd5), Drupal7 et phpass (utilisé , notamment sous WordPress). Certains d'entre eux sont implémentés sur FPGA pour la première fois. Pour bcrypt, les performances obtenues d'environ 119 2 c/s avec 5^2 itérations (« 05 milliards de dollars 27 $ ») avec une consommation électrique d'environ XNUMX watts dépassent largement les résultats des derniers GPU par carte, par prix matériel et par watt. Également pris en charge groupes de cartes de ce type, qui a été testé jusqu'à 16 cartes (64 FPGA) contrôlées à partir d'un seul Raspberry Pi 2. La fonctionnalité habituelle de John the Ripper est prise en charge, y compris tous les modes de devinette de mot de passe et le téléchargement simultané d'un grand nombre de hachages. Pour accélérer le travail, nous avons mis en place l'utilisation d'un masque (le mode "--mask", y compris en combinaison avec d'autres modes) et la comparaison des hachages calculés avec ceux chargés côté FPGA. Du point de vue de la mise en œuvre, de nombreuses conceptions (par ex. sha512crypt et Drupal7) des blocs constitués de cœurs de processeur multithread (cœurs de processeur logiciels) interagissant avec des cœurs cryptographiques sont utilisés. Le développement de cette fonctionnalité a été dirigé par Denis Burykin en coordination avec d'autres développeurs géants.

Autres changements majeurs :

  • Prise en charge d'un grand nombre de types supplémentaires de hachages, de chiffrements, etc., y compris à la fois les hachages de mots de passe classiques (par exemple, à partir des nouvelles versions de QNX), ainsi que les portefeuilles de crypto-monnaie, les archives cryptées et les systèmes de fichiers cryptés (par exemple, Bitlocker et FreeBSD geli), ainsi que la prise en charge de nouveaux types de formats précédemment pris en charge (par exemple, ajout de la prise en charge de bcrypt-pbkdf pour OpenBSD softraid) et bien plus encore. Au total, 80 formats ont été ajoutés sur CPU et 47 sur OpenCL (et un petit nombre d'anciens ont été supprimés car intégrés dans de nouveaux formats obsolètes). Le nombre total de formats est désormais de 407 sur le CPU (soit 262 sans compter les formats "dynamiques" configurés à partir des fichiers de configuration) et de 88 sur OpenCL.
  • Refus de supporter le langage CUDA au profit d'OpenCL, qui n'interfère en rien avec la pleine utilisation des GPU NVIDIA (et aide même, grâce à la concentration du développement et de l'optimisation sur une implémentation de chaque format pour le GPU au lieu de deux implémentations auparavant).
  • Prise en charge des nouveaux jeux d'instructions SIMD - AVX2, AVX-512 (y compris pour le Xeon Phi de deuxième génération) et MIC (pour la première génération) - ainsi qu'une utilisation plus universelle et complète de SIMD dans les implémentations de nombreux formats, y compris l'utilisation de Ensembles d'instructions précédemment pris en charge jusqu'à AVX et XOP sur x86 (-64) et
    NEON, ASIMD et AltiVec sur ARM, Aarch64 et POWER, respectivement. (En partie dans le cadre du GSoC 2015.)
  • De nombreuses optimisations pour le CPU et OpenCL, à la fois pour travailler plus efficacement avec un grand nombre de hachages simultanément (par exemple, le chargement de 320 millions de hachages SHA-1 sur le GPU a été testé) et pour augmenter la vitesse des calculs de hachage. Certaines de ces optimisations sont universelles, d'autres couvrent différents sous-ensembles de formats et beaucoup sont spécifiques à des formats individuels.
  • (Auto-)configuration de la mise en mémoire tampon optimale des mots de passe vérifiés sur le CPU (« —tune=auto —verbosity=5 ») et des tailles de tâches optimales sur OpenCL (activées par défaut), y compris en tenant compte de la lente montée en puissance de NVIDIA GTX GPU de la série à pleine fréquence de fonctionnement 10xx et plus récente. Utiliser les hachages réellement chargés et la longueur réelle des mots de passe vérifiés (lorsqu'elle est connue à l'avance) pour un tel réglage automatique.
  • Ajout d'un compilateur pour les "expressions dynamiques" spécifiées directement sur la ligne de commande et implémentation de nouveaux types de hachage hybrides, par exemple "-format=dynamic='sha1(md5($p).$s)'", calculés sur le CPU à l'aide de SIMD . En tant que composants de telles expressions, des dizaines de hachages rapides sont pris en charge (des plus courants comme MD5 aux plus exotiques comme Whirlpool), la concaténation de sous-chaînes, l'encodage et le décodage, la conversion de la casse des caractères, les références au mot de passe, au sel, au nom d'utilisateur et aux constantes de chaîne.
  • Élimination des différences indésirables par rapport à hashcat, y compris la prise en charge de règles auparavant spécifiques à hashcat (commandes de règles de liste de mots), transition vers la numérotation des périphériques OpenCL à partir de 1, utilisation par défaut des mêmes longueurs de mot de passe (généralement longueur 7) dans les tests de performances.
  • Nouveaux modes de génération de mots de passe vérifiables (modes de piratage), dont PRINCE de hashcat (forme des « phrases » en combinant plusieurs mots par ordre croissant de longueur totale), des sous-ensembles (fait apparaître des mots de passe avec un nombre insuffisant de caractères différents, même si ces caractères viennent parmi un large ensemble de mots de passe possibles) et hybride externe (permet aux modes externes, décrits dans des fichiers de configuration dans un langage de type C, de générer de nombreux mots de passe vérifiables basés sur chaque « mot » de base reçu d'un autre mode). Aussi, plusieurs nouveaux modes externes prédéfinis.
  • Capacités supplémentaires pour utiliser plusieurs modes simultanément (l'un sur l'autre - empilement), ainsi que pour utiliser des ensembles de règles (empilement de règles de liste de mots).
  • Améliorations des modes masque (étirement progressif du masque dans une plage de longueurs spécifiée, application d'un masque sur le côté du périphérique OpenCL ou de la carte FPGA) et single crack (comportement raisonnable sur les appareils calculant un grand nombre de hachages en parallèle , pour lequel auparavant il n'y avait pas suffisamment de mots de passe vérifiables dans ce mode, ainsi que des restrictions sur la consommation de mémoire).
  • De nombreuses améliorations pour la prise en charge d'Unicode et d'autres encodages dans différents sous-systèmes.
  • De nombreuses améliorations apportées aux programmes *2john (qui convertissent des fichiers de différents formats pour
    utiliser avec john), en particulier wpapcap2john (gère le trafic WiFi).
  • Il existe de nombreuses nouvelles options de ligne de commande, paramètres dans john.conf, options de configuration de script et nouvelles fonctionnalités correspondantes, qui n'ont pas toutes été mentionnées ici.
  • Amélioration de la qualité du code grâce à la prise en charge intégrée des builds de débogage avec AddressSanitizer (précédemment) et UndefinedBehaviorSanitizer (ajouté), en ajoutant un fuzzer de format intégré (dans le cadre de GSoC 2015), en utilisant l'intégration continue (builds pour des dizaines de systèmes d'exploitation et de compilateurs combinaisons et les tester pour une prise en charge correcte de tous les formats).

Source: linux.org.ru

Ajouter un commentaire