Πίνακας περιεχομένων:

Χρήση του Mifare Ultralight C With RC522 στο Arduino: 3 βήματα
Χρήση του Mifare Ultralight C With RC522 στο Arduino: 3 βήματα

Βίντεο: Χρήση του Mifare Ultralight C With RC522 στο Arduino: 3 βήματα

Βίντεο: Χρήση του Mifare Ultralight C With RC522 στο Arduino: 3 βήματα
Βίντεο: How to use GEE-LR-001 125 khz EM4100 RFID reader 2024, Ιούλιος
Anonim
Χρησιμοποιώντας το Mifare Ultralight C With RC522 στο Arduino
Χρησιμοποιώντας το Mifare Ultralight C With RC522 στο Arduino

Η χρήση της τεχνολογίας RFID για τον εντοπισμό κατόχων καρτών ή την εξουσιοδότηση για κάτι (άνοιγμα πόρτας κ.λπ.) είναι μια αρκετά κοινή προσέγγιση. Σε περίπτωση εφαρμογής DIY, η μονάδα RC522 χρησιμοποιείται ευρέως καθώς είναι αρκετά φθηνή και υπάρχει πολύς κώδικας για αυτήν την ενότητα.

Στις περισσότερες περιπτώσεις, το UID της κάρτας χρησιμοποιείται για τον "προσδιορισμό" του κατόχου της κάρτας και οι κάρτες Mifare Classic χρησιμοποιούνται επειδή είναι φθηνές και συχνά περιλαμβάνονται όταν αγοράζετε μια μονάδα RC522.

Αλλά όπως ίσως γνωρίζετε, το σύστημα Mifare Classic έχει παραβιαστεί εδώ και μερικά χρόνια και δεν θεωρείται πλέον ασφαλές. Το σύστημα κρυπτογράφησης Crypto1 που χρησιμοποιείται από τις κλασικές κάρτες μπορεί να ξεπεραστεί και είναι ξανά εγγράψιμες κάρτες όπου τα δεδομένα ενός UID μπορούν να επαναπρογραμματιστούν (μαγικές κάρτες).

Έτσι, για οποιαδήποτε εφαρμογή σχετική με την ασφάλεια, η χρήση των καρτών Mifare Classic δεν συνιστάται! Το ίδιο ισχύει για (τα περισσότερα) συστήματα NTAG και Mifare Ultralight

Έτσι, η επιλογή είναι είτε να χρησιμοποιήσετε ένα επαγγελματικό σύστημα είτε να προσπαθήσετε να χρησιμοποιήσετε ένα πιο ασφαλές σύστημα RFID. Διαθέσιμα συστήματα είναι τα Mifare Ultralight C, Mifare DESFire και Mifare Plus. Καθώς υπάρχουν πολλά επαγγελματικά συστήματα που χρησιμοποιούν αυτά τα πιο ασφαλή συστήματα, για την κοινότητα DIY ουσιαστικά δεν υπάρχουν λύσεις (υπάρχει μία λύση DESFire βασισμένη σε Teensy, η οποία βασίζεται στον πιο ακριβό πίνακα διάσπασης PN523). Επιπλέον, οι κάρτες DESFire είναι αρκετά ακριβές. Η πρόκληση λοιπόν ήταν να βρεθεί μια καλύτερη και φθηνότερη λύση.

Η λύση που παρουσιάζεται παρέχει πλήρη πρόσβαση στις φθηνές κάρτες Mifare Ultralight “C” χρησιμοποιώντας τη φθηνή κινεζική μονάδα RC522 DIY. Με βάση αυτόν τον κωδικό, το ασφαλές Mifare Ultralight C μπορεί να χρησιμοποιηθεί σε εφαρμογές DIY.

Βήμα 1: Προϋποθέσεις

Προϋποθέσεις
Προϋποθέσεις

Παρόλο που το RC522 είναι καλά σχεδιασμένο, στις περισσότερες περιπτώσεις είναι κακώς κατασκευασμένο καθώς ορισμένα εξαρτήματα έχουν κακή διάσταση. Αυτό οδηγεί στην κακή φήμη της μονάδας ότι έχει χαμηλή ευαισθησία και δεν αναγνωρίζονται όλοι οι τύποι καρτών. Ειδικά το Mifare Ultralight C ούτε θα αναγνωριστεί ούτε θα είναι δυνατή η ανάγνωση των καρτών.

Το κύριο πρόβλημα είναι η προδιαγραφή των επαγωγών L1 και L2. Όπως περιγράφεται στο https://ham.marsik.org/2017/04/using-cheap-rc522-nfc-reader-to-read.html. Απλώς αντικαθιστώντας αυτούς τους επαγωγείς σε κατάλληλους π.χ. FERROCORE CW1008-2200 ξαφνικά το RC522 δείχνει ποιες είναι οι πραγματικές του δυνατότητες.

Έτσι, πριν δοκιμάσετε τον δεδομένο κώδικα, ΠΡΕΠΕΙ να ΑΝΤΙΚΑΤΑΣΤΗΣΕΤΕ τους επαγωγείς. Απλώς δεν θα λειτουργήσει με τους προεγκατεστημένους επαγωγείς!

Το υπόβαθρο όλων αυτών είναι ότι οι κάρτες Ultralight C είναι πολύ πεινασμένες για ενέργεια. Αυτή η ενέργεια παρέχεται από το πεδίο RF RC522. Λόγω του χαμηλού ρεύματος των επαγωγέων, το ενεργειακό πεδίο δεν είναι αρκετά ισχυρό για να τροφοδοτήσει το Ultralight C. Άλλες κάρτες όπως το Mifare Classic χρειάζονται λιγότερη ενέργεια και ως εκ τούτου λειτουργούν αρκετά σταθερά.

Βήμα 2: Πώς λειτουργεί;

Πώς λειτουργεί?
Πώς λειτουργεί?
Πώς λειτουργεί?
Πώς λειτουργεί?
Πώς λειτουργεί?
Πώς λειτουργεί?
Πώς λειτουργεί?
Πώς λειτουργεί?

Έτσι, μετά την τροποποίηση της μονάδας RC522, πώς μπορείτε να χρησιμοποιήσετε το Mifare Ulralight C για την εφαρμογή σας;

Το κόλπο είναι ότι το Mifare Ultralight C υποστηρίζει έλεγχο ταυτότητας με κωδικό πρόσβασης βασισμένο στην κρυπτογράφηση 3DES. Χρησιμοποιώντας αυτόν τον κωδικό πρόσβασης, το περιεχόμενο της κάρτας μπορεί να γίνει "μόνο για ανάγνωση" ή εντελώς αόρατο σε μη εξουσιοδοτημένο χρήστη.

Για να χρησιμοποιήσετε αυτήν την προστασία κωδικού πρόσβασης, ο κωδικός πρόσβασης πρέπει να γραφτεί στην κάρτα και οι σελίδες πρέπει να προστατευθούν. Μόλις τελειώσετε, μπορείτε να επαληθεύσετε την κάρτα στην αίτησή σας είτε ζητώντας ταυτότητα βάσει κωδικού πρόσβασης είτε επιπλέον έτοιμα δεδομένα από προστατευμένη περιοχή. Μόνο εάν αυτό είναι επιτυχές, γνωρίζετε ότι μπορείτε να εμπιστευτείτε το παρεχόμενο UID στην κάρτα.

Προσοχή: χωρίς έλεγχο ταυτότητας με κωδικό πρόσβασης δεν μπορείτε ακόμα να εμπιστευτείτε μια κάρτα Mifare Ultralight C, καθώς υπάρχουν και «μαγικές κάρτες» που προσομοιώνουν το Ultralight C.

Κάθε κάρτα ανεξάρτητη από την τεχνολογία (αν έχει τη σωστή συχνότητα) θα ανταποκρίνεται με το UID όταν τροφοδοτείται από το πεδίο RF και θα ζητήσει να ταυτοποιηθεί. Επιπλέον, παρέχουν μια τιμή SAK παρέχοντας ελάχιστες πληροφορίες σχετικά με τον τύπο της κάρτας που υπάρχει. Δυστυχώς όλα τα Mifare Ultralight και NTAG προσδιορίζονται ως τύπος syme (SAK = 0x00), συμπεριλαμβανομένου του Mifare Ultralight C. Έτσι, κατά την ψηφοφορία για κάρτες, τουλάχιστον η τιμή SAK των 0x00 θα δώσει μια υπόδειξη ότι μπορεί να υπάρχει ένα Ultralight C στον αναγνώστη Το

Για να βεβαιωθείτε ότι είναι Ultralight C, μπορείτε να στείλετε ένα αίτημα για κρυπτογραφημένο έλεγχο ταυτότητας στην κάρτα. Εάν αυτό ΔΕΝ είναι μια κάρτα Ultralight C, αυτό το αίτημα δεν θα γίνει κατανοητό και η απάντηση θα είναι NAK (όχι-acknolege).

Εάν πρόκειται για κάρτα Ulralight C, θα λάβετε απάντηση 8 byte. Αυτά τα 8 Bytes είναι ένας τυχαίος αριθμός "B" (RndB) κρυπτογραφημένος από το αποθηκευμένο κλειδί στην κάρτα χρησιμοποιώντας την κρυπτογράφηση 3DES.

Αυτό το κρυπτογραφημένο RndB πρέπει να αποκρυπτογραφηθεί χρησιμοποιώντας το ίδιο κλειδί στο πρόγραμμα. Αυτός ο τυχαίος αριθμός στη συνέχεια τροποποιείται ελαφρώς (περιστρεφόμενος κατά ένα byte → byte 1 θα μετακινηθεί στο byte 8 και όλα τα άλλα byte ωθούνται ένα byte χαμηλότερα, τότε ονομάζονται RndB’). Το πρόγραμμα στη συνέχεια δημιουργεί έναν τυχαίο αριθμό 8 Byte "A" (RndA) και συνδέει αυτό το RndA στο τροποποιημένο RndB’. Αυτό κρυπτογραφείται ξανά χρησιμοποιώντας το κλειδί και αποστέλλεται στην κάρτα.

Η κάρτα αποκρυπτογραφεί το μήνυμα και ελέγχει αν το RndB’ταιριάζει στο RndB που δημιουργήθηκε προηγουμένως στην κάρτα. Εάν ταιριάζουν, η κάρτα ξέρει τώρα, ότι το πρόγραμμα ξέρει το κλειδί.

Σε αυτό το σημείο, το πρόγραμμα εξακολουθεί να μην γνωρίζει εάν η κάρτα γνωρίζει το κλειδί και επομένως μπορεί να είναι αξιόπιστη ή όχι. Για να επιτευχθεί αυτό, η κάρτα περιστρέφει τώρα το αποκρυπτογραφημένο RndA κατά ένα byte, στη συνέχεια κρυπτογραφεί αυτά τα byte χρησιμοποιώντας το κλειδί και τα στέλνει πίσω.

Το πρόγραμμα στη συνέχεια θα αποκρυπτογραφήσει την απάντηση της κάρτας και θα ελέγξει αν το αρχικό RndA και το απαντημένο RndA ταιριάζουν. ΜΟΝΟ ΤΟΤΕ και οι δύο οντότητες (πρόγραμμα και κάρτα) γνωρίζουν ότι μοιράζονται τη γνώση του ίδιου κλειδιού.

Αυτή η διαδικασία χρησιμοποιείται μόνο για έλεγχο ταυτότητας. Όλες οι περαιτέρω επικοινωνίες είναι πάντα σε "καθαρό κείμενο".

Παρόλο που υπάρχουν κάρτες "μαγικής Ultralight C" όπου το UID μπορεί να τροποποιηθεί, το ίδιο το κλειδί δεν μπορεί να ληφθεί από την κάρτα και ο κρυπτογράφος 3DES είναι αρκετά ασφαλής. Το κλειδί είναι ένα κλειδί 16 Byte, οπότε μια προσέγγιση ωμής δύναμης για την απόκτηση του κλειδιού θα πάρει λίγο χρόνο.

Όπως αναφέρθηκε, η επικοινωνία πριν από τον έλεγχο ταυτότητας και μετά τον έλεγχο ταυτότητας είναι πάντα σε καθαρό κείμενο (γνωστή και ως μη κρυπτογραφημένη). Κατά την εγγραφή ενός νέου κλειδιού στην κάρτα, το περιεχόμενο του κλειδιού μπορεί να μυρίσει με τη χρήση του κατάλληλου εξοπλισμού. Επομένως, γράψτε το κλειδί μόνο σε ασφαλές περιβάλλον και κρατήστε το κλειδί μυστικό.

Όταν χρησιμοποιείτε την κάρτα Ultralight C

Η κάρτα Ultralight C διαθέτει πολλαπλές λειτουργίες ασφαλείας ενσωματωμένες:

  1. Μνήμη One Time Programming (OTP). Σε αυτήν την περιοχή μπορούν να γραφτούν bits, να μην διαγραφούν bus.
  2. Ένας μετρητής μονής κατεύθυνσης 16 bit. Αυτός ο μετρητής μπορεί να αυξηθεί μόνο όταν έχει πρόσβαση.
  3. Μια προστασία "εγγραφής" ή "ανάγνωσης/εγγραφής" σελίδων στη μνήμη. Μόνο εάν έχουν πιστοποιηθεί με το κλειδί, αυτές οι σελίδες μπορούν να διαβαστούν ή να τροποποιηθούν.
  4. Πάγωμα / αποκλεισμός μεμονωμένων σελίδων για προστασία από οποιαδήποτε τροποποίηση.

Ούτε η χρήση του OTP, ο μετρητής 16 bit ούτε η χρήση του bit αποκλεισμού δεν υλοποιούνται στον δεδομένο κώδικα, αλλά μπορούν εύκολα να εφαρμοστούν με βάση τις πληροφορίες που δίνονται στο https://www.nxp.com/docs/en/data- φύλλο/MF0ICU2.pd…

Καθώς η προστασία με κλειδί είναι απαραίτητη για τη χρήση του Mifare Ultralight C, υπάρχουν όλες οι σχετικές λειτουργίες.

Όλες οι εντολές χρησιμοποιούνται στη Σειριακή οθόνη με "μόνο νέα γραμμή" και με 115200 Baud

  • Το "auth 49454D4B41455242214E4143554F5946" θα ζητήσει έλεγχο ταυτότητας με το δεδομένο κλειδί (σε αυτήν την περίπτωση το τυπικό κλειδί Mifare Ultralight C)
  • Το "dump" θα απορρίψει το περιεχόμενο της κάρτας στο μέτρο που είναι ορατό. Σε περίπτωση που οι σελίδες προστατεύονται από το κλειδί, αυτές οι σελίδες ενδέχεται να μην είναι ορατές μέχρι προηγούμενο έλεγχο ταυτότητας με κλειδί. Στις δύο πρώτες στήλες υποδεικνύεται εάν οι σελίδες είναι κλειδωμένες ή η πρόσβαση είναι περιορισμένη.
  • "NewKey 49454D4B41455242214E4143554F5946" θα γράψει ένα νέο κλειδί στην κάρτα. Το κλειδί είναι γραμμένο στις σελίδες 44 έως 47. Αυτό θα λειτουργήσει μόνο εάν αυτές οι σελίδες δεν είναι ούτε κλειδωμένες ούτε προστατευμένες χωρίς προηγούμενο έλεγχο ταυτότητας.
  • "wchar 10 hello world" θα γράψει "hello world" ξεκινώντας από τη σελίδα 10. Και πάλι, αυτό μόνο τα έργα των σελίδων δεν είναι ούτε κλειδωμένα ούτε προστατευμένα χωρίς προηγούμενο έλεγχο ταυτότητας. Όταν προσπαθείτε να γράψετε πάνω από τη σελίδα 39 ή κάτω από τη σελίδα 4 αυτό θα σας ζητηθεί σφάλμα ή δεδομένα αγνοούνται καθώς αυτές οι σελίδες δεν είναι μνήμη χρήστη.
  • Το "whex 045ACBF44688" θα γράψει τιμές Hex απευθείας στη μνήμη, ισχύουν προηγούμενες συνθήκες.
  • Το "προστασία 30" προστατεύει όλες τις σελίδες από τη σελίδα 30 και πάνω. Ανάλογα με την άδεια, αυτές οι σελίδες μπορούν στη συνέχεια να τροποποιηθούν ή να διαβαστούν μόνο μετά από προηγούμενο έλεγχο ταυτότητας με κλειδί. Η χρήση "προστασίας" με τιμές υψηλότερες από 47 θα ορίσει όλες τις σελίδες σε "απροστάτευτες" ΠΕΡΙΛΑΜΒΑΝΟΝ ΤΟ ΚΛΕΙΔΙ στις σελίδες 44-47 (οι οποίες μπορούν μόνο να τροποποιηθούν αλλά να μην διαβαστούν). Προκειμένου να αποφευχθεί η αλλαγή του κλειδιού, η προστασία πρέπει να ξεκινά τουλάχιστον από τη σελίδα 44.
  • Το "setpbit 0" ορίζει το bit προστασίας και αποφασίζει εάν οι προστατευμένες σελίδες διαβάζονται μόνο ("setpbit 1") ή δεν μπορούν ούτε να διαβαστούν χωρίς να γραφτούν ("setpbit 0") χωρίς προηγούμενο έλεγχο ταυτότητας με κλειδί.

Δεν μπορούν να χρησιμοποιηθούν όλες οι εντολές αμέσως μετά τον εντοπισμό της κάρτας. Μια "χωματερή" προηγουμένως σε μια άλλη εντολή βοηθά πάντα.

Βήμα 3: Σημαντικό

  1. Το πρόγραμμα διαφοροποιεί τους τύπους Ultralight διαβάζοντας τις σελίδες 43 και 44. Εάν η σελίδα 43 είναι αναγνώσιμη και η σελίδα 44 όχι, είναι πιθανότατα Ultralight C. ΑΛΛΑ, αν διαβάζετε/γράφετε προστατεύετε τη σελίδα 43 η κάρτα δεν αναγνωρίζεται πλέον ως Ultralight C (δεν έχει καμία επίδραση σε τίποτα) Η σωστή ταυτοποίηση του Ultralight θα πρέπει να γίνει μέσω του ελέγχου ταυτότητας με κλειδί (δεν το εφάρμοσα για λόγους σταθερότητας).
  2. Πριν από τη χρήση των εντολών "setpbit" και "protection" πρέπει να χρησιμοποιηθεί η εντολή "dump", διαφορετικά η κατάσταση προστασίας των σελίδων δεν θα είναι γνωστή.
  3. Εάν "διαβάζετε/γράφετε" προστατεύετε τις πρώτες σελίδες της κάρτας σας, δεν θα λειτουργεί πλέον με αυτό το πρόγραμμα καθώς η πρώτη σελίδα διαβάζεται συνεχώς για να διαπιστωθεί εάν υπάρχει ακόμα μια κάρτα. Καθώς οι δύο πρώτες σελίδες διαβάζονται μόνο έτσι κι αλλιώς (το UID αποθηκεύεται εκεί), δεν υπάρχει νόημα να τις προστατεύουμε.

Θέματα σταθερότητας

Αυτός ο κώδικας χρησιμοποιεί τη «τυπική» βιβλιοθήκη RC522 για το Arduino και μια βιβλιοθήκη 3DES από τη διεύθυνση https://github.com/Octoate/ArduinoDES. Ενώ η βιβλιοθήκη RC522 χρησιμοποιείται αρκετά συχνά, η βιβλιοθήκη 3DES δεν φαίνεται τόσο διαδεδομένη και πρέπει να εγκατασταθεί χειροκίνητα.

Ο κωδικός έχει δοκιμαστεί σε Arduino Uno. Αλλά ενώ το έγραφα, συνάντησα πολλά περίεργα προβλήματα όσον αφορά τη σταθερότητα. Κάπως έτσι είτε οι ικανότητες προγραμματισμού μου δεν είναι τόσο καλές, μία από τις χρησιμοποιούμενες βιβλιοθήκες είναι ασταθής ή η ανάμειξη των βιβλιοθηκών δεν είναι καλή ιδέα.

Λάβετε υπόψη αυτό όταν χρησιμοποιείτε τον κωδικό !!!

Η αλλαγή του ή η χρήση μόνο τμημάτων του μπορεί να οδηγήσει σε περίεργες συμπεριφορές όπως συντριβή, εκτύπωση περίεργων πραγμάτων ή λήξη χρονικών ορίων ή NAK κατά την ανάγνωση από την κάρτα. Αυτό μπορεί να συμβεί σε οποιοδήποτε σημείο του κώδικα (μου κόστισε πολλές ώρες εντοπισμού σφαλμάτων). Αν βρείτε τους λόγους για αυτό, δώστε μου μια υπόδειξη.

Συνιστάται: