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

Το χρήσιμο ερώτημα είναι επομένως στενό και απαντήσιμο. Δημοσιεύει το έργο μια διαδικασία, και αντιστοιχεί σε αυτήν το δικό σας τεχνούργημα;

Πού μια κατασκευή παύει να είναι ντετερμινιστική

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

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

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

InputHow it driftsWhat pins it
SourceBranch moves after releaseCommit hash in the build metadata
ToolchainCompiler patch level differsContainer image digest
PackagingArchive order and mtimes varyNormalised archive settings

Τι ελέγχει πραγματικά η σύγκριση

Ένα ανεξάρτητο μέρος ξαναχτίζει στο δηλωμένο περιβάλλον και συγκρίνει την έξοδο με το δημοσιευμένο τεχνούργημα. Η ταυτότητα bit προς bit είναι η ισχυρή μορφή· ένα τεκμηριωμένο βήμα κανονικοποίησης, όπου μια καταγεγραμμένη διαφορά αντιστρέφεται και τα αποτελέσματα στη συνέχεια συμφωνούν, είναι η ασθενέστερη αλλά ακόμη χρήσιμη μορφή.

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

sha256sum wireguard-installer.msi
gpg --verify wireguard-installer.msi.sig wireguard-installer.msi

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

Γιατί μια απόκλιση δεν είναι απόδειξη παραβίασης

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

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

Η συμμετρία μετράει κι εδώ: μια αντιστοίχιση δεν αποδεικνύει ότι ο πηγαίος κώδικας είναι απαλλαγμένος από ελαττώματα, μόνο ότι το δυαδικό αρχείο αντιστοιχεί σε αυτόν. Ο καλά ελεγμένος κώδικας και ο αναπαραγώγιμος κώδικας είναι διαφορετικές ιδιότητες, και ένα έργο μπορεί να έχει τη μία χωρίς την άλλη.

Τι λέει ο ισχυρισμός για την υπηρεσία πίσω από την εφαρμογή

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

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

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

Σχετικά άρθρα