DedSec Project

Αναπαραγώγιμες εκδόσεις, αντίγραφα και επαναφορά — DedSec Project

Παραγωγή έκδοσης — αναπαραγώγιμο αρχείο και δυνατότητα επαναφοράς Σενάριο και κριτήρια επιτυχίας Συσκεύασε μία μικρή στατική ιστοσελίδα χωρίς διαδίκτυο σε ZIP με δύο δοκιμαστικά αρχεία…

Παραγωγή έκδοσης — αναπαραγώγιμο αρχείο και δυνατότητα επαναφοράς

Σενάριο και κριτήρια επιτυχίας

Συσκεύασε μία μικρή στατική ιστοσελίδα χωρίς διαδίκτυο σε ZIP με δύο δοκιμαστικά αρχεία. Ίδια δεδομένα, σειρά, ημερομηνίες και δικαιώματα πρέπει να παράγουν πανομοιότυπα byte σε επαναλαμβανόμενες εκτελέσεις του ίδιου περιβάλλοντος. Υπολόγισε SHA-256, άνοιξε ξανά το ZIP και σύγκρινε κάθε εγγραφή με το αρχικό περιεχόμενο. Η αλλοίωση πρέπει να γίνεται αντιληπτή πριν την δημοσίευση.

Εκτελέσιμο εργαστήριο

Αποθήκευσε ως 18_release.py και εκτέλεσε με Python 3 και την ενσωματωμένη βιβλιοθήκη. Τα δεδομένα είναι τεχνητά, χωρίς πρόσβαση σε προσωπικά αρχεία ή δίκτυο.

import hashlib, io, zipfile
FILES = {"docs/readme.txt":b"hello\n","site/index.html":b"<h1>Offline</h1>\n"}
def build():
    buffer = io.BytesIO()
    with zipfile.ZipFile(buffer,"w",compression=zipfile.ZIP_STORED) as z:
        for name, data in sorted(FILES.items()):
            info = zipfile.ZipInfo(name, date_time=(1980,1,1,0,0,0))
            info.compress_type = zipfile.ZIP_STORED
            info.external_attr = 0o100644 << 16
            z.writestr(info,data)
    return buffer.getvalue()
a,b = build(),build()
assert a == b
digest = hashlib.sha256(a).hexdigest()
with zipfile.ZipFile(io.BytesIO(a)) as archive:
    assert sorted(archive.namelist()) == sorted(FILES)
    assert all(archive.read(name)==data for name,data in FILES.items())
assert hashlib.sha256(a+b"x").hexdigest() != digest
print("PASS reproducible fixture ZIP:",digest[:12])

Τεχνική ερμηνεία

Κάθε μέλος ZIP περιέχει όνομα, χρονοσήμανση, δικαιώματα, ρυθμίσεις συμπίεσης και περιεχόμενο. Αν αλλάξουν τα μεταδεδομένα ή η σειρά, η αναπαραγωγιμότητα μπορεί να χαθεί παρότι η σελίδα δείχνει ίδια. Η άσκηση ορίζει σταθερά μεταδεδομένα και χρησιμοποιεί ZIP_STORED για να αποφεύγει διαφορές εκδόσεων συμπίεσης. Σε πραγματικά builds πρέπει να δεσμεύονται επίσης εκδόσεις εργαλείων, εξαρτήσεις και αρχεία εισόδου. Ίδια αποτυπώματα δεν αποδεικνύουν από μόνα τους ότι το λογισμικό είναι ασφαλές.

Περιορισμένες δοκιμές

Άλλαξε ένα byte στο δείγμα και κατάγραψε το νέο SHA-256. Άλλαξε τη σειρά εισαγωγής και βεβαιώσου ότι η ταξινόμηση δίνει ίδιο αποτέλεσμα. Αφαίρεσε τις σταθερές ημερομηνίες και παρατήρησε γιατί το αποτέλεσμα μπορεί να διαφέρει. Κράτησε προηγούμενη γνωστή σωστή έκδοση και δοκίμασε επαναφορά σε προσωρινό κατάλογο.

Διάγνωση

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