Skip to content

There are some python scripts for cracking testing Cryptosystems.

Notifications You must be signed in to change notification settings

LefterisXris/Cryptography

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 

Repository files navigation

Cryptography

This project is developed during the course of "Cryptography" in University of Macedonia.

I developed some python scripts, using Sage math cloud version.

There are two files. One for each Task that I had to complete.

In the Task 1 I had to work with classic Cryptosystems.

In the Task 2 I had to face more recent Cryptosystems.

#***************************************************

##TASK 1: ###Κρυπταλγόριθμος Μετατόπισης (Shift Cipher)
Υλοποιούνται οι παρακάτω συναρτήσεις.

shiftCipherEnc(pl, k): Η συνάρτηση υλοποιεί την κρυπτογράφηση με τον κρυπταλγόριθμο μετατόπισης
shiftCipherDec(ct,k): Η συνάρτηση υλοποιεί την αποκρυπτογράφηση με τον κρυπταλγόριθμο μετατόπισης

####Βοηθητικές συναρτήσεις str2lst(s): παίρνει ένα αλφαριθμητικό και επιστρέφει σε λίστα τις αριθμητικές τιμές των χαρακτήρων του αλφαριθμητικού.
lst2str(lst): αντίθετη λειτουργία της str2lst(s).

###---------------------------------------------------

###Κρυπταλγόριθμος Αντικατάστασης (Transposition Cipher)
Υλοποιούνται οι παρακάτω συναρτήσεις.

subCipherDec(c, key): Η subCipherDec αποκρυπτογραφεί το κείμενο c με βάση το κλειδί key.

####Βοηθητικές συναρτήσεις CreateKey(sorted_freq, engFreq): Η CreateKey, δοσμένης της λίστας με τις συχνότητες (ταξινομημένες) καθώς και με τα πιο συχνά γράμματα της αγγλικής, κάνει την αντιστοίχηση ώστε να παραχθεί το κλειδί.
replaceChar(li, old, new):Η replaceChar αντικαθιστά έναν χαρακτήρα (old) σε μια λίστα (li) με έναν άλλο χαρακτήρα (new)
findFreqs(freq): Η findFreqs, παίρνει ως είσοδο τις συχνότητες εμφάνισης τωνς γραμμάτων σε ένα κείμενο αλφαβητικά και τις ταξινομεί με φθίσουσα σειρά.

###---------------------------------------------------

###Ομοπαραλληλικός κρυπταλγόριθμος (Affine Cipher)
Υλοποιούνται οι παρακάτω συναρτήσεις.

affine_enc(m, key1, key2): Κρυπτογράφηση Ομοποραλληλικού κρυπταλγορίθμου.
affine_dec(c, key1, key2): Αποκρυπτογράφηση Ομοπαραλληλικού κρυπταλγορίθμου.
affine_number_enc(m, k1, k2, mod): Ορίζω ξανά την κρυπτογράφηση για αριθμούς.
affine_number_dec(c, k1, k2, mod): Ορίζω ξανά την αποκρυπτογράφηση για αριθμούς.

####Βοηθητικές συναρτήσεις affine_analysis(plaintext, ciphertext): Λύση συστήματος εξισώσεων για εύρεση κλειδιών.
affine_analysis_num(p1, p2, c1, c2): Ορίζω ξανά την ανάλυση για αριθμούς.

###---------------------------------------------------

###Βάση εκφώνησης Ομοπαραλληλικός Κρυπταλγόριθμος (Custom Affine Cipher)
Υλοποιούνται οι παρακάτω συναρτήσεις.

custom_affine_enc(m, k1, k2, k3): Κρυπτογράφηση
custom_affine_dec(ct, k1, k2, k3): Αποκρυπτογράφηση

####Βοηθητικές συναρτήσεις check_b(b): Ελέγχει αν το b είναι σχετικά πρώτος με το 26. Στην ουσία αν κάνει για κλειδί.
custom_affine_analysis(plaintext, ciphertext): Ανάλυση κρυπτοσυστήματος για εύρεση πιθανών κλειδιών.

###---------------------------------------------------

###Κρυπταλγόριθμος Hill (Hill Cipher)
Υλοποιούνται οι παρακάτω συναρτήσεις.

Hill_enc(m, K): Η συνάρτηση υλοποιεί την κρυπτογράφηση με τον κρυπταλγόριθμο Hill.
Hill_dec(c, K): Η συνάρτηση υλοποιεί την αποκρυπτογράφηση με τον κρυπταλγόριθμο Hill.

####Βοηθητικές συναρτήσεις check_valid(K): Ελέγχει αν ο πίνακας K είναι αντιστρέψιμος, στην ουσία αν είναι δυνατό (πιθανό) κλειδί.

###---------------------------------------------------

###Κρυπταλγόριθμος γινομένου (Product Cipher)
Υλοποιούνται οι παρακάτω συναρτήσεις.

Ek1 (p, k): Δέχεται ως είσοδο plaintext (p) και key (k) και κάνει πράξη XOR μεταξύ τους.Επιστρέφει το αποτέλεσμα στο δεκαδικό.
Ek2(P): Κάνει permutation τα bit του P με βάση το (p4 p2 p6 p5 p3 p1) και επιστρέφει το αποτέλεσμα στο δεκαδικό.

###Η κρυπτογράφηση πρακτικά είναι το γινόμενο των δύο συναρτήσεων.

###---------------------------------------------------

###Κρυπτοσύστημα Pohlig - Hellman
Υλοποιείται η παρακάτω συνάρτηση.

PH(m, p, e): Η συνάρτηση προσομοιώνει το κρυπτοσύστημα Pohlig - Hellman. Κάνει αρχικά κωδικοποίηση, έπειτα κάνει κρυπτογράφηση, μετά βρίσκει τον αντίστροφο του κλειδιού, κάνει αποκρυπτογράφηση και τέλος αποκωδικοποίηση.

###---------------------------------------------------

###Συναρτήσεις για την Άσκηση 10

Euler(n):: Η συνάρτηση βρίσκει τους αριθμούς στο διάστημα (0,n) οι οποίοι είναι σχετικά πρώτοι με το n. Προσοχή δεν είναι ίδια με την έτοιμη συνάρτηση euler_phi(n) καθώς η έτοιμη επιστρέφει το πλήθος των αριθμών ενώ η δική μου επιστρέφει τους ίδιους τους αριθμούς.
checkEuler(n): Αυτή είναι ακριβώς ίδια με την έτοιμη euler_phi(n).
find4Sols(n): Η συνάρτηση ψάχνει τέσσερις αριθμούς για τους οποίους το φ(n) τους να ισούται με 16. Τυπώνει τους αριθμούς αυτούς.
Omada(n, g): Η συνάρτηση υπολογίζει την ομάδα με γεννήτορα το g, στο Zn. Επιστρέφει την ομάδα.

#***************************************************

##TASK 2: ###Κρυπτοσύστημα RSA
Υλοποιούνται οι παρακάτω συναρτήσεις.

rsa_enc(m, e, n): Η συνάρτηση υλοποιεί την κρυπτογράφηση με τον κρυπταλγόριθμο RSA. Δέχεται ως είσοδο το μήνυμα m και το δημόσιο κλειδί e,n και επιστρέφει το κρυπτοκείμενο.
rsa_dec(c, d, n): Η συνάρτηση υλοποιεί την αποκρυπτογράφηση με τον κρυπταλγόριθμο RSA. Δέχεται ως είσοδο το κρυπτοκείμενο c, το ιδιωτικό κλειδί d και το modulus n και επιστρέφει το απλό κείμενο.

####Βοηθητικές συναρτήσεις keygen(bits): Δημιουργεί κλειδιά RSA, δέχεται ως είσοδο το πλήθος των bits των κλειδιών (με τιμές στο διάστημα [512,1024]) και επιστρέφει τα κλειδιά: δημόσιο και ιδιωτικό.
str2num(s): Υλοποιεί την λειτουργία της κωδικοποίησης βάση του εκτεταμένου ASCII. Δέχεται ως είσοδο ένα κείμενο s και επιστρέφει έναν μεγάλο ακέραιο.
num2str(n): Υλοποιεί την λειτουργία αποκωδικοποίησης βάση του εκτεταμένου ASCII. Δέχεται ως είσοδο έναν μεγάλο ακέραιο n και επιστρέφει το κείμενο στο οποίο αντιστοιχεί.

###---------------------------------------------------

###Κινέζικο Θεώρημα Υπολοίπων (CRT)
Υλοποιείται η παρακάτω συνάρτηση.

rsa_decrt(c, d, p, q):: Επιταχύνεται η αποκρυπτογράφηση με τον κρυπταλγόριθμο RSA. δέχεται ως είσοδο το κρυπτοκείμενο c, το ιδιωτικό κλειδί d και τους πρώτους p,q και επιστρέφει το απλό κείμενο.

###---------------------------------------------------

###Επίθεση κοινού modulus
Υλοποιείται η παρακάτω συνάρτηση.

crack_rsa_comoda(p,q,e1,e2,c1,c2): Προσομοιώνει μια επίθεση κοινού modulus.

###---------------------------------------------------

###Ανταλλαγή κλειδιών Diffie-Hellman
Υλοποιούνται οι παρακάτω συναρτήσεις.

public_private_pair(p, q, g, F): Παίρνει ως είσοδο την έξοδο της generate_parameters και επιστρέφει το ζευγάρι τιμών (X,x), όπου X = g^x mod p και x∈{2,…,p−2}.
generate_secret(X,y): Παίρνει ως είσοδο τη δημόσια πληροφορία του άλλου μέλους της επικοινωνίας κατά την ανταλλαγή DH και την ιδιωτικό εκθέτη και επιστρέφει το κοινό μυστικό κλειδί.

####Βοηθητικές συναρτήσεις generate_parameters(bits): Δέχεται ως είσοδο το πλήθος των bits ενός μεγάλου πρώτου p και επιστρέφει 4 τιμές: p, q, g και F. Θα πρέπει τα p και q να είναι πρώτοι αριθμοί τέτοιοι ώστε p=2∗q+1, g θα είναι ένας ακέραιος γεννήτορας του ℤp∗ και F ένα πεπερασμένο σώμα με p στοιχεία.

###---------------------------------------------------

###Πρωτόκολλο κρυπτογράφησης El Gamal
Χρησιμοποιούνται συναρτήσεις που φτιάχτηκαν πιο πριν και υλοποιείται η κρυπτογράφηση και η αποκρυπτογράφηση.

###---------------------------------------------------

###Το Πρόβλημα του Διακριτού Λογαρίθμου (DLP)
Δεν χρειάζονται κάποιες συναρτήσεις για την υλοποίηση.

###---------------------------------------------------

###Ανταλλαγή κλειδιών – ECDH
Υλοποιούνται οι παρακάτω συναρτήσεις.

ECDHKeyExchange(E, G): Η συνάρτηση προσομοιώνει την ανταλλαγή κλειδιών ECDH.

####Βοηθητικές συναρτήσεις computeXx(E, P): Υπολογίζει τον ιδιωτικό πολλαπλασιαστή και το δημόσιο κλειδί.
computeCommonSecretKey(Y, x): Υπολογίζει το κοινό μυστικό κλειδί.

###---------------------------------------------------

###Κρυπτοσύστημα ελλειπτικού El Gamal
Δεν χρειάζονται κάποιες συναρτήσεις για την υλοποίηση.

###---------------------------------------------------

###Κωδικοποίηση Koblitz και κρυπτοσύστημα ελλειπτικού El Gamal
Δεν χρειάζονται κάποιες συναρτήσεις για την υλοποίηση.

###---------------------------------------------------

###Ψηφιακές υπογραφές
Υλοποιείται η παρακάτω συνάρτηση.

checkDigSig(n, e, x, s): Η συνάρτηση ελέγχει αν η ψηφιακή υπογραφή είναι έγκυρη.

###---------------------------------------------------

#END

About

There are some python scripts for cracking testing Cryptosystems.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published