Το John the Ripper 1.9.0-jumbo-1 κυκλοφόρησε με υποστήριξη FPGA

Απελευθερώθηκε νέα έκδοση του παλαιότερου υποστηριζόμενου προγράμματος εικασίας κωδικού πρόσβασης John the Ripper 1.9.0-jumbo-1 (το έργο αναπτύσσεται από το 1996). Έχουν περάσει 1.8.0 χρόνια από την κυκλοφορία της προηγούμενης έκδοσης 1-jumbo-4.5, κατά την οποία έγιναν περισσότερες από 6000 αλλαγές (git commits) από περισσότερους από 80 προγραμματιστές. Χάρη σε συνεχής ενσωμάτωση, το οποίο περιλαμβάνει έναν προκαταρκτικό έλεγχο κάθε αλλαγής (αίτημα έλξης) σε πολλές πλατφόρμες, κατά τη διάρκεια αυτής της περιόδου οι προγραμματιστές συνέστησαν τη χρήση τρέχουσα αναθεώρηση από το GitHub, η κατάσταση του οποίου διατηρήθηκε σταθερή παρά τις αλλαγές που έγιναν. Κύριος κωδικός έργου διανέμονται από υπό την άδεια GPLv2+ και ο κωδικός ορισμένων στοιχείων βρίσκεται υπό την άδεια BSD.

Ένα ιδιαίτερο χαρακτηριστικό της νέας έκδοσης είναι η εμφάνιση υποστήριξης FPGA (εκτός από CPU, GPU και Xeon Phi). Για σανίδες Ztex 1.15y, συμπεριλαμβανομένων 4 τσιπ FPGA και αρχικά χρησιμοποιήθηκαν κυρίως για εξόρυξη Bitcoin, εφαρμόζονται πλέον 7 τύποι κατακερματισμού κωδικών πρόσβασης: bcrypt, κλασική αποκρυπτογράφηση (συμπεριλαμβανομένου bigcrypt), sha512crypt, sha256crypt, md5crypt (συμπεριλαμβανομένων των Apache apr1 και AIX smd5), Drupal7 και phpass (χρησιμοποιείται , ιδίως στο WordPress). Κάποια από αυτά υλοποιούνται στο FPGA για πρώτη φορά.

Για το bcrypt, η επιτυγχανόμενη απόδοση ~119 c/s με 2^5 επαναλήψεις ("$2b$05") με κατανάλωση ενέργειας ~27 watt υπερβαίνει σημαντικά τα αποτελέσματα για τις πιο πρόσφατες GPU ανά πλακέτα, ανά τιμή υλικού και ανά watt . Υποστηρίζεται επίσης συστάδες από πλακέτες αυτού του τύπου, οι οποίες έχουν δοκιμαστεί έως και 16 πλακέτες (64 τσιπ FPGA) που ελέγχονται από ένα μόνο Raspberry Pi 2. Υποστηρίζεται η συνήθης λειτουργία John the Ripper, συμπεριλαμβανομένων όλων των τρόπων εικασίας κωδικού πρόσβασης και ταυτόχρονης λήψης μεγάλου αριθμού κατακερματισμών .

Για να επιταχύνουμε την εργασία, εφαρμόσαμε τη χρήση μάσκας (τη λειτουργία «—μάσκα», συμπεριλαμβανομένου του συνδυασμού με άλλες λειτουργίες) και σύγκριση των υπολογισμένων κατακερματισμών με αυτά που έχουν φορτωθεί στην πλευρά του FPGA. Από άποψη υλοποίησης, πολλά από τα σχέδια (π.χ. sha512crypt και Drupal7) χρησιμοποιήθηκαν μπλοκ που αποτελούνται από πυρήνες επεξεργαστή πολλαπλών νημάτων (μαλακοί πυρήνες CPU) που αλληλεπιδρούν με κρυπτογραφικούς πυρήνες. Η ανάπτυξη αυτής της λειτουργικότητας έγινε από τον Denis Burykin σε συντονισμό με άλλους προγραμματιστές jumbo.

Άλλες σημαντικές αλλαγές:

  • Υποστήριξη για μεγάλο αριθμό πρόσθετων τύπων κατακερματισμού, κρυπτογράφησης κ.λπ., συμπεριλαμβανομένων τόσο των κλασικών κατακερματισμών κωδικών πρόσβασης (για παράδειγμα, από νέες εκδόσεις του QNX), όσο και των πορτοφολιών κρυπτονομισμάτων, των κρυπτογραφημένων αρχείων και των κρυπτογραφημένων συστημάτων αρχείων (για παράδειγμα, Bitlocker και FreeBSD geli), καθώς και υποστήριξη για νέους τύπους μορφών που υποστηριζόταν παλαιότερα (για παράδειγμα, προστέθηκε υποστήριξη για bcrypt-pbkdf για OpenBSD softraid) και πολλά άλλα. Συνολικά, έχουν προστεθεί 80 μορφές στην CPU και 47 στο OpenCL. Ο συνολικός αριθμός των μορφών είναι τώρα 407 στην CPU (ή 262 χωρίς τις "δυναμικές" μορφές που έχουν διαμορφωθεί από αρχεία διαμόρφωσης) και 88 στο OpenCL.
  • Κατάργηση της υποστήριξης γλώσσας CUDA υπέρ του OpenCL, το οποίο δεν παρεμβαίνει στην πλήρη χρήση της GPU NVIDIA (και μάλιστα βοηθά, χάρη στην εστίαση της ανάπτυξης και των βελτιστοποιήσεων σε μία υλοποίηση κάθε μορφής κάτω από την GPU αντί για δύο υλοποιήσεις πριν).
  • Υποστήριξη για νέα σύνολα εντολών SIMD - AVX2, AVX-512 (συμπεριλαμβανομένης της δεύτερης γενιάς Xeon Phi) και MIC (για την πρώτη γενιά) - καθώς και πιο καθολική και ολοκληρωμένη χρήση του SIMD σε υλοποιήσεις πολλών μορφών, συμπεριλαμβανομένης της χρήσης προηγουμένως υποστηριζόμενων σετ εντολών σε AVX και XOP σε x86(-64) και
    NEON, ASIMD και AltiVec σε ARM, Aarch64 και POWER, αντίστοιχα.

  • Πολυάριθμες βελτιστοποιήσεις για CPU και OpenCL, τόσο για να λειτουργούν πιο αποτελεσματικά με μεγάλο αριθμό κατακερματισμών ταυτόχρονα (για παράδειγμα, φόρτωση 320 εκατομμυρίων κατακερματισμών SHA-1 στη GPU) όσο και για αύξηση της ταχύτητας υπολογισμού κατακερματισμού. Ορισμένες από αυτές τις βελτιστοποιήσεις είναι καθολικές, κάποιες καλύπτουν διάφορα υποσύνολα μορφών και πολλές αφορούν συγκεκριμένες μορφές.
  • (Αυτόματη) διαμόρφωση της βέλτιστης αποθήκευσης στην προσωρινή μνήμη των ελεγμένων κωδικών πρόσβασης στην CPU (“—tune=auto —verbosity=5”) και βέλτιστων μεγεθών εργασιών στο OpenCL (ενεργοποιημένο από προεπιλογή), συμπεριλαμβανομένης της λήψης υπόψη της αργής ράμπας μέχρι την πλήρη συχνότητα λειτουργίας των GPU της σειράς NVIDIA GTX 10xx και νεότερες. Χρησιμοποιώντας πραγματικά φορτωμένους κατακερματισμούς και το πραγματικό μήκος των κωδικών πρόσβασης που ελέγχονται (όταν είναι γνωστό εκ των προτέρων) για τέτοιου είδους αυτόματο συντονισμό.
  • Προσθήκη μεταγλωττιστή για "δυναμικές εκφράσεις" που καθορίζονται απευθείας στη γραμμή εντολών και εφαρμογή νέων υβριδικών τύπων κατακερματισμού, για παράδειγμα "-format=dynamic='sha1(md5($p).$s)'", που υπολογίζεται στην CPU χρησιμοποιώντας SIMD . Ως συστατικά τέτοιων εκφράσεων, υποστηρίζονται δεκάδες γρήγοροι κατακερματισμοί (από συνηθισμένους όπως το MD5 έως μετρίως εξωτικοί όπως το Whirlpool), συνένωση υποσυμβολοσειρών, κωδικοποίηση και αποκωδικοποίηση, μετατροπή πεζών χαρακτήρων, αναφορές σε κωδικό πρόσβασης, αλάτι, όνομα χρήστη και σταθερές συμβολοσειρών.
  • Εξάλειψη ανεπιθύμητων διαφορών από το hashcat, συμπεριλαμβανομένης της υποστήριξης για εντολές κανόνων λίστας λέξεων που προηγουμένως ήταν συγκεκριμένες για το hashcat, μετάβαση στην αρίθμηση συσκευών OpenCL από το 1, χρησιμοποιώντας τα ίδια μήκη προεπιλεγμένου κωδικού πρόσβασης (συνήθως μήκος 7) για δοκιμές απόδοσης.
  • Νέες λειτουργίες σπασίματος, συμπεριλαμβανομένου του PRINCE από το hashcat (δημιουργεί "φράσεις" συνενώνοντας πολλές λέξεις σε αύξουσα σειρά συνολικού μήκους), υποσύνολα (φέρνει κωδικούς πρόσβασης με όχι αρκετούς διαφορετικούς χαρακτήρες, ακόμη κι αν αυτοί οι χαρακτήρες προέρχονται από ένα μεγάλο σύνολο πιθανών) και υβριδικοί εξωτερικοί (επιτρέπει σε εξωτερικές λειτουργίες, που περιγράφονται σε αρχεία διαμόρφωσης σε γλώσσα τύπου C, να δημιουργούν πολλούς επαληθεύσιμους κωδικούς πρόσβασης βάσει κάθε βασικής "λέξης" που λαμβάνεται από άλλη λειτουργία). Επίσης, αρκετές νέες προκαθορισμένες εξωτερικές λειτουργίες.
  • Πρόσθετες λειτουργίες για τη χρήση πολλών λειτουργιών ταυτόχρονα (το ένα πάνω στο άλλο - στοίβαξη), καθώς και για τέτοια χρήση συνόλων κανόνων (στοίβαξη κανόνων λίστας λέξεων).
  • Βελτιώσεις στις λειτουργίες μάσκας (σταδιακή επέκταση της μάσκας στο καθορισμένο εύρος μηκών, εφαρμογή της μάσκας στο πλάι μιας συσκευής OpenCL ή πλακέτας FPGA) και μεμονωμένης ρωγμής (λογική συμπεριφορά σε συσκευές που υπολογίζουν μεγάλο αριθμό κατακερματισμών παράλληλα, που προηγουμένως σε αυτήν τη λειτουργία δεν υπήρχαν κωδικοί πρόσβασης για έλεγχο, καθώς και περιορισμοί στην κατανάλωση μνήμης).
  • Πολλές βελτιώσεις στην υποστήριξη για Unicode και άλλες κωδικοποιήσεις σε διάφορα υποσυστήματα.
  • Πολλές βελτιώσεις στα προγράμματα *2john (μετατροπή αρχείων διαφόρων μορφών σε
    χρήση με τον john), ειδικά το wpapcap2john (διαχειρίζεται την κυκλοφορία WiFi).

  • Πολλές νέες επιλογές γραμμής εντολών, ρυθμίσεις john.conf, επιλογές ρύθμισης παραμέτρων σεναρίου και οι αντίστοιχες νέες δυνατότητες τους, δεν αναφέρθηκαν όλες εδώ.
  • Βελτίωση της ποιότητας κώδικα λόγω της ενσωματωμένης υποστήριξης για εκδόσεις εντοπισμού σφαλμάτων με το AddressSanitizer (προηγουμένως) και το UndefinedBehaviorSanitizer (προστέθηκε), η προσθήκη ενός ενσωματωμένου fuzzer μορφής (μέσα στο GSoC 2015), χρησιμοποιώντας συνεχή ενοποίηση (κατασκευές για δεκάδες συνδυασμούς λειτουργικών συστημάτων και μεταγλωττιστών και δοκιμάζοντας τα για σωστή υποστήριξη όλων των μορφών).

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο