Τεχνολογίες
KeyMeld: Γενικό κλειδί για iPhone και Android και Αρχιτεκτονική Zero Vault για το έργο
Το KeyMeld από μόνο του δεν αποτελεί το Zero Vault. Πρόκειται για μια ανεξάρτητη SaaS υπηρεσία που βοηθά τον προγραμματιστή να απομακρύνει το κοινό κλειδί από το backend του προϊόντος, να ενοποιήσει τους πελάτες iOS και Android και να δημιουργήσει μια αρχιτεκτονική τύπου Zero Vault για την εφαρμογή του.
Οι εφαρμογές πολλαπλών πλατφορμών αντιμετωπίζουν ένα πρόβλημα που ο χρήστης συχνά δεν αντιλαμβάνεται. Στην οθόνη βλέπει έναν λογαριασμό και αναμένει την ίδια λειτουργικότητα σε κάθε συσκευή. Όμως, το iPhone και το Android χρησιμοποιούν διαφορετικά συστήματα προστασίας και διαχειρίζονται διαφορετικά τους τοπικούς κωδικούς.
Στο iPhone, η εφαρμογή μπορεί να προστατεύει τον τοπικό κωδικό με τα μέσα του Apple Keychain. Στο Android, χρησιμοποιείται το Android Keystore. Αυτές οι τεχνολογίες έχουν σκοπό να διατηρούν ευαίσθητους κωδικούς σε ασφαλές περιβάλλον, αλλά δεν είναι εναλλάξιμες.
Για τον χρήστη, αυτό δεν έχει σημασία. Θέλει απλώς να ανοίξει την εφαρμογή στο iPhone και μετά να την εγκαταστήσει στο Android και να συνεχίσει την εργασία με τα ίδια ασφαλή δεδομένα.
Ο προγραμματιστής αντιμετωπίζει ένα αρχιτεκτονικό ερώτημα: πώς να οργανώσει ένα κοινό σημείο πρόσβασης σε δύο πλατφόρμες, χωρίς να μεταφέρει τοπικούς κωδικούς συσκευών και χωρίς να αποθηκεύει αντίγραφα στη βάση δεδομένων του backend;
Αναλύοντας το KeyMeld, διαπίστωσα ότι η υπηρεσία προσφέρει έναν ξεχωριστό, γενικό κωδικό για αυτόν το σκοπό, χωρίς να επεμβαίνει στην εσωτερική προστασία του iOS και του Android.
Κοινό κλειδί για διαφορετικές πλατφόρμες
Ο τοπικός κωδικός συσκευής σχετίζεται με συγκεκριμένο τηλέφωνο και προστατεύεται από τα μέσα της αντίστοιχης λειτουργικού συστήματος. Παραμένει σε ασφαλές περιβάλλον εντός της συσκευής και προορίζεται να μην μετακινηθεί εύκολα σε άλλες συσκευές.
Το γενικό κλειδί του KeyMeld αποτελεί διαφορετική οντότητα. Δημιουργείται για συγκεκριμένο έργο, λογαριασμό και ασφαλές χώρο και γίνεται κοινό για εξουσιοδοτημένους πελάτες σε διαφορετικές πλατφόρμες.
Η υπηρεσία δεν παίρνει το κλειδί από το iPhone, δεν το μεταφέρει στο Android και δεν προσπαθεί να τα ενώσει σε ένα. Η προστασία της πλατφόρμας παραμένει ανεξάρτητη, και η εφαρμογή λαμβάνει ένα κοινό επίπεδο προσβασιμότητας για το έργο της.
Αυτό είναι που καθορίζει τον αρχιτεκτονικό ρόλο του KeyMeld: δεν κάνει το iOS και το Android όμοια, ούτε αντικαθιστά τα εσωτερικά τους μηχανισμούς. Προσθέτει ένα κοινό επίπεδο εργασίας με το γενικό κλειδί, απαλλάσσοντας το έργο από την ανάγκη διαχείρισης μεταξύπλατφορμικής έγκρισής του.
Για διάφορα προϊόντα και λογαριασμούς δημιουργούνται ανεξάρτητα περιβάλλοντα κλειδιών. Έτσι, κάθε έργο διατηρεί την δική του περιοχή πρόσβασης, και πολλοί λογαριασμοί σε μία συσκευή παραμένουν διαχωρισμένοι.
Το Zero Vault ανήκει στο έργο
Είναι σημαντικό να διευκρινίσουμε: το Zero Vault δεν είναι το όνομα του ίδιου του KeyMeld. Είναι ένα αρχιτεκτονικό μοντέλο που μπορεί να οικοδομηθεί από ένα συνδεδεμένο προϊόν.
Το KeyMeld λειτουργεί ως ανεξάρτητη SaaS υπηρεσία. Δεν εγκαθίσταται εντός του backend του εφαρμογής nor δεν τοποθετείται δίπλα στη βάση δεδομένων του έργου ως άλλο λογισμικό κοντά. Το γενικό κλειδί διαχειρίζεται από ένα ξεχωριστό container SaaS του KeyMeld, εκτός του backend του προϊόντος.
Για να διατηρηθεί αυτό το μοντέλο, τα όρια εμπιστοσύνης μεταξύ έργου και KeyMeld πρέπει να παραμένουν ανεξάρτητα. Το backend και η εξωτερική υπηρεσία χρησιμοποιούν διαφορετικά διαπιστευτήρια, δικαιώματα πρόσβασης και μηχανισμούς διαχείρισης.
Αυτός είναι και ο ορισμός του Zero Vault: η διακομιστική βάση του έργου δεν αποθηκεύει το κλειδί από το πελατειακό ασφαλές αποθηκευτικό χώρο.
Το Zero Vault δεν σημαίνει ότι το backend του έργου δεν αποθηκεύει τίποτα. Ο λογαριασμός, οι ρυθμίσεις, τα επιχειρηματικά δεδομένα και ό,τι άλλο είναι απαραίτητο για τη λειτουργία της εφαρμογής παραμένουν. Αλλά το γενικό κλειδί δεν βρίσκεται εκεί.
Η υποκλοπή της διακομιστικής βάσης δεν αποκαλύπτει αυτόματα το γενικό κλειδί, επειδή δεν αποθηκεύεται μαζί με τους λογαριασμούς και άλλα δεδομένα. Ωστόσο, αυτή η αρχιτεκτονική δεν εγγυάται ότι κάθε σφάλμα σε κάποιο μέρος της υποδομής γίνεται ανεπτυγμένο. Λύνει το συγκεκριμένο πρόβλημα — αφού αφαιρεί το γενικό κλειδί από το πελατειακό αποθηκευτικό χώρο και το διαχωρίζει από το backend.
Ζωντανό σενάριο: ένας λογαριασμός σε iPhone και Android
Ας φανταστούμε μια εφαρμογή με τοπικά προστατευμένα δεδομένα. Θα μπορούσε να είναι ένας επαληθευτής, ένας εταιρικός πελάτης ή μία υπηρεσία που χρειάζεται να λειτουργεί με κρυπτογραφημένα δεδομένα άμεσα στη συσκευή.
Στο iPhone, η εφαρμογή προστατεύει τον τοπικό κωδικό με τα μέσα του iOS. Στο Android, χρησιμοποιείται το δικό του σύστημα προστασίας. Οι εσωτερικοί κωδικοί διαφέρουν, και αυτό είναι φυσιολογικό.
Χωρίς ξεχωριστό κοινό επίπεδο, ο προγραμματιστής θα έπρεπε να λύσει πώς να οργανώσει την πρόσβαση στα ίδια προστατευμένα δεδομένα και στις δύο πλατφόρμες. Η αποθήκευση στο πλαίσιο των πλατφορμών θα παραμένει διαφορετική, και το προϊόν θα έπρεπε να αναπτύξει μια χειροκίνητη σύνδεση αυτών των δύο υλοποιήσεων.
Μπορούσε να δημιουργήσει διαφορετικά σχήματα για iOS και Android, να προσπαθήσει να μεταφέρει χειροκίνητα τους τοπικούς κωδικούς ή να αποθηκεύσει αντίγραφα στον διακομιστή.
Το KeyMeld επιτρέπει να αποφευχθεί η μεταφορά τοπικών κωδικών και η αποθήκευσή τους σε αντίγραφα στον διακομιστή, προσθέτοντας ένα γενικό, κοινό κλειδί.
Ο πελάτης σε iPhone και ο πελάτης σε Android έχουν πρόσβαση στο ίδιο γενικό κλειδί εντός ενός εξουσιοδοτημένου έργου και λογαριασμού. Ταυτόχρονα, κάθε τηλέφωνο συνεχίζει να χρησιμοποιεί τα δικά του μέσα προστασίας.
Αυτό μοιάζει στον χρήστη με έναν και μόνο λογαριασμό σε διαφορετικές συσκευές. Δεν χρειάζεται να γνωρίζει ποιος μηχανισμός ισχύει στο iPhone και ποιος στο Android.
Όταν αλλάζει τηλέφωνο, δεν χρειάζεται να εξάγει τον τοπικό κωδικό από την παλιά συσκευή ή να δημιουργήσει ξεχωριστό ασφαλές αποθηκευτικό χώρο για τη νέα πλατφόρμα. Ο νέος πελάτης συνδέεται στο ίδιο έργο και λαμβάνει πρόσβαση στο ίδιο γενικό κλειδί.
Το backend συμμετέχει στην αυθεντοποίηση του αιτήματος, αλλά το γενικό κλειδί προορίζεται για τον εξουσιοδοτημένο πελάτη και δεν αποθηκεύεται στη βάση δεδομένων του προϊόντος.
Το ίδιο το KeyMeld δεν μεταφέρει τη βάση δεδομένων της εφαρμογής και δεν αντικαθιστά το σύστημα συγχρονισμού των εγγραφών. Ο στόχος του είναι συγκεκριμένος: να παρέχει στον πελάτη το κλειδί που χρειάζεται για την εργασία με τα ασφαλισμένα δεδομένα. Το περιεχόμενο του αποθηκευτικού χώρου και η ενημέρωσή του παραμένουν ευθύνη του ίδιου του προϊόντος.
Τρία διαφορετικοί τύποι κλειδιών και μυστικών
Για να μην μπερδεύουμε διαφορετικά μέρη της αρχιτεκτονικής, αρκεί να διακρίνουμε τρεις έννοιες.
Τοπικό κλειδί συσκευής ανήκει σε συγκεκριμένο τηλέφωνο και προστατεύεται από τα μέσα του iOS ή του Android.
Γενικό κλειδί χρησιμοποιείται από εξουσιοδοτημένους πελάτες ενός έργου και λογαριασμού. Αυτό συνδέει διαφορετικές πλατφόρμες σε επίπεδο προϊόντος.
Υπηρεσιακό μυστικό χρειάζεται το backend για ασφαλή αλληλεπίδραση με το KeyMeld. Δεν μεταδίδεται στην εφαρμογή κινητού ή στον browser.
Το υπηρεσιακό μυστικό και το γενικό κλειδί έχουν διαφορετικό ρόλο. Στην αρχιτεκτονική Zero Vault, το γενικό κλειδί δεν αποθηκεύεται στη βάση δεδομένων του προϊόντος δίπλα στα δεδομένα του backend.
Για τη λειτουργία του KeyMeld, δεν απαιτείται το όνομα, ο κωδικός πρόσβασης, το περιεχόμενο του TOTP ή το επιχειρηματικό περιεχόμενο των εγγραφών. Το σημαντικό για το service είναι η σύνδεση του έργου, του λογαριασμού και της άδειας του πελάτη να λάβει το γενικό κλειδί.
Το δικαίωμα πρόσβασης στον κωδικό παραμένει ελεγχόμενο
Η απόκτηση του γενικού κλειδιού δεν είναι αυτομάτως δικαίωμα κάθε πελάτη.
Εάν η συσκευή δεν θεωρείται πλέον αξιόπιστη, αλλάζει η κατάσταση του λογαριασμού ή η ομάδα ανακαλεί την πρόσβαση στο έργο, το KeyMeld μπορεί να σταματήσει περαιτέρω την παροχή του γενικού κλειδιού στον πελάτη αυτόν.
Είναι σημαντικό να μην εξάγουμε υπερβολικά συμπεράσματα. Αυτό δεν σημαίνει ότι διαγράφεται αυτόματα η τοπική αντίγραφο του κλειδιού. Πρόκειται για έλεγχο της περαιτέρω λήψης του και της σύνδεσης νέων πελατών.
Για τον χρήστη, αυτό σημαίνει ότι η σύνδεση νέων συσκευών και η διαχείριση της περαιτέρω πρόσβασής τους στο κλειδί εντάσσεται σε μία ενιαία λειτουργία.
Για τον προγραμματιστή, σημαίνει ότι η λογική αυτή δεν χρειάζεται να αναπτυχθεί αυτοτελώς για iOS και Android. Ωστόσο, η τελική αρχιτεκτονική Zero Vault εξαρτάται από το αν το έργο διατηρεί το γενικό κλειδί και αν διαχωρίζει την υποδομή του από το εξωτερικό SaaS κοντέινερ του KeyMeld.
Τι δεν κάνει το KeyMeld
Το KeyMeld δεν είναι διαχειριστής κωδικών και δεν αποθηκεύει εγγραφές TOTP των χρηστών. Δεν αποτελεί cloud βάση δεδομένων της εφαρμογής και δεν αντικαθιστά τον συγχρονισμό περιεχομένου της.
Δεν αντικαθιστά το Apple Keychain ή το Android Keystore. Παραμένει στα τοπικά μέσα των πλατφορμών και προσθέτει ένα γενικό επίπεδο για το προϊόν.
Δεν αποτελεί επίσης απαραίτητο υπηρεσία ταυτοποίησης χρηστών. Η ταυτοποίηση και αυθεντικοποίηση μπορεί να γίνεται από ξεχωριστό service, όπως το MeldID, ενώ το KeyMeld παρέχει απλώς το ενιαίο, γενικό κλειδί για τον εξουσιοδοτημένο πελάτη, χωρίς να το αποθηκεύει στο backend του προϊόντος.
Και τέλος, το KeyMeld δεν κάνει αυτομάτως Zero Vault. Παρέχει ένα εξωτερικό περιβάλλον για το γενικό κλειδί. Για να διατηρηθεί αυτή η αρχιτεκτονική, ο προγραμματιστής δεν χρειάζεται να αποθηκεύσει το γενικό κλειδί στη δική του βάση δεδομένων. Τα ανεξάρτητα trusted zones πρέπει να παραμένουν διαχωρισμένα.
Ποιος μπορεί να το χρειάζεται
Αυτή η προσέγγιση είναι ενδιαφέρουσα για εφαρμογές που λειτουργούν σε πολλαπλές πλατφόρμες και χρησιμοποιούν τοπικά ασφαλή δεδομένα.
Μπορεί να είναι αυτοι οι επαληθευτές, εταιρικές εφαρμογές, SaaS προϊόντα, υπηρεσίες με πολλαπλές συσκευές ή κάθε έργο όπου ένας λογαριασμός πρέπει να λειτουργεί ταυτόχρονα σε iPhone και Android.
Για τους προγραμματιστές, η αξία δεν έγκειται μόνο στη μείωση της πλατφορμικής λογικής. Το σημαντικό είναι ότι μπορούν να διαχωρίσουν την ευθύνη. Το backend του προϊόντος διαχειρίζεται τα δικά του δεδομένα, και το KeyMeld ως εξωτερική SaaS υπηρεσία παρέχει και διαχειρίζεται το γενικό κλειδί.
Μετά από μια πρώτη εξέταση του έργου, θα περιέγραφα το KeyMeld όχι ως ολοκληρωμένο Zero Vault, αλλά ως εργαλείο με το οποίο ο προγραμματιστής μπορεί να χτίσει μια τέτοια αρχιτεκτονική για το δικό του προϊόν.
Το iOS και το Android συνεχίζουν να χρησιμοποιούν τους δικούς τους μηχανισμούς προστασίας. Οι πελάτες λαμβάνουν κοινό, γενικό κλειδί. Και το backend, εφόσον δεν το κρατάει εντός του και διαχωρίζει την υποδομή του από το KeyMeld, δεν γίνεται ένα χρηματοκιβώτιο με το κλειδί του πελάτη.
Για τον χρήστη, αυτό σημαίνει ενιαία πρόσβαση σε διαφορετικές πλατφόρμες. Για τον προγραμματιστή — δυνατότητα να απομακρύνει το γενικό κλειδί από το backend. Και για το έργο στο σύνολο — αρχιτεκτονική Zero Vault, στην οποία ο διακομιστής της εφαρμογής δεν αποθηκεύει το κλειδί των ασφαλισμένων δεδομένων του πελάτη.
Περισσότερα για το έργο: KeyMeld