Ένας password manager που ούτε εγώ, που τον έφτιαξα, δεν μπορώ να ξεκλειδώσω
Zero-knowledge κρυπτογράφηση στην πράξη: πώς δουλεύει το Vaultly, γιατί ο server αποθηκεύει μόνο κρυπτογραφημένα δεδομένα και τι σημαίνει αυτό για την ασφάλειά σας.
Σε αυτό το άρθρο· 6 ενότητες
Οι κωδικοί μας είναι τα πιο ευαίσθητα δεδομένα που έχουμε. Με έναν κωδικό email κάποιος μπορεί να αλλάξει όλους τους υπόλοιπους. Γι’ αυτό, όταν έφτιαξα το Vaultly, έθεσα έναν κανόνα από την πρώτη μέρα: ο server δεν πρέπει να μπορεί να διαβάσει τίποτα, ακόμη κι αν κάποιος κλέψει ολόκληρη τη βάση δεδομένων.
Αυτό λέγεται αρχιτεκτονική zero-knowledge («μηδενικής γνώσης») και είναι πιο απλό να το καταλάβει κανείς απ’ ό,τι ακούγεται.
Το πρόβλημα με τους «κανονικούς» λογαριασμούς
Στις περισσότερες εφαρμογές ο server έχει πρόσβαση στα δεδομένα σας. Αποθηκεύει το email σας, τις σημειώσεις σας, τα αρχεία σας, και απλώς υπόσχεται να τα προστατεύει. Αν ο server παραβιαστεί ή κάποιος εργαζόμενος κάνει κατάχρηση, τα δεδομένα είναι εκτεθειμένα.
Για έναν διαχειριστή κωδικών αυτό είναι απαράδεκτο. Η λύση είναι η κρυπτογράφηση να γίνεται πάνω στη συσκευή σας, πριν φύγει οτιδήποτε προς το ίντερνετ.
Ένας κωδικός, δύο κλειδιά
Όταν πληκτρολογείτε τον κύριο κωδικό σας, η εφαρμογή δεν τον στέλνει πουθενά. Από αυτόν παράγει, μέσα στον browser σας, δύο ξεχωριστά κλειδιά.
Το κλειδί κρυπτογράφησης δεν φεύγει ποτέ από τη συσκευή. Με αυτό κλειδώνεται κάθε εγγραφή χωριστά, με AES-256-GCM, το ίδιο πρότυπο που χρησιμοποιούν τράπεζες και κυβερνήσεις. Το κλειδί σύνδεσης αποδεικνύει στον server ότι είστε εσείς. Ο server κρατά μόνο ένα HMAC του, ένα αποτύπωμα από το οποίο δεν μπορεί να βρει ούτε τον κωδικό σας ούτε το κλειδί κρυπτογράφησης.
Ο server, λοιπόν, αποθηκεύει μόνο κρυπτογραφημένα «κουτιά» που δεν μπορεί να ανοίξει. Αν τα κλέψει κάποιος, έχει στα χέρια του θόρυβο.
Πού γίνεται η κρυπτογράφηση
- Πληκτρολογείτε τον κύριο κωδικόΔεν στέλνεται πουθενά.
- Ο browser παράγει δύο κλειδιάΤο κλειδί κρυπτογράφησης κλειδώνει κάθε εγγραφή με AES-256-GCM και δεν φεύγει ποτέ από τη συσκευή.
- Ο server παίρνει μόνοκρυπτογραφημένα «κουτιά» και ένα HMAC του κλειδιού σύνδεσης.
Το Argon2id κάνει το μάντεμα ακριβό
Ο αδύναμος κρίκος σε κάθε τέτοιο σύστημα είναι ο ίδιος ο κύριος κωδικός. Αν κάποιος αποκτήσει τα κρυπτογραφημένα δεδομένα, θα προσπαθήσει να τον μαντέψει δοκιμάζοντας δισεκατομμύρια συνδυασμούς.
Γι’ αυτό τα κλειδιά παράγονται με το Argon2id, τον αλγόριθμο που κέρδισε τον διεθνή διαγωνισμό Password Hashing Competition. Στο Vaultly είναι ρυθμισμένο να χρειάζεται 64 MiB μνήμης για κάθε δοκιμή. Για εσάς αυτό σημαίνει μια στιγμιαία καθυστέρηση στη σύνδεση. Για κάποιον που δοκιμάζει δισεκατομμύρια κωδικούς, σημαίνει τεράστιο κόστος σε υλικό και χρόνο.
Το Argon2id τρέχει μέσα στον browser χάρη στο WebAssembly, ώστε να είναι γρήγορο χωρίς να βγαίνει τίποτα από τη συσκευή.
Πού αλλού μπορεί να διαρρεύσει μια εφαρμογή
Η κρυπτογράφηση είναι η βάση, αλλά μια εφαρμογή μπορεί να έχει τρύπες και αλλού. Γι’ αυτό το Vaultly έχει μερικές ακόμη δικλίδες:
- Οι συνεδρίες χρησιμοποιούν cookies
__Host-που δεν διαρρέουν σε άλλα subdomains, με προστασία CSRF και όρια αιτημάτων ενάντια σε επιθέσεις brute force. - Η σελίδα σύνδεσης απαντά με τον ίδιο τρόπο είτε υπάρχει ο λογαριασμός είτε όχι, ώστε να μην μπορεί κάποιος να μάθει ποια email είναι εγγεγραμμένα.
- Ένα αυστηρό Content Security Policy αφήνει τον browser να τρέχει μόνο κώδικα που έχω εγκρίνει, οπότε μια ενδεχόμενη επίθεση XSS δύσκολα μπορεί να κλέψει δεδομένα.
- Αν το επιλέξετε, μπορείτε να ελέγξετε αν ένας κωδικός σας έχει διαρρεύσει στο ίντερνετ χωρίς να στείλετε ποτέ τον ίδιο τον κωδικό. Ο έλεγχος γίνεται με k-anonymity: στέλνεται μόνο ένα μικρό κομμάτι από το αποτύπωμά του.
Δουλεύει και χωρίς ίντερνετ
Ασφάλεια δεν σημαίνει ταλαιπωρία. Το Vaultly εγκαθίσταται σαν εφαρμογή (PWA), κρατά τα δεδομένα κρυπτογραφημένα στη συσκευή και δουλεύει offline. Όταν βρει σύνδεση, συγχρονίζει τις αλλαγές, πάλι κρυπτογραφημένες. Η μεταφορά από άλλους διαχειριστές (1Password, Bitwarden, LastPass, KeePass, Proton Pass, Chrome, Firefox) γίνεται με ένα αρχείο.
Τεχνικά, η εφαρμογή είναι γραμμένη σε Svelte 5 και το backend τρέχει σε Cloudflare Workers με βάση D1, κοντά στον χρήστη και χωρίς μηχανήματα να συντηρώ.
Τι γίνεται αν διαρρεύσει η βάση;
Δεν χρειάζεται να φτιάχνετε password manager για να σας αφορά η ίδια λογική. Κάθε εφαρμογή που κρατά στοιχεία πελατών, όπως κρατήσεις, καρτέλες ή οικονομικά, πρέπει να σχεδιάζεται γύρω από αυτή την ερώτηση, και η σωστή απάντηση είναι «σχεδόν τίποτα».
Αυτή την προσέγγιση εφαρμόζω σε κάθε έργο: κανόνες πρόσβασης μέσα στη βάση, κρυπτογράφηση όπου χρειάζεται και συλλογή μόνο των δεδομένων που πραγματικά χρειάζονται.
Αν θέλετε να ελέγξω πόσο ασφαλής είναι η εφαρμογή ή η ιστοσελίδα σας, στείλτε μου μήνυμα. Η πρώτη κουβέντα είναι δωρεάν.
Σας φάνηκε χρήσιμο; Κοινοποιήστε το
Συνέχεια ανάγνωσης
- Το AI έγραψε την εφαρμογή σας. Ξέρετε τι ξέχασε να σας πει;Έλεγξα 105 δημόσιες εφαρμογές φτιαγμένες με AI και ο κώδικας έδειχνε εντάξει. Το πρόβλημα είναι όσα δεν φαίνονται: 6 πράγματα που δεν σας λέει το AI.
- 7 λάθη που διώχνουν πελάτες από την ιστοσελίδα σας (το 2ο το βλέπω σχεδόν παντού)Η ιστοσελίδα σας έχει επισκέψεις, αλλά το τηλέφωνο δεν χτυπάει; Τα 7 λάθη που βλέπω πιο συχνά σε ιστοσελίδες επιχειρήσεων και πώς διορθώνεται το καθένα.
Το έργο πίσω από το άρθρο

Διαχειριστής κωδικών όπου ούτε ο server μπορεί να διαβάσει τα δεδομένα σας.