Κλειδιά πρόσβασης: Τι στο καλό και γιατί;

Κλειδιά πρόσβασης: Τι στο καλό και γιατί;

Αυτά τα πράγματα καλούνται Κλειδιά σίγουρα κάνουν τον γύρο αυτές τις μέρες. Ήταν ένα κύριο αξιοθέατο σε W3C TPAC 2022, κέρδισε υποστήριξη σε Safari 16, βρίσκουν τον δρόμο τους macOS και iOS, και προγραμματίζεται να είναι το μέλλον για διαχειριστές κωδικών πρόσβασης όπως το 1Password. Αυτοί είναι υποστηρίζεται ήδη στο Android και σύντομα θα βρουν τον δρόμο τους στο Chrome OS και τα Windows σε μελλοντικές εκδόσεις.

Οι βελτιώσεις ασφαλείας του Geeky OS δεν είναι ακριβώς οι μεγάλοι τίτλοι στην κοινότητα του front-end, αλλά είναι λογικό ότι οι κωδικοί πρόσβασης θα είναι "πράγμα". Και λαμβάνοντας υπόψη τον τρόπο με τον οποίο οι κωδικοί πρόσβασης και οι εφαρμογές κωδικών πρόσβασης επηρεάζουν την εμπειρία χρήστη για πράγματα όπως ο έλεγχος ταυτότητας και η επεξεργασία φόρμας, ίσως θέλουμε τουλάχιστον να τυλίξουμε το μυαλό μας γύρω από αυτά, ώστε να ξέρουμε τι έρχεται.

Αυτό είναι το νόημα αυτού του άρθρου. Μελετάω και πειραματίζομαι με τους κωδικούς πρόσβασης — και το WebAuthn API πάνω στο οποίο έχουν κατασκευαστεί — εδώ και αρκετό καιρό. Επιτρέψτε μου να μοιραστώ αυτά που έμαθα.

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

Ορολογία

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

  • Βασισμένο πάρτι: ο διακομιστής στον οποίο θα πραγματοποιήσετε έλεγχο ταυτότητας. Θα χρησιμοποιήσουμε "διακομιστή" για να υπονοήσουμε το Στήριγμα σε αυτό το άρθρο.
  • Πελάτης: στην περίπτωσή μας, το πρόγραμμα περιήγησης ιστού ή το λειτουργικό σύστημα.
  • Επαληθευτής: Λογισμικό ή/και συσκευές υλικού που επιτρέπουν την παραγωγή και αποθήκευση για ζεύγη δημόσιων κλειδιών.
  • FIDO: Ένας φορέας ανοιχτών προτύπων που δημιουργεί επίσης προδιαγραφές γύρω από τα διαπιστευτήρια FIDO.
  • WebAuthn: Το υποκείμενο πρωτόκολλο για κωδικούς πρόσβασης, γνωστό και ως α FIDO2 διαπιστευτήρια ή διαπιστευτήρια FIDO μιας συσκευής.
  • Κλειδιά πρόσβασης: WebAuthn, αλλά με συγχρονισμό cloud (ονομάζονται επίσης διαπιστευτήρια FIDO πολλών συσκευών, διαπιστευτήρια με δυνατότητα εντοπισμού ή διαπιστευτήρια κατοίκου).
  • Κρυπτογραφία δημόσιου κλειδιού: Ένα δημιουργημένο ζεύγος κλειδιών που περιλαμβάνει ιδιωτικό και δημόσιο κλειδί. Ανάλογα με τον αλγόριθμο, θα πρέπει είτε να χρησιμοποιείται για υπογραφή και επαλήθευση είτε για κρυπτογράφηση και αποκρυπτογράφηση. Αυτό είναι επίσης γνωστό ως ασύμμετρη κρυπτογραφία.
  • RSA: Ένα ακρωνύμιο των ονομάτων των δημιουργών, Rivest Shamir και Adel. Το RSA είναι μια παλαιότερη, αλλά ακόμα χρήσιμη, οικογένεια κρυπτογραφίας δημόσιου κλειδιού που βασίζεται σε πρώτους παράγοντες παραγοντοποίησης.
  • Κρυπτογραφία Ελλειπτικής Καμπύλης (ECC): Μια νεότερη οικογένεια κρυπτογραφίας με βάση τις ελλειπτικές καμπύλες.
  • ES256: Ένα δημόσιο κλειδί ελλειπτικής καμπύλης που χρησιμοποιεί έναν αλγόριθμο υπογραφής ECDSA (PDF) με SHA256 για κατακερματισμό.
  • RS256: Όπως το ES256, αλλά χρησιμοποιεί RSA με RSASSA-PKCS1-v1.5 και SHA256.

Τι είναι οι κωδικοί πρόσβασης;

Προτού μπορέσουμε να μιλήσουμε συγκεκριμένα για κωδικούς πρόσβασης, πρέπει να μιλήσουμε για ένα άλλο πρωτόκολλο που ονομάζεται WebAuthn (γνωστό και ως FIDO2). Οι κωδικοί πρόσβασης είναι μια προδιαγραφή που είναι χτισμένη πάνω από το WebAuthn. Το WebAuthn επιτρέπει την κρυπτογράφηση δημόσιου κλειδιού για την αντικατάσταση κωδικών πρόσβασης. Χρησιμοποιούμε κάποιο είδος συσκευής ασφαλείας, όπως κλειδί υλικού ή Μονάδα Trusted Platform Module (TPM), για τη δημιουργία ιδιωτικών και δημόσιων κλειδιών.

Το δημόσιο κλειδί προορίζεται για χρήση από οποιονδήποτε. Το ιδιωτικό κλειδί, ωστόσο, δεν μπορεί να αφαιρεθεί από τη συσκευή που το δημιούργησε. Αυτό ήταν ένα από τα ζητήματα με το WebAuthn. εάν χάσετε τη συσκευή, χάνετε την πρόσβαση.

Το Passkeys το λύνει παρέχοντας έναν συγχρονισμό cloud των διαπιστευτήριών σας. Με άλλα λόγια, αυτό που δημιουργείτε στον υπολογιστή σας μπορεί πλέον να χρησιμοποιηθεί και στο τηλέφωνό σας (αν και προκαλεί σύγχυση, υπάρχουν και διαπιστευτήρια μίας συσκευής).

Επί του παρόντος, τη στιγμή που γράφονται αυτές οι γραμμές, μόνο το iOS, το macOS και το Android παρέχουν πλήρη υποστήριξη για κωδικούς πρόσβασης που συγχρονίζονται με σύννεφο και ακόμη και τότε, περιορίζονται από το πρόγραμμα περιήγησης που χρησιμοποιείται. Η Google και η Apple παρέχουν μια διεπαφή για συγχρονισμό μέσω τους Διαχειριστής κωδικών πρόσβασης Google και  Apple iCloud Keychain υπηρεσίες, αντίστοιχα.

Πώς αντικαθιστούν τους κωδικούς πρόσβασης οι κωδικοί πρόσβασης;

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

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

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

Όχι άλλα ξεχασμένα email και τους σχετικούς κωδικούς πρόσβασης! Το πρόγραμμα περιήγησης θα θυμάται ποια διαπιστευτήρια χρησιμοποιήσατε για ποιον ιστότοπο — το μόνο που χρειάζεται να κάνετε είναι να κάνετε μερικά κλικ και είστε συνδεδεμένοι. Μπορείτε να παρέχετε ένα δευτερεύον μέσο επαλήθευσης για να χρησιμοποιήσετε τον κωδικό πρόσβασης, όπως βιομετρικά στοιχεία ή μια καρφίτσα , αλλά αυτοί εξακολουθούν να είναι πολύ πιο γρήγοροι από τους κωδικούς πρόσβασης του παρελθόντος.

Περισσότερα για την κρυπτογραφία

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

Όταν πρόκειται για κρυπτογράφηση και αποκρυπτογράφηση ενός μηνύματος, το δημόσιο κλειδί του παραλήπτη χρησιμοποιείται για την κρυπτογράφηση ενός μηνύματος, έτσι ώστε μόνο το ιδιωτικό κλειδί του παραλήπτη να μπορεί να αποκρυπτογραφήσει το μήνυμα. Στη γλώσσα ασφαλείας, αυτό είναι γνωστό ως "παροχή εμπιστευτικότητας". Ωστόσο, αυτό δεν παρέχει απόδειξη ότι ο αποστολέας είναι αυτός που λένε ότι είναι, καθώς οποιοσδήποτε μπορεί ενδεχομένως να χρησιμοποιήσει ένα δημόσιο κλειδί για να στείλει σε κάποιον ένα κρυπτογραφημένο μήνυμα.

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

Πώς έχουμε πρόσβαση σε κωδικούς πρόσβασης;

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

Για παράδειγμα, ένας έλεγχος ταυτότητας λογισμικού μπορεί να χρησιμοποιήσει τη μονάδα αξιόπιστης πλατφόρμας (TPM) ή ασφαλή θύλακα μιας συσκευής για τη δημιουργία διαπιστευτηρίων. Στη συνέχεια, τα διαπιστευτήρια μπορούν να αποθηκευτούν απομακρυσμένα και να συγχρονιστούν σε όλες τις συσκευές, π.χ. κωδικούς πρόσβασης. Ένας έλεγχος ταυτότητας υλικού θα ήταν κάτι σαν α YubiKey, το οποίο μπορεί να δημιουργήσει και να αποθηκεύσει κλειδιά στην ίδια τη συσκευή.

Για να αποκτήσετε πρόσβαση στον έλεγχο ταυτότητας, το πρόγραμμα περιήγησης πρέπει να έχει πρόσβαση στο υλικό και για αυτό χρειαζόμαστε μια διεπαφή. Η διεπαφή που χρησιμοποιούμε εδώ είναι το Πρωτόκολλο Client to Authenticator (CTAP). Επιτρέπει την πρόσβαση σε διαφορετικούς ελέγχους ταυτότητας μέσω διαφορετικών μηχανισμών. Για παράδειγμα, μπορούμε να έχουμε πρόσβαση σε έναν έλεγχο ταυτότητας μέσω NFC, USB και Bluetooth χρησιμοποιώντας το CTAP.

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

Η διαφορά μεταξύ κωδικών πρόσβασης και WebAuthn

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

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

Διαφορετικά, τα κλειδιά είναι κρυπτογραφικά τα ίδια. Διαφέρουν μόνο ως προς τον τρόπο αποθήκευσης και τις πληροφορίες που χρησιμοποιούν για να ξεκινήσουν τη διαδικασία σύνδεσης.

Η διαδικασία… με λίγα λόγια

Η διαδικασία για τη δημιουργία ενός WebAuthn ή ενός κωδικού πρόσβασης είναι πολύ παρόμοια: λάβετε μια πρόκληση από τον διακομιστή και, στη συνέχεια, χρησιμοποιήστε το navigator.credentials.create web API για τη δημιουργία ενός ζεύγους δημόσιων κλειδιών. Στη συνέχεια, στείλτε την πρόκληση και το δημόσιο κλειδί πίσω στον διακομιστή που θα αποθηκευτεί.

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

Ο χρήστης έχει ένα ακόμη βήμα — ανακτήστε μια άλλη πρόκληση από τον διακομιστή και χρησιμοποιήστε το navigator.credentials.get API για να υπογράψετε την πρόκληση. Στέλνουμε πίσω την υπογεγραμμένη πρόκληση στον διακομιστή και ο διακομιστής επαληθεύει την πρόκληση και, στη συνέχεια, μας συνδέεται εάν η υπογραφή περάσει.

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

Το κρέας και οι πατάτες

Οι κωδικοί πρόσβασης χρησιμοποιούνται σε δύο διακριτές φάσεις: το επιβεβαίωση και  ισχυρισμός φάσεις.

Η φάση της βεβαίωσης μπορεί επίσης να θεωρηθεί ως η φάση της εγγραφής. Θα εγγραφείτε με ένα email και έναν κωδικό πρόσβασης για έναν νέο ιστότοπο, ωστόσο, σε αυτήν την περίπτωση, θα χρησιμοποιούσαμε τον κωδικό πρόσβασής μας.

Η φάση της διεκδίκησης είναι παρόμοια με τον τρόπο με τον οποίο θα συνδέεστε σε έναν ιστότοπο μετά την εγγραφή σας.

Επιβεβαίωση

Κλειδιά πρόσβασης: Τι στο καλό και γιατί; Ευφυΐα Δεδομένων PlatoBlockchain. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.
Προβολή πλήρους μεγέθους

Η navigator.credentials.create Το API είναι το επίκεντρο της φάσης βεβαίωσής μας. Έχουμε εγγραφεί ως νέος χρήστης στο σύστημα και πρέπει να δημιουργήσουμε ένα νέο ζεύγος δημόσιων κλειδιών. Ωστόσο, πρέπει να προσδιορίσουμε τι είδους ζεύγος κλειδιών θέλουμε να δημιουργήσουμε. Αυτό σημαίνει ότι πρέπει να παρέχουμε επιλογές navigator.credentials.create.

// The `challenge` is random and has to come from the server
const publicKey: PublicKeyCredentialCreationOptions = { challenge: safeEncode(challenge), rp: { id: window.location.host, name: document.title, }, user: { id: new TextEncoder().encode(crypto.randomUUID()), // Why not make it random? name: 'Your username', displayName: 'Display name in browser', }, pubKeyCredParams: [ { type: 'public-key', alg: -7, // ES256 }, { type: 'public-key', alg: -256, // RS256 }, ], authenticatorSelection: { userVerification: 'preferred', // Do you want to use biometrics or a pin? residentKey: 'required', // Create a resident key e.g. passkey }, attestation: 'indirect', // indirect, direct, or none timeout: 60_000,
};
const pubKeyCredential: PublicKeyCredential = await navigator.credentials.create({ publicKey
});
const { id // the key id a.k.a. kid
} = pubKeyCredential;
const pubKey = pubKeyCredential.response.getPublicKey();
const { clientDataJSON, attestationObject } = pubKeyCredential.response;
const { type, challenge, origin } = JSON.parse(new TextDecoder().decode(clientDataJSON));
// Send data off to the server for registration

Θα πάμε PublicKeyCredential που περιέχει ένα AuthenticatorAttestationResponse που επανέρχεται μετά τη δημιουργία. Το διαπιστευτήριο έχει το αναγνωριστικό του δημιουργημένου ζεύγους κλειδιών.

Η απάντηση παρέχει μερικές χρήσιμες πληροφορίες. Πρώτον, έχουμε το δημόσιο κλειδί μας σε αυτήν την απόκριση και πρέπει να το στείλουμε στον διακομιστή που θα αποθηκευτεί. Δεύτερον, παίρνουμε επίσης πίσω το clientDataJSON ιδιοκτησία την οποία μπορούμε να αποκωδικοποιήσουμε, και από εκεί, να πάρουμε πίσω το typechallenge, να origin του κλειδιού πρόσβασης.

Για βεβαίωση, θέλουμε να επικυρώσουμε το typechallenge, να origin στον διακομιστή, καθώς και αποθήκευση του δημόσιου κλειδιού με το αναγνωριστικό του, π.χ. παιδί. Μπορούμε επίσης προαιρετικά να αποθηκεύσουμε το attestationObject αν το επιθυμούμε. Μια άλλη χρήσιμη ιδιότητα για αποθήκευση είναι η COSE αλγόριθμος, ο οποίος ορίζεται παραπάνω στο μας  PublicKeyCredentialCreationOptions με alg: -7 or alg: -256, προκειμένου να επαληθεύσετε εύκολα τυχόν υπογεγραμμένες προκλήσεις στη φάση διεκδίκησης.

Ισχυρισμός

Κλειδιά πρόσβασης: Τι στο καλό και γιατί; Ευφυΐα Δεδομένων PlatoBlockchain. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.
Προβολή πλήρους μεγέθους

Η navigator.credentials.get Το API θα είναι το επίκεντρο της φάσης διεκδίκησης. Εννοιολογικά, αυτό θα ήταν το σημείο όπου ο χρήστης συνδέεται στην εφαρμογή Ιστού μετά την εγγραφή του.

// The `challenge` is random and has to come from the server
const publicKey: PublicKeyCredentialRequestOptions = { challenge: new TextEncoder().encode(challenge), rpId: window.location.host, timeout: 60_000,
};
const publicKeyCredential: PublicKeyCredential = await navigator.credentials.get({ publicKey, mediation: 'optional',
});
const { id // the key id, aka kid
} = pubKeyCredential;
const { clientDataJSON, attestationObject, signature, userHandle } = pubKeyCredential.response;
const { type, challenge, origin } = JSON.parse(new TextDecoder().decode(clientDataJSON));
// Send data off to the server for verification

Θα πάρουμε ξανά ένα PublicKeyCredential με ένα AuthenticatorAssertionResponse αυτή τη φορά. Το διαπιστευτήριο περιλαμβάνει και πάλι το αναγνωριστικό κλειδιού.

Παίρνουμε επίσης το typechallenge, να origin από το clientDataJSON πάλι. ο signature περιλαμβάνεται πλέον στην απάντηση, καθώς και η authenticatorData. Θα χρειαστούμε αυτά και τα clientDataJSON για να επαληθεύσετε ότι αυτό ήταν υπογεγραμμένο με το ιδιωτικό κλειδί.

Η authenticatorData περιλαμβάνει ορισμένες ιδιότητες που αξίζει να παρακολουθήσετε Πρώτα είναι ο κατακερματισμός SHA256 της προέλευσης που χρησιμοποιείτε, που βρίσκεται μέσα στα πρώτα 32 byte, κάτι που είναι χρήσιμο για την επαλήθευση ότι το αίτημα προέρχεται από τον ίδιο διακομιστή προέλευσης. Το δεύτερο είναι το signCount, το οποίο είναι από το byte 33 έως το 37. Αυτό δημιουργείται από τον έλεγχο ταυτότητας και θα πρέπει να συγκριθεί με την προηγούμενη τιμή του για να διασφαλιστεί ότι δεν συμβαίνει τίποτα με το κλειδί. Η τιμή πρέπει πάντα να είναι 0 όταν πρόκειται για κλειδί πρόσβασης πολλών συσκευών και θα πρέπει να είναι τυχαία μεγαλύτερη από το προηγούμενο signCount όταν πρόκειται για κλειδί πρόσβασης μίας συσκευής.

Αφού δηλώσετε τη σύνδεσή σας, θα πρέπει να συνδεθείτε — συγχαρητήρια! Τα Passkeys είναι ένα πολύ εξαιρετικό πρωτόκολλο, αλλά συνοδεύεται από ορισμένες προειδοποιήσεις.

Μερικά μειονεκτήματα

Υπάρχουν πολλά θετικά στοιχεία για τα Passkeys, ωστόσο, υπάρχουν ορισμένα ζητήματα με αυτό τη στιγμή της συγγραφής αυτής της έκθεσης. Πρώτον, οι κωδικοί πρόσβασης είναι κάπως νωρίς ως προς την υποστήριξη, με τα διαπιστευτήρια μιας συσκευής να επιτρέπονται στα Windows και πολύ μικρή υποστήριξη για συστήματα Linux. Passkeys.dev παρέχει ένα ωραίο τραπέζι που μοιάζει με το Caniuse αυτού του πρωτοκόλλου.

Επίσης, οι πλατφόρμες κωδικών πρόσβασης της Google και της Apple δεν επικοινωνούν μεταξύ τους. Εάν θέλετε να μεταφέρετε τα διαπιστευτήριά σας από το τηλέφωνό σας Android στο iPhone σας… καλά, δεν έχετε τύχη προς το παρόν. Αυτό δεν σημαίνει ότι δεν υπάρχει διαλειτουργικότητα! Μπορείτε να συνδεθείτε στον υπολογιστή σας χρησιμοποιώντας το τηλέφωνό σας ως εργαλείο ελέγχου ταυτότητας. Αλλά θα ήταν πολύ πιο καθαρό να το έχετε ενσωματωμένο στο λειτουργικό σύστημα και να συγχρονίζεται χωρίς να είναι κλειδωμένο σε επίπεδο προμηθευτή.

Πού πάνε τα πράγματα;

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

Οι κωδικοί πρόσβασης σε καμία περίπτωση δεν υποστηρίζονται μόνο στον Ιστό. Android και  iOS Και οι δύο θα υποστηρίζουν εγγενείς κωδικούς πρόσβασης ως πολίτες πρώτης κατηγορίας. Είμαστε ακόμα στις πρώτες μέρες όλου αυτού, αλλά περιμένουμε να το δούμε να αναφέρεται όλο και περισσότερο.

Εξάλλου, εξαλείφουμε την ανάγκη για κωδικούς πρόσβασης και με αυτόν τον τρόπο, κάνουμε τον κόσμο πιο ασφαλή για αυτό!

Υποστηρικτικό υλικό

Ακολουθούν μερικοί περισσότεροι πόροι εάν θέλετε να μάθετε περισσότερα σχετικά με τους κωδικούς πρόσβασης. Υπάρχει επίσης ένα αποθετήριο και ένα demo που έφτιαξα για αυτό το άρθρο.

Σφραγίδα ώρας:

Περισσότερα από Κόλπα CSS