Εμπειρία στη χρήση της τεχνολογίας Rutoken για εγγραφή και εξουσιοδότηση χρηστών στο σύστημα (μέρος 1)

Καλό απόγευμα Θέλω να μοιραστώ την εμπειρία μου σε αυτό το θέμα.

Το Rutoken είναι λύσεις υλικού και λογισμικού στον τομέα του ελέγχου ταυτότητας, της ασφάλειας πληροφοριών και της ηλεκτρονικής υπογραφής. Ουσιαστικά, αυτή είναι μια μονάδα flash που μπορεί να αποθηκεύσει δεδομένα ελέγχου ταυτότητας που χρησιμοποιεί ο χρήστης για να συνδεθεί στο σύστημα.

Σε αυτό το παράδειγμα, χρησιμοποιείται το Rutoken EDS 2.0.

Για να εργαστείτε με αυτό το Rutoken χρειάζεστε εγκατάσταση του προγράμματος οδήγησης στα windows.

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

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

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

Αυτό ήταν, τώρα μπορούμε να αλληλεπιδράσουμε με το Rutoken από την πλευρά του πελάτη της εφαρμογής.

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

Η ουσία της ιδέας είναι η εξής:

  1. Ο πελάτης στέλνει ένα αίτημα εξουσιοδότησης στον διακομιστή.
  2. Ο διακομιστής απαντά σε ένα αίτημα από τον πελάτη στέλνοντας μια τυχαία συμβολοσειρά.
  3. Ο πελάτης συμπληρώνει αυτή τη συμβολοσειρά με τυχαία 32 bit.
  4. Ο πελάτης υπογράφει τη συμβολοσειρά που έλαβε με το πιστοποιητικό του.
  5. Ο πελάτης στέλνει το λαμβανόμενο κρυπτογραφημένο μήνυμα στον διακομιστή.
  6. Ο διακομιστής επαληθεύει την υπογραφή λαμβάνοντας το αρχικό μη κρυπτογραφημένο μήνυμα.
  7. Ο διακομιστής αφαιρεί τα τελευταία 32 bit από το ληφθέν μη κρυπτογραφημένο μήνυμα.
  8. Ο διακομιστής συγκρίνει το ληφθέν αποτέλεσμα με το μήνυμα που στάλθηκε όταν ζητήθηκε εξουσιοδότηση.
  9. Εάν τα μηνύματα είναι ίδια, τότε η εξουσιοδότηση θεωρείται επιτυχής.

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

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

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

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

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

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

Αν επιστρέψουμε στο πρόβλημά μας, η λύση φαίνεται προφανής. Πρέπει με κάποιο τρόπο να δημιουργήσετε το δικό σας κέντρο πιστοποίησης. Αλλά πριν από αυτό, πρέπει να υπολογίσετε σε ποια βάση το κέντρο πιστοποίησης πρέπει να εκδώσει ένα πιστοποιητικό στον χρήστη, επειδή δεν γνωρίζει τίποτα γι 'αυτό. (Για παράδειγμα, το όνομα, το επίθετό του κ.λπ.) Υπάρχει κάτι τέτοιο που ονομάζεται αίτημα πιστοποιητικού. Περισσότερες πληροφορίες σχετικά με αυτό το πρότυπο μπορείτε να βρείτε, για παράδειγμα, στη Wikipedia ru.wikipedia.org/wiki/PKCS
Θα χρησιμοποιήσουμε την έκδοση 1.7 - PKCS#10.

Ας περιγράψουμε τον αλγόριθμο για τη δημιουργία πιστοποιητικού στο Rutoken (αρχική πηγή: την τεκμηρίωση):

  1. Δημιουργούμε ένα ζεύγος κλειδιών στον πελάτη και το αποθηκεύουμε στο Rutoken. (η αποθήκευση γίνεται αυτόματα)
  2. Δημιουργούμε ένα αίτημα πιστοποιητικού στον πελάτη.
  3. Από τον πελάτη στέλνουμε αυτό το αίτημα στον διακομιστή.
  4. Όταν λαμβάνουμε ένα αίτημα για πιστοποιητικό στον διακομιστή, εκδίδουμε πιστοποιητικό από την αρχή πιστοποίησης.
  5. Στέλνουμε αυτό το πιστοποιητικό στον πελάτη.
  6. Αποθηκεύουμε το πιστοποιητικό Rutoken στον πελάτη.
  7. Το πιστοποιητικό πρέπει να είναι συνδεδεμένο με το ζεύγος κλειδιών που δημιουργήθηκε στο πρώτο βήμα.

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

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

Πηγή: www.habr.com

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