DedSec Project

Διαδικασία εκδόσεων, offline πακέτα και πραγματική επικύρωση — DedSec Project

Δημιουργία εκδόσεων — αναπαραγώγιμο δίγλωσσο ZIP Συμβόλαιο και σαφή όρια Η έκδοση μιας δίγλωσσης βιβλιοθήκης χωρίς σύνδεση απαιτεί αμετάβλητο SHA πηγής, ευρετήριο αρχείων, επαναλήψιμη…

Δημιουργία εκδόσεων — αναπαραγώγιμο δίγλωσσο ZIP

Συμβόλαιο και σαφή όρια

Η έκδοση μιας δίγλωσσης βιβλιοθήκης χωρίς σύνδεση απαιτεί αμετάβλητο SHA πηγής, ευρετήριο αρχείων, επαναλήψιμη κατασκευή, αποδείξεις ακεραιότητας και σχέδιο επαναφοράς. Πανομοιότυπα byte, στο ίδιο δηλωμένο περιβάλλον κατασκευής, πρέπει να δίνουν το ίδιο SHA-256. Το hash εντοπίζει διαφορές δεδομένων αλλά δεν πιστοποιεί μόνο του τον εκδότη. Ο έλεγχος CRC του ZIP δεν αποδεικνύει ότι κάθε μάθημα είναι σωστό ή ότι όλα τα παραδείγματα δουλεύουν σε Windows, Linux και Android.

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

Αποθήκευσε ως release_lab.py και εκτέλεσε python3 release_lab.py. Το πρόγραμμα δημιουργεί ZIP μόνο στη μνήμη, με ταξινομημένα ονόματα, σταθερές χρονικές σημάνσεις και δικαιώματα αρχείων. Η μέθοδος ZIP_STORED αποφεύγει διαφορές συμπίεσης από εκδόσεις zlib σε αυτό το μικρό πείραμα.

import hashlib
from io import BytesIO
from zipfile import ZIP_STORED, ZipFile, ZipInfo

def build(files):
    result = BytesIO()
    with ZipFile(result, 'w') as z:
        for name in sorted(files):
            if name.startswith('/') or '..' in name.split('/'):
                raise ValueError('unsafe archive path')
            info = ZipInfo(name, date_time=(1980, 1, 1, 0, 0, 0))
            info.compress_type = ZIP_STORED
            info.external_attr = 0o100644 << 16
            z.writestr(info, files[name])
    return result.getvalue()

files = {'English/lesson.md': b'# English\n',
         'Greek/lesson.md': '# Ελληνικά\n'.encode()}
first, second = build(files), build(dict(reversed(list(files.items()))))
assert first == second
expected = hashlib.sha256(first).hexdigest()
assert hashlib.sha256(second).hexdigest() == expected
with ZipFile(BytesIO(first)) as archive:
    assert archive.namelist() == sorted(files)
    assert archive.testzip() is None
    assert all(archive.read(name) == files[name] for name in files)
changed = build({**files, 'English/lesson.md': b'# Changed\n'})
assert hashlib.sha256(changed).hexdigest() != expected
print('PASS release: stable fixture, CRC, byte changes and SHA-256')

Πραγματικοί κανόνες δημοσίευσης

Ξεκίνα από συγκεκριμένο αμετάβλητο SHA commit και αναδημιούργησε τα ευρετήρια μετά τις αλλαγές στα Markdown, ώστε ιστοσελίδα και αρχεία να συμφωνούν. Σύγκρινε αγγλικά και ελληνικά μαθήματα με βάση σταθερή ταυτότητα και όχι απλώς τα μεταφρασμένα ονόματα. Δημιούργησε πακέτα σε χώρο προετοιμασίας, μέτρησε SHA-256 στα τελικά byte και επιβεβαίωσε το ληφθέν αρχείο με αξιόπιστο checksum. Το testzip ελέγχει πιθανή αλλοίωση μέσω CRC, όχι γνησιότητα. Κατάγραψε λειτουργικό, έκδοση διερμηνέα, μορφή συμπίεσης, εξαρτήσεις και ρυθμίσεις. Η πραγματική έκδοση χρειάζεται επιπλέον δοκιμές αποτυχίας, browser, offline χρήση και δυνατότητα επαναφοράς προηγούμενου λειτουργικού αρχείου.

Ασκήσεις επαληθευσιμότητας

  1. Άλλαξε ένα byte και επιβεβαίωσε διαφορετικό SHA-256. Άλλαξε μόνο τη σειρά εισαγωγής στοιχείων και επιβεβαίωσε ίδιο πακέτο.
  2. Εξήγαγε δύο τεχνητά ζευγάρια μαθημάτων με διαφορετικά ελληνικά και αγγλικά ονόματα. Σύγκρινε λογικά αναγνωριστικά και εντόπισε ελλείψεις.
  3. Προσομοίωσε διακοπή πριν από τη δημοσίευση. Αιτιολόγησε τη χρήση προσωρινού αρχείου και αντικατάστασης μόνο μετά τον έλεγχο.
  4. Δημιούργησε το πακέτο με δεύτερη έκδοση Python ή άλλο λειτουργικό και σύγκρινε τα digests. Δήλωσε ειλικρινά τις πλατφόρμες που δεν ελέγχθηκαν.

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

Πρόσθετη τεχνική ανάλυση

Η δέσμευση εξωτερικής εξάρτησης απαιτεί έλεγχο ζεύγους URL έκδοσης και digest ακριβών bytes. Ενημέρωσε και επανάφερε το ζεύγος μαζί. Hash που επανυπολογίζεται από κάθε τρέχουσα απόκριση απομακρυσμένου server δεν αποδεικνύει έγκριση συγκεκριμένης εξετασμένης έκδοσης.

Ακεραιότητα εξωτερικών πόρων και δέσμευση εκδόσεων