Αυτός ο ιστότοπος μεταφράζεται αυτόματα σε πολλές γλώσσες με λογισμικό που ανέπτυξε ο Kohei Koyanagi. Για μεγαλύτερη ακρίβεια, ανατρέξτε στο πρωτότυπο στα αγγλικά .

Πώς Προστατεύουμε τους Κωδικούς σας

Το Splync Δεν Αποθηκεύει Ποτέ τον Κωδικό σας σε Απλό Κείμενο

Στα προηγούμενα άρθρα, εξερευνήσαμε πώς το HTTPS προστατεύει τη διαδρομή μεταξύ της εφαρμογής σας και του διακομιστή μας και πώς το SSH ασφαλίζει τον ίδιο τον διακομιστή. Τώρα ήρθε η ώρα να δούμε μέσα στον διακομιστή — πώς το Splync κρατά τον κωδικό σας ασφαλή μόλις φτάσει εκεί. Εάν κάποιος αποκτήσει τον κωδικό σας, θα μπορούσε να συνδεθεί στον λογαριασμό σας και να έχει πρόσβαση σε ευαίσθητες πληροφορίες, συμπεριλαμβανομένων των αρχείων εξόδων σας. Γι' αυτό το Splync δεν αποθηκεύει ποτέ κωδικούς σε απλό κείμενο. Αντίθετα, κάθε κωδικός μετατρέπεται σε μια κατακερματισμένη έκδοση πριν αποθηκευτεί στη βάση δεδομένων. Τι σημαίνει αυτό; Ο κατακερματισμός είναι μια μονόδρομη μετατροπή — μόλις μετατραπεί, δεν μπορεί ποτέ να επιστρέψει στον αρχικό κωδικό. Αυτή η μέθοδος είναι στάνταρ στο διαδίκτυο, από τις τράπεζες έως τις μεγάλες υπηρεσίες cloud, παρόλα αυτά πολλοί δεν γνωρίζουν πώς λειτουργεί στην πραγματικότητα. Ας το εξερευνήσουμε μέσω μιας απλής καθημερινής αναλογίας.

Βασικά του Κατακερματισμού Ένας Μπλέντερ που Πάντα Ανακατεύει με τον Ίδιο Τρόπο

Για να καταλάβουμε πώς λειτουργεί η προστασία των κωδικών, ας ξεκινήσουμε με μια απλή μέθοδο κατακερματισμού που ονομάζεται SHA-256. Σκεφτείτε το σαν έναν μπλέντερ που πάντα ανακατεύει τα υλικά με τον ίδιο ακριβώς τρόπο. Αν βάλετε τον ίδιο κωδικό στον μπλέντερ και πατήσετε το κουμπί, θα έχετε πάντα την ίδια μοναδική "smoothie" — ένα ανακατεμένο μείγμα γραμμάτων και αριθμών. Το βασικό είναι ότι η διαδικασία δεν μπορεί να αναστραφεί. Όπως δεν μπορείτε να πάρετε ένα smoothie και να το διαχωρίσετε πίσω σε μπανάνα και γάλα, δεν μπορείτε να πάρετε το ανακατεμένο hash και να επαναφέρετε τον αρχικό κωδικό.

Παράδειγμα του SHA-256 Πώς να Επαληθεύσετε Κωδικούς Χωρίς να τους Ξέρετε

Το SHA-256 είναι ένας από τους πιο διαδεδομένους αλγόριθμους κατακερματισμού. Για παράδειγμα, κατακερματίζει τον κωδικό "splync1234" σε “9cdafa20d069ecfb202e5f0bc937c73071cc6cd85634cc2d95d30ddcf2a71d41”. Σε χιλιοστά του δευτερολέπτου, κάθε φορά που ένας υπάρχων χρήστης εισάγει έναν κωδικό σύνδεσης, το SHA-256 παράγει πάντα τον ίδιο κατακερματισμένο κωδικό. Η εφαρμογή απλά κατακερματίζει ξανά τον εισαχθέντα κωδικό και ελέγχει αν ταιριάζει με τον αποθηκευμένο κατακερματισμό. Σε καμία περίπτωση το σύστημα δεν γνωρίζει τον αρχικό κωδικό του χρήστη. Αλλά τι γίνεται αν ένας επιτιθέμενος προϋπολογίσει μια λίστα με κοινούς κωδικούς και τους κατακερματισμούς τους (γνωστό ως επίθεση rainbow table) για να μαντέψει γρήγορα τους κωδικούς των χρηστών; Αυτή η ανησυχία είναι πολύ πραγματική. Αυτός είναι ο λόγος που τα σύγχρονα συστήματα, συμπεριλαμβανομένου του Splync, δεν βασίζονται στο απλό SHA-256.

Το Splync Κατακερματίζει Κωδικούς με bcrypt — Ισχυρότερο από το SHA-256

Το bcrypt χρησιμοποιεί ένα τυχαίο salt ανά χρήστη και κωδικοποιεί αυτό το salt (και τον παράγοντα κόστους) απευθείας στη αποθηκευμένη συμβολοσειρά κατακερματισμού. Σκεφτείτε το bcrypt σαν έναν μπλέντερ με ένα μυστικό μπαχαρικό (salt) και ένα αργό μοτέρ (παράγοντας εργασίας) — κάνει κάθε μείγμα μοναδικό και πιο δύσκολο να αντιγραφεί. Επειδή το salt είναι 128 bits (≈3×10³⁸ πιθανότητες), ο ίδιος κωδικός μπορεί να αντιστοιχεί σε έναν αστρονομικά μεγάλο αριθμό διαφορετικών αποθηκευμένων κατακερματισμών. Αυτό καθιστά τα προϋπολογισμένα rainbow tables άχρηστα σε μεγάλη κλίμακα. Κατά τη σύνδεση, το Splync διαβάζει το salt και το κόστος από την αποθηκευμένη συμβολοσειρά bcrypt, εκτελεί ξανά το bcrypt στον εισαχθέντα κωδικό με αυτές τις παραμέτρους και συγκρίνει το αποτέλεσμα με τον αποθηκευμένο κατακερματισμό. Αν ταιριάζουν, ο κωδικός είναι σωστός — αλλά επειδή το bcrypt είναι σκόπιμα αργό και τα salts είναι μοναδικά, οι επιθέσεις brute-force γίνονται πολύ πιο κοστοβόρες για έναν επιτιθέμενο.

Ένα Απλό Παράδειγμα με bcrypt

Ας δούμε πώς φαίνεται αυτό στην πράξη. Αν κατακερματίσετε τον κωδικό "splync1234" με bcrypt (χρησιμοποιώντας κόστος 12), μπορεί να πάρετε μια συμβολοσειρά σαν αυτή: `$2b$12$gBeouKYdue9uvvuV0HtGgeVPymnrojMqP/wcRw28HFlGEGIQbyw7O`. Σε αυτή τη συμβολοσειρά bcrypt, το `$2b` δηλώνει την έκδοση του αλγορίθμου, το `$12` δείχνει τον παράγοντα κόστους (πόσες φορές επεξεργάζεται ο κωδικός), το `gBeouKYdue9uvvuV0HtGgeV` είναι το μοναδικό τυχαίο salt, και το `PymnrojMqP/wcRw28HFlGEGIQbyw7O` είναι ο τελικός κατακερματισμένος κωδικός. Επειδή το hash περιέχει το ίδιο το salt και το κόστος, το Splync μπορεί να αναπαράγει την ίδια διαδικασία κατακερματισμού για επαλήθευση, εξάγοντας αυτές τις τιμές από την αποθηκευμένη συμβολοσειρά και συγκρίνοντας το αποτέλεσμα. Από την άλλη, αν ένας επιτιθέμενος δεν γνωρίζει το salt και το κόστος, δεν μπορεί να κατασκευάσει ένα ενιαίο rainbow table που να λειτουργεί για κάθε χρήστη.

Οι Κατακερματισμένοι Κωδικοί Προσφέρουν Διπλή Προστασία

Αυτή η προσέγγιση έχει ένα ακόμα σημαντικό πλεονέκτημα. Επειδή το Splync ποτέ δεν αποθηκεύει απλούς κωδικούς, ακόμη και αν η βάση δεδομένων διαρρεύσει ή κλαπεί, οι χρήστες δεν κινδυνεύουν άμεσα. Οι επιτιθέμενοι δεν μπορούν να συνδεθούν απευθείας με τα κλεμμένα δεδομένα, επειδή έχουν μόνο ανακατεμένες συμβολοσειρές. Αυτός ο σχεδιασμός δίνει στους χρήστες μια επιπλέον στρώση προστασίας, πέρα από τις διασφαλίσεις που ήδη υπάρχουν γύρω από τον διακομιστή. Ο κατακερματισμός κωδικών δεν είναι μοναδικός στο Splync· είναι το στάνταρ στη βιομηχανία τεχνολογίας, χρησιμοποιούμενος από γίγαντες όπως η Google, η Apple και η Amazon. Το Splync έχει κατασκευαστεί πολύ ασφαλώς και θα γίνεται ακόμα πιο ασφαλές καθώς συνεχίζουμε να βελτιώνουμε την ασφάλεια με λειτουργίες όπως επαλήθευση email, προστασία brute-force και συνεχή παρακολούθηση.