Une particularité de la nouvelle version est l'apparition du support FPGA (en plus du CPU, du GPU et du Xeon Phi). Pour les planches
Pour bcrypt, les performances obtenues d'environ 119 2 c/s avec 5 ^ 2 itérations (« 05 milliards $ 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
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.
Autres changements importants :
- 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. 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. - 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 jusqu'à la pleine fréquence de fonctionnement des GPU de la série NVIDIA GTX 10xx et plus récents. 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: opennet.ru