Sagemath

Το αλγεβρικό υπολογιστικό σύστημα Sagemath είναι ανοιχτού κώδικα με Γενική Άδεια Δημόσιας Χρήσης GNU. Χρησιμοποιεί πολλά πακέτα ανοιχτού κώδικα όπως: NumPy, SciPy, matplotlib, Sympy, Maxima, GAP, FLINT, R και αρκετά ακόμη που έχουν γραφεί από την αρχή. Βασίζεται στην γλώσσα προγραμματισμού Python. To σύστημα Sage μπορεί να εγκατασταθεί σε Linux, Mac καθώς και σε MS windows.

 Μπορείτε αμέσως να αρχίσετε να χρησιμοποιείτε το sage cell (δεν χρειάζεται λογαριασμός). Αν θέλετε να ξεκινήσετε να δουλεύετε τα δικα σας project με το Sage, θα χρειαστείται έναν λογαριασμό στο cloud sage. Κάποιος με γνώση python θα βρει το Sage πολύ εύκολο, αφού στην ουσία το Sage μας δίνει ένα python shell. Πολλά παραδειγματα μπορείτε να βρείτε στο βιβλίο Sage for Undergraduates. Επίσης μπορείτε να συμβουλευτείτε το επίσημο tutorial. Μπορείτε να χρησιμοποιείτε το Sagemath σαν απλή αριθμομηχανή, π.χ. Μπορούμε να ορίσουμε δύο σύνολα και να βρούμε την ένωση (& τομή) τους Επίσης ο μέγιστος κοινός διαιρετής δύο ακεραίων Ενώ το ελάχιστο κοινό πολλαπλάσιο Για την παραγοντοποίηση ενός ακέραιου Για πολλαπλασιασμό πολυώνυμων ή για παραγοντοποίηση Για να λύσω (συμβολικά) εξισώσεις πρέπει να δηλώσω πρώτα τις μεταβλητές και κατόπιν να ορίσω ως προς ποια μεταβλητη θα λύθεί η εξισωση. Η μεταβλητή x είναι η μόνη μεταβλητή που δεν χρειάζεται να οριστεί. Για πιο όμορφη εκτύπωση μπορείτε να δώσετε Για να λύσω ένα γραμμικό σύστημα Αν θέλουμε να βρούμε προσεγγιστικές λύσεις εξισώσεων σ' ένα συγκεκριμένο διάστημα Για να ορίσω μια συνάρτηση απλά δίνω Για να υπολογίσω την τιμή της σ΄ ένα σήμειο Για δύο μεταβλητές και Ενώ Για τις δύο μετάβλητές Η σειρά Taylor Μπορώ να σχεδιάζω το γράφημα μιας συνάρτησης, π.χ. της παραβολής Επίσης για 3d γραφήματα, πρέπει να ορίσουμε την μεταβλητή y αλλά όχι την x (είναι by default ορισμένη στο Sagemath) Το SAGE έχει υλοποιημένους μερικούς κλασικούς αλγορίθμους κρυπτογράφησης όπως και κάποιους προχωρημένους αλγορίθμους που έχουν σχέση με τα S-boxes και τα Lattices. Όποιος θέλει μπορεί να τους βρει εδώ. Επίσης μπορεί να ενσωματώσει την βιβλιοθήκη pycrypto η οποία περιέχει τους περισσότερους αλγόριθμους κρυπτογράφησης αλλά και ασφαλείς συναρτήσεις κατακερματισμού. Η χρήση του SAGE στο πεδίο της κρυπτογραφίας γίνεται για εκπαιδευτικούς σκοπούς ώστε να γίνονται κατανοητοί οι αλγόριθμοι κρυπτογράφησης, για ερευνητικές δοκιμές των κρυπτό-συστημάτων σε διάφορες επιθέσεις και για προσομείωση της λειτουργίας του κρυπτό-συστήματος πριν την χρήση του. Η αναλυτική λειτουργία των αλγορίθμων που θα δοθούν ως παραδείγματα υπάρχει στο σχετικό βιβλίο. Αρχικά εισάγουμε την βιβλιοθήκη pycrypto και με την εντολή help μπορούμε να βλέπουμε την δομή της και αναλυτικές διευκρινήσεις για κάθε συνάρτηση. Κρυπτό-συστήματα ροής One Time Pad Χρειαζόμαστε ένα κλειδί ίδιου μήκους με το μήνυμα που θέλουμε να κρυπτογραφήσουμε, για να γίνει η πράξη XOR bit με bit. Η αναβάθμιση που προσφέρει ένα κρυπτό-σύστημα ροής (stream cipher) είναι ότι δεν έχουμε την ανάγκη να θυμόμαστε το κλειδί του OTP αλλά χρησιμοποιούμε ένα πολύ μικρότερο μέσα σε μια ψευδό τυχαία γεννήτρια αριθμών (PRG). RC4 Ο RC4 είναι ένα πολύ γνωστό κρυπτό-σύστημα ροής που χρησιμοποιήθηκε τα προηγούμενα χρόνια αλλά πλέον δεν πρέπει να χρησιμοποιείται, όπως και όλες οι παραλλαγές του. Ο RC4 παίρνει ένα κλειδί και το μεταλλάζει σε ένα μεγαλύτερο. Το μεγαλύτερο πλέον κλειδί το χρησιμοποιεί ως μια PRG γεννήτρια ψευδό τυχαίων αριθμών όπου για κάθε byte του μηνύματος προς κρυπτογράφηση διαλέγει ένα byte από την PRG και εκτελεί την πράξη XOR μεταξύ τους. Κρυπτό-συστήματα τμήματος DES Ο DES είναι ένα πολύ γνωστό κρυπτό-σύστημα τμήματος που χρησιμοποιήθηκε τα προηγούμενα χρόνια αλλά πλέον δεν πρέπει να χρησιμοποιείται, όπως και όλες οι παραλλαγές του. Το τμήμα του μηνύματος που εισέρχεται στον DES για κρυπτογράφηση δέχεται πρώτα μια μετάθεση των bits του και το αποτέλεσμα χωρίζεται σε δύο τμήματα. Στα δύο τμήματα εφαρμόζεται ένα σχήμα Feistel με 16 κύκλους. Το αποτέλεσμα που θα προκύψει ανακατεύεται με την αντίστροφη μετάθεση που έγινε στην αρχή και αυτό είναι η έξοδος του αλγορίθμου. AES Ο AES είναι ένας συμμετρικός αλγόριθμος τμήματος, χρησιμοποιεί κλειδιά μήκους 128, 192 και 256 bits. Δέχεται τμήμα μηνύματος 128 bits, αντί για το σχήμα Feistel που χρησιμοποιούσε ο DES χρησιμοποιεί SPN. Trapdoor Function - RSA Για ένα κρυπτοσύστημα δημόσιου κλειδιού χρειαζόμαστε τρεις αλγορίθμους. G {\displaystyle G} : Ένας πιθανοτικός που παράγει δύο κλειδιά ( p u b l i c k e y , s e c r e t k e y ) {\displaystyle (public\;key,secret\;key)} . F ( p k , ∗ ) {\displaystyle F(pk,*)} : Ένας ντετερμινιστικός αλγόριθμος που ορίζει μια συνάρτηση X → Y {\displaystyle X\rightarrow Y} F − 1 ( s k , ∗ ) {\displaystyle F^{-1}(sk,*)} : Ένας ντετερμινιστικός αλγόριθμος που ορίζει μια συνάρτηση Y → X {\displaystyle Y\rightarrow X} αντίστροφη της F ( p k , ∗ ) {\displaystyle F(pk,*)} . Στην περίπτωση του RSA παράγουμε δύο μεγάλους πρώτους αριθμούς p,q (τουλάχιστον 1024 bits). Θέτουμε Ν=pq. Επίσης διαλέγουμε έναν ακέραιο αριθμό 0<e<Ν και d {\displaystyle d} τέτοιo ώστε e d ≡ 1 ( m o d ϕ ( N ) ) . {\displaystyle ed\equiv 1(mod\ \phi (N)).} Η συνάρτηση y = F ( e , x ) = x e ( m o d N ) {\displaystyle y=F(e,x)=x^{e}(mod\ N)} ενώ η αντίστροφη είναι F − 1 ( d , y ) = y d ( m o d N ) {\displaystyle F^{-1}(d,y)=y^{d}(mod\ N)} . Μπορούμε κάνοντας χρήση του θεωρήματος τoυ Euler να αποδείξουμε ότι y d ≡ x ( m o d N ) . {\displaystyle y^{d}\equiv x(mod\ N).} Η ασφάλεια του RSA βασίζεται στην δυσκολία εύρεσης e-οστών ριζών mod N όταν δεν γνωρίζουμε την παραγοντοποίηση του Ν. Το πρόβλημα αυτό δεν έχει αποδειχτεί ότι είναι ισοδύναμο με το πρόβλημα της παραγοντοποίησης (RSA problem). Επίθεση Wiener στον RSA-textbook Η επίθεση του Wiener βασίζεται στα συνεχή κλάσματα και στο θεώρημα του Legendre, μπορεί να υλοποιηθεί σε χρόνο O(lne lnN) όταν το μυστικό κλειδί d είναι μικρότερο από ένα συγκεκριμένο αριθμό bit που σχετίζονται από το N. d < 1 3 N 1 4 {\displaystyle d<{\frac {1}{3}}N^{\frac {1}{4}}} .Αρχικά σε ένα φύλλο εργασίας του Sagemath ορίζουμε τις συναρτήσεις. DSA Ο αλγόριθμος DSA χρησιμοποιείται μόνο για ψηφιακή υπογραφή, η ασφάλεια του βασίζεται στον διακριτό λογάριθμο modp. Ένα σημαντικό σημείο ασφάλειας στην υλοποίηση του αλγορίθμου είναι ότι το εφήμερο κλειδί πρέπει να είναι διαφορετικό για κάθε υπογραφή. Επίσημη ιστοσελίδα wiki Tutorial για κρυπτογραφία