Κλειδιά WireGuard στο ESP32: ένα για κάθε συσκευή ή ένα ενσωματωμένο;
Ένα κλειδί που μεταγλωττίζεται στο firmware του ESP32 είναι ταυτότητα ομοτίμου, όχι κωδικός πρόσβασης. Αποφασίστε με τρεις συνθήκες: κατοχή, προστασία flash και επαναχρήση σε όλο τον στόλο.
Το σκίτσο βάζει το ιδιωτικό κλειδί του WireGuard σε έναν πίνακα χαρακτήρων και το τούνελ δουλεύει, γι’ αυτό το ερώτημα επανέρχεται. Η απόφαση που πρέπει πραγματικά να πάρετε δεν είναι «είναι ασφαλές αυτό» αλλά «ποια από τις τρεις συνθήκες ισχύει για αυτή την ανάπτυξη». Είναι: ποιος μπορεί να κρατήσει τη συσκευή φυσικά, τι δίνει μια ανάγνωση του flash στο δικό σας εξάρτημα, και αν ο στόλος μοιράζεται ένα κλειδί ή κουβαλά ένα το καθένα. Απαντήστε σε αυτά και ο σχεδιασμός ακολουθεί, γιατί κάθε συνθήκη αλλάζει το κόστος ενός κλειδιού που διέρρευσε, όχι το γεγονός ότι μπορεί να διαρρεύσει.
Τι εξουσιοδοτεί το κλειδί
Το WireGuard πιστοποιεί τα ομότιμα με δημόσιο κλειδί. Ο διακομιστής αντιστοιχίζει το δημόσιο κλειδί κάθε ομοτίμου σε μια διεύθυνση και μια AllowedIPs λίστα, άρα το ιδιωτικό κλειδί είναι αυτό που επιτρέπει σε έναν πελάτη να στέλνει κίνηση από αυτή τη διεύθυνση.
Η ίδια εγγραφή καθορίζει ποιους προορισμούς μπορεί να φτάσει η συσκευή, άρα ένα κλειδί που διέρρευσε εκθέτει το δίκτυο πίσω από το τούνελ καθώς και τη διεύθυνση του τούνελ.
Συνθήκη πρώτη: ποιος μπορεί να κρατήσει τη συσκευή
Αν η μονάδα μένει σε κλειδωμένο ντουλάπι και κανείς έξω από την ομάδα σας δεν την αγγίζει, η έκθεση είναι κυρίως ζήτημα διανομής firmware. Αν αποστέλλεται σε πελάτες, βρίσκεται σε όχημα ή επιστρέφει στην εγγύηση, η φυσική κατοχή είναι το διαπιστευτήριο και η μυστικότητα του δυαδικού είναι δευτερεύουσα. Όποιος κρατά τη συσκευή δεν χρειάζεται να διαβάσει το κλειδί, γιατί το firmware που τρέχει θα του ανοίξει το τούνελ. Γι’ αυτό η απάντηση από την πλευρά του διακομιστή πρέπει να περιλαμβάνει ανάκληση και περιορισμένη διάρκεια ζωής, όχι μόνο μια προστατευμένη εικόνα.
Αποφασίστε αυτή τη συνθήκη πριν από τις άλλες δύο, γιατί ορίζει τον προϋπολογισμό και για τις δύο.
Συνθήκη δεύτερη: τι δίνει μια ανάγνωση του flash
Όποιος μπορεί να διαβάσει την εικόνα του flash ανακτά ένα κλειδί αποθηκευμένο ως λεκτικό, είτε μέσω σύνδεσης αποσφαλμάτωσης, είτε αρχείου ενημέρωσης, είτε αντιγράφου ασφαλείας, είτε επιστρεφόμενης μονάδας. Η κρυπτογράφηση flash ανεβάζει το κόστος μιας άμεσης εξαγωγής, και η τεκμηρίωση του ESP-IDF περιγράφει τι καλύπτει η λειτουργία για ένα δεδομένο εξάρτημα και διαμόρφωση. Δεν κάνει το κλειδί μη εξαγώγιμο σε κάθε μοντέλο επίθεσης και δεν κάνει τίποτα για την περίπτωση της συσκευής στο χέρι. Αντιμετωπίστε το ως ένα στρώμα που αλλάζει το κόστος, όχι ως την απάντηση.
Διαβάστε την τεκμηρίωση της πλατφόρμας για το ακριβές τσιπ και τη διαμόρφωσή σας πριν διεκδικήσετε μια ιδιότητα σε μια ανασκόπηση σχεδίασης.
Συνθήκη τρίτη: επαναχρήση σε όλο τον στόλο
Ένα κλειδί για μια παραγωγή σημαίνει ότι κάθε μονάδα μοιράζεται μία ταυτότητα. Ο διακομιστής δεν μπορεί να τις ξεχωρίσει στα αρχεία καταγραφής, δεν μπορεί να ανακαλέσει μία χωρίς να ανακαλέσει όλες, και δεν μπορεί να ξεχωρίσει ένα κλώνο από ένα γνήσιο. Τα κλειδιά ανά συσκευή λύνουν και τα τρία, με κόστος ένα βήμα εγγραφής και μια αντιστοίχιση σειριακού σε δημόσιο κλειδί. Αυτή η αντιστοίχιση είναι το περιουσιακό στοιχείο που κάνει την ανάκληση αλλαγή μιας γραμμής αντί για επαναπρογραμματισμό όλου του στόλου.
Αν ο στόλος είναι πέντε μονάδες σε έναν πάγκο, το κοινό κλειδί μπορεί να είναι λογικό αντάλλαγμα. Αν είναι πεντακόσιες στο πεδίο, δεν είναι καθόλου αντάλλαγμα.
Το μοτίβο εγγραφής που κάνει τα κλειδιά ανά συσκευή πρακτικά
Δημιουργήστε το ζεύγος κλειδιών στη συσκευή κατά την πρώτη εκκίνηση, κρατήστε το ιδιωτικό μισό σε προστατευμένη μη πτητική μνήμη και στείλτε μόνο το δημόσιο κλειδί σε μια υπηρεσία εγγραφής που αναθέτει διεύθυνση και γράφει την εγγραφή ομοτίμου. Επαληθεύστε την απάντηση εγγραφής, αλλιώς ένας επιτιθέμενος στο τοπικό δίκτυο μπορεί να καταχωρίσει το δικό του κλειδί στον λογαριασμό σας. Μην εκτυπώνετε ποτέ το ιδιωτικό κλειδί στην σειριακή κονσόλα κατά την προετοιμασία. Καταγράψτε τον σειριακό αριθμό της συσκευής δίπλα στο δημόσιο κλειδί, ώστε μια χαμένη μονάδα να αντιστοιχεί σε ακριβώς μία εγγραφή ομοτίμου.
Είναι μια μικρή υπηρεσία, και είναι η διαφορά ανάμεσα σε έναν στόλο που μπορείτε να ελέγξετε και σε έναν στόλο που μπορείτε μόνο να ξαναγράψετε.
Χρόνος, τελικά σημεία και η απόφαση
Το παράδειγμα συγχρονίζει τον χρόνο πριν ξεκινήσει το τούνελ, και αυτό μετράει πέρα από το TLS: οι χειραψίες του WireGuard φέρουν χρονική σφραγίδα για προστασία από επανάληψη, οπότε μια συσκευή που ξεκινά με λάθος ρολόι μπορεί να δει χειραψίες απορριπτόμενες. Το τελικό σημείο είναι όνομα κεντρικού υπολογιστή, που βάζει το DNS στη διαδρομή εμπιστοσύνης παρόλο που το δημόσιο κλειδί του διακομιστή εξακολουθεί να πιστοποιεί το ομότιμο. Μια λάθος διεύθυνση σπαταλά προσπάθειες και αποκαλύπτει πότε η συσκευή είναι συνδεδεμένη. Χειριστείτε και τα δύο πριν διαφωνήσετε για το κλειδί.
Μετά αποφασίστε: κοινό κλειδί μόνο όσο η κατοχή ελέγχεται και ο στόλος είναι μικρός, κλειδιά ανά συσκευή μόλις πάψει να ισχύει το ένα από τα δύο.