Καλησπέρα, απο όσο έχω καταλάβει απο τη θεωρία της άσκησης για να αποκρυπτογραφήσουμε εναν αριθμό απο RSA δεν αρκεί απλά να έχουμε το ζεύγος (n,d) και να κάνουμε το (s^d)mod(n)? Αυτό κάνει και η rsa-convert απλα για λίστες, αρα αμα δώσουμε στην rsa-convert το key (n,d) θεωρητικά θα μας κάνει αποκρυπτογράφηση? Προφανως και κάπου είμαι λάθος αλλα δεν μπορώ να καταλάβω που. Έτρεξα και τον έτοιμο κώδικα της rsa-convert και είδα οτι το πρώτο αποτέλεσμα βγαίνει σωστα
Αυτό που λες το κάνει η RSA-transform και όχι η convert! Η convert είναι πιο περίπλοκη και παρακάτω ακολουθεί κι εμένα η απορία μου για την convert.
Εφοσον η RSA-transform δεχεται σαν ορισμα ενα number και ενα key , γιατι οταν την καλει στην RSA-convert της δινει ορισμα (modulo (- (car l) sum) n), καταλαβαινω γιατι αφαιρει το sum αλλα γιατι modulo n ?
Όταν η rsa-convert καλεί την RSA-transform της δίνει όντως ένα όρισμα number και ένα όρισμα key (φαντάζομαι το public key).
μέσα στην convert δηλαδή καλείται έτσι:
(RSA-transform
(modulo (- (car l) sum) n) key)
Εδώ δηλαδή το πρώτο όρισμα number είναι ολόκληρο το
(modulo (- (car l) sum) n)και το δεύτερο όρισμα key είναι προφανώς το
key Τώρα γιατί χρησιμοποιεί και sum και modulo αυτό προέρχεται από την εκφώνηση η οποία λέει:
"κρυπτογραφούμε τον πρώτο αριθμό, τον αφαιρούμε από το δεύτερο αριθμό (modulo n) και κρυπτογραφούμε το αποτέλεσμα, και ούτω καθεξής, έτσι ώστε κάθε αριθμός στην τελική λίστα να εξαρτάται όλους τους προηγούμενους"
Και εδώ είναι και η απορία μου:
Εν τέλει η rsa-convert επιστρέφει ένα pair με δύο αριθμούς εκ των οποίων απ ότι καταλαβαίνω ο πρώτος είναι το transform του προτελευταίου iteration και ο δεύτερος το transform του τελευταίου iteration.
Οπότε όταν θέλουμε να κάνουμε unconvert επομένως την αντίστροφη διαδικασία (σωστα?) κινούμαστε ακριβώς ανάποδα. Δηλαδή πρώτα κάνουμε αποκρυπτογράφηση του τελευτίου αριθμού με το private key το οποίο θα μας επιστρέψει ότι είχε μέσα η κρυπτογράφηση. Άρα (modulo (- (car l) sum) n) σωστα;;;
Το sum το γνωρίζουμε από τον πρώτο αριθμό του pair (δηλαδή το x του προταλευταίου iteration) και θέλουμε να βρούμε το l (δηλαδή το τελευταίο στοιχείο της λίστας όταν είμαστε στην πρώτη επανάληψη της unconvert). Το n το γνωρίζουμε και αυτό αφού είναι το n του public key (η και του private key).
Για να βρούμε λοιπόν το l δεν πρέπει να κάνουμε
αντίστροφο modulo με δεδομένα τον αριθμό που έχουμε και το n?
Έχουμε δηλαδή [
(- (car l) sum) modulo n] με γνωστό το n και το αποτέλεσμα...
Και αν ναι πώς κάνουμε το αντρίστροφο modulo?? προσπαθώ με την (invert-modulo) αλλά δεν μου δουλεύει;
Εσείς πως το κάνατε;
Mr. Robot δωσε ενα hint αφού το κατάφερες...
Edit: pair ήταν επειδή δοκίμαζα για δυο αριθμούς. Για περισσότερους είναι list. Η ερώτηση παραμένει η ίδια