240 likes | 363 Views
Freenet: A Distributed Anonymous Information Storage and Retrieval System. Κοκκίνης Νίκος Κώνστα Λαμπρινή Μπουντουρόπουλος Νίκος Νικολαϊδου Παναγιώτα Παπαγεωργίου Χαρά. Freenet. T ι είναι το Freenet?
E N D
Freenet: A Distributed Anonymous Information Storage and Retrieval System Κοκκίνης Νίκος Κώνστα Λαμπρινή Μπουντουρόπουλος Νίκος Νικολαϊδου Παναγιώτα Παπαγεωργίου Χαρά
Freenet • Tι είναι το Freenet? • Freenet είναι μία P2P εφαρμογή η οποία παρέχει μια υπηρεσία για την αποθήκευση και ανάκτηση αρχείων ανώνυμα μέσω του Internet • Τα κλειδιά και τα δεδομένα αποθηκεύονται κρυπτογραφημένα • Χαρακτηριστικά • Τα αρχείακαταλήγουν να τοποθετούνται σε περιοχές του δικτύου στις οποίες γίνονται requested πιο συχνά • Τα δημοφιλή αρχείααντιγράφονται σε περισσότερα μέρη από τα λιγότερο δημοφιλή • Motivation • Privacy • Availability
Design Goals • Ανωνυμία για τους requesters και providers πληροφοριών • Προστασία της πληροφορίας από κακόβουλους χρήστες • Αποτελεσματική δυναμική αποθήκευση και δρομολόγηση της πληροφορίας • Αποκεντρικοποίηση των λειτουργιών του δικτύου • Δεν παρέχει • Permanent file storage • Ανωνυμία γενικά, μόνο για Freenet file transactions
Αρχιτεκτονική • Peer-to-peer δίκτυο, όπου όλοι οι peers είναι ισοδύναμοι • Κάθε κόμβος αποτελείται από • ένα τοπικό data store • έναδυναμικό routing table : σύνολο ζευγών <key,pointer>, όπου κάθε pointer δείχνει σε έναν κόμβο ο οποίος έχει ένα αντίγραφο του αρχείου που αντιστοιχεί στο κλειδί key • Κάθε κόμβος παρέχει στο δίκτυο το τοπικό του data-store συμβάλλοντας στην αύξηση του συνολικού αποθηκευτικού χώρου του δικτύου
Basic Model • Τα µηνύµατα δηµιουργούν µια αλυσίδα (proxy chain) καθώς ένα request προωθείται από κόµβο σε κόµβο • Στην proxy chain κάθε κόμβος γνωρίζει μόνο τον αμέσως προηγούμενο και αμέσως επόμενο γείτονα • Σε κάθε request ανατίθεται • Key του αρχείου που αναζητείται • Τυχαίο ID για την αποφυγή loops • Hops-to-live όριογια την αποφυγή τεράστιων αλυσίδων • Ένα request συνεχίζει να προωθείται μέχρι να ανακτηθεί το ζητούμενο αρχείοή να ξεπεραστεί το hops-to-live όριο • Το αποτέλεσμα αποτυχίας ή επιτυχίας ενός requests προωθείται στον αρχικό requestor προς τα πίσω περνώντας κάθε κόμβο της αλυσίδας
Key Based Searching • Σε κάθε αρχείο αντιστοιχεί ένα binary key • Τα κλειδιά δημιουργούνται με την SHA-1 hash function • Χρησιμοποιούνται τρεις τύποι files keys • Keyword-signed key (ΚSΚ) • Signed-subspace key (SSK) • Content-hash key (CHK) • Για να βρει κάποιος ένα αρχείο πρέπει να γνωρίζει το κλειδί του
Keyword-signed key (ΚSΚ) • Κατά την αποθήκευση ενός αρχείου δίνεται από τον χρήστη ένα περιγραφικό string, το οποίο χρησιμοποιείται για • Key generation String Public key + Private key • Kρυπτογράφηση • Για την ανάκτηση του αρχείου απο άλλους απαιτείται να γίνει publish μόνο το περιγραφικό user-defined string Hash Hash KSK signature
Signed-subspace key (SSK) • Παραγωγή τυχαίου ζεύγους public/private key που καθορίζει το namespace ID του χρήστη • Κατά την αποθήκευση ενός αρχείου δίνεται από τον χρήστη ένα περιγραφικό string • Για την δημιουργία Key • Encryption • Για την ανάκτηση του αρχείου απο άλλους απαιτούνται το string και το public key τα οποία γίνονται publish από τον χρήστη String Public Key Hash Hash XOR Hash SSK Key Private Key Signature
Content-hash key (CHK) • Δημιουργία μοναδικού κλειδιού κάνοντας hash τα περιεχόμενα του αρχείου • Το αρχείο κρυπτογραφείται από έναrandomly generated encryption key • Για την ανάκτηση του αρχείου από άλλους απαιτούνταιτο content hash key και ένα decryption key που γίνονται από τον χρήστη • Το CHK μπορεί να χρησιμοποιηθεί σε συνδυασμό με το SSK • Το αρχείο εισάγεται στο Freenet χρησιμοποιώντας ένα CHK • Το ίδιο CHK εισάγεται ως αρχείο (indirect file) χρησιμοποιώντας έναSSK • Η ανάκτηση αρχείου επιτυγχάνεται σε δύο βήματαδοθέντος του SSK SSK CHK File
Content-hash key (CHK) (cont.) • Updating files • Ο χρήστης κάνει publish την νέα version χρησιμοποιώντας ένα νέο διαφορετικό CHK • Εισαγωγή του νέου CHK σε ένα indirect αρχείο χρησιμοποιώντας το ίδιο SSK • Αντικατάσταση της παλιάς version του indirect αρχείου με την νέα, που περιέχει την τοποθεσία της νέας version του αρχείου • Οι παλιές versions του αρχείου συνεχίζουν να είναι διαθέσιμες μέσω των παλιών CHKs, που τους αντιστοιχούν για κάποιο διάστημα CHK old File’s old version SSK CHK new File’s new version
Content-hash key (CHK) (cont.) • Splitting του αρχείου σε τμήματα • Εισαγωγή κάθε τμήματος με διαφορετικό content hash key • Δημιουργία ενός indirect αρχείου με τις τοποθεσίες κάθε τμήματος του αρχείου Τμήμα1 CHK1 …. CΗΚn SSK … Τμήμαn
Retrieving data • Ο χρήστης στέλνει ένα request μήνυμα,που περιέχει το key του αρχείου που ψάχνει και μια τιμή hops-to-live, στον τοπικό κόμβο • Κάθε κόμβος που λαμβάνει ένα request • ελέγχει αν τo αρχείο είναι στο data store του και αν είναι το επιστρέφει μαζί με ένα μήνυμα ότι αυτός είναι ο data source • αν το hops-to-live έχει γίνει μηδέν ή ο κόμβος έχει ξαναδεί αυτό το request επιστρέφεται ένα failure message • διαφορετικά, το hops-to-live μειώνεται και ο κόμβος ψάχνει το κοντινότερο κλειδί στο routing table του και προωθεί το μήνυμα στον αντίστοιχο κόμβο, ο οποίος πραγματοποιεί την ίδια διαδικασία • Αν βρεθεί ένας κόμβος που έχει το αρχείο αυτός θα το επιστρέψει μέσω του request μονοπατιού και κάθε κόμβος στο μονοπάτι θα κάνει cache αντίγραφο του αρχείουκαι θα προσθέσει μια νέα εγγραφή στο routing table για το key του request και το data source του
Retrieving data (Cont.) • Ένας κόμβος μπορεί να αποφασίσει να αλλάξει το reply message παριστάνοντας τον ίδιο ως το data source προστατεύοντας το πραγματικό data source • Διαδοχικά requests για παρόμοια κλειδιά θα προωθηθούν στους ίδιους κόμβους • Failures • Αν ένας κόμβος δεν μπορεί να προωθήσει ένα request στον downstream node πρώτης επιλογής του, δοκιμάζει την δεύτερη επιλογή του κοκ. Αν κανένας κόμβος δεν έχει το αρχείο στέλνει ένα failure message στον upstream κόμβο (backtracking), ο οποίος ακολουθεί την ίδια διαδικασία • Αν ξεπεραστεί το hops-to-live όριο, ένα failure message επιστρέφεται στον αρχικό requestor
Storing data • Ο χρήστης υπολογίζει το binary file key και καθορίζει το hops-to-live και στέλνει ένα insert message στον τοπικό κόμβο • Το hops-to-live καθορίζει τον αριθμό των κόμβων στον οποίο θα αποθηκευτεί αρχικάτο αρχείο • Κάθε κόμβος που λαμβάνει ένα insert request • ελέγχει αν προκύπτει collision και αν υπάρχει ο χρήστης ενημερώνεται και προσπαθεί να κάνει insert το αρχείοχρησιμοποιώντας ένα διαφορετικό key • αν δεν υπάρχει collision,το hops-to-live μειώνεται και ο κόμβοςψάχνει το κοντινότερο κλειδί στο routing table του σε σχέση με αυτό που προτάθηκε, και προωθεί το insert message στον κόμβο που αντιστοιχεί σε αυτό το κλειδί • Όταν λήξει το όριο hops-to-live, ένα ‘all clear message’ αποστέλλεται στον αρχικό requestor και ο χρήστηςστέλνει τα data για να αποθηκευθούν • Τα data γίνονται cache σε κάθε κόμβο που έλαβε το insert request και εισάγεται μια καταχωρηση στο routing table κάθε κόμβου σχετίζοντας το file key με τον inserter
Data management • Πεπερασμένο disk space • Ωστόσο δεν υπάρχει περιορισμός στην ποσότητα των δεδομένων που μπορούν να εισάγουν οι publishers • Όταν πρέπει να εισαχθεί ένα νέο αρχείο στο data store και δεν υπάρχει χώρος αποθήκευσης τα Least Recently Used (LRU) αρχεία αποβάλλονται • Οι καταχωρήσεις των routing tables αντικαθίστανται χρησιμοποιώντας επίσης LRU πολιτική • Όλα τα αρχεία στο data store κάθε κόμβουκρυπτογραφούνται • Κανένας χρήστης ενός κόμβου δεν γνωρίζει τα περιεχόμενατων αρχείων που είναι αποθηκευμένα σε αυτόν τον κόμβο, ώστε ο κάτοχος ενός κόμβου να μην ευθύνεται για τα περιεχόμενα του data store του
Adding nodes • Ένας νέος κόμβος μπορεί να συνδεθεί στο δίκτυο ανακαλύπτοντας την διεύθυνση ενός η περισσότερων υπάρχοντων κόμβων • Οι νέοι κόμβοι πρέπει να ανακοινώσουν την παρουσία τους • Οι υπάρχοντες κόμβοι θέλουν να γνωρίζουνποια κλειδιά να αναθέσουν στους καινούριους κόμβους
Adding nodes (Cont.) • Διαδικασία εισαγωγής σε ένα Freenet System • Ο υποψήφιος κόμβος υπολογίζει ένα τυχαίο seed • Στέλνει ένα μήνυμα σε έναν υπάρχοντα κόμβο, που περιέχει την διεύθυνση του και ένα hash του seed • O κόμβος που δέχεται το μήνυμα παράγει ένα τυχαίο seed, το οποίο κάνει XOR με το hash που έλαβε και το αποτέλεσμα το κάνει ξανά hash, δημιουργώντας ένα commitment το οποίο προωθείταισε τυχαίο κόμβο του routing table του • Όταν το hops-to-live γίνει 0, όλοι οι κόμβοι αποκαλύπτουν τα seeds τους και όλα τα seeds γίνονται XOR για να παράγουν το key του νέου κόμβου και κάθε κόμβος προσθέτει μια entry για τον νέο κόμβο στο routing table του με αυτό το κλειδί
Small-world model • Κάθε κόμβος γνωρίζει τους φυσικούς γείτονές του κι ένα μικρό αριθμό από τυχαία επιλεγμένους μακρινούς κόμβους. • Αποτέλεσμα:Μικρή διάμετρος και μικρό routing distance. • Το μέσο μήκος μονοπατιού μειώνεται λογαριθμικά ως προς το μέγεθος του δικτύου. • Ο συντελεστής ομαδοποίησης είναι υψηλός.
Simulation Results • Όταν διακινείται μεγάλο φορτίο στο δίκτυο οι συχνές local caching λειτουργίες που προκαλούνται χαλάνε την ομαδοποίηση των keys μειώνοντας το hit-ratio και την αποτελεσματικότητα του Freenetrouting
Εφαρμογή στο Freenet • Enhanced clustering • Κάθε κόμβος x διαλέγει τυχαία ένα seed s(x). • Όταν ένα datastore είναι γεμάτο κι έρχεται ένα νέο αρχείο με κλειδί u (είτε από εισαγωγή, είτε από αναζήτηση) βρίσκεται το αρχείο με κλειδί v που είναι πιο μακριά από το seed. • Ισχύει • Αν Distance(u,seed)<=Distance(v,seed) • κάνουμε cache το u • αποβάλλουμε το v και • δημιουργούμε μία νέα εγγραφή για τον u στο routing table. • Αποτέλεσμα: Στο routing table δημιουργούνται κλειδιά για τους γείτονες που υπάρχουν γύρω από το seed του κόμβου.
Εφαρμογή στο Freenet (Cont.) • Enhanced clustering with random shortcuts • Αν Distance(u,seed)>Distance(v,seed) • κάνουμε και πάλι cache το u • αποβάλλουμε το v και • δημιουργούμε μία νέα εγγραφή στο routing table για το u με πιθανότητα p (συνήθως 0.03). • Αποτέλεσμα: Δημιουργία μερικών τυχαίων shortcuts.
LRU – Enhanced Clustering – Enhanced Clustering with shortcuts
LRU – Enhanced Clustering – Enhanced Clustering with shortcuts (Cont.)