ΜΕΛΕΤΗ ΚΑΙ ΕΦΑΡΜΟΓΗ ΤΩΝ ΑΛΓΟΡΙΘΜΩΝ ΚΡΥΠΤΟΓΡΑΦΗΣΗΣ

Σχετικά έγγραφα
ΑΣΥΜΜΕΤΡΗ ΚΡΥΠΤΟΓΡΑΦΙΑ

ΑΣΥΜΜΕΤΡΗ ΚΡΥΠΤΟΓΡΑΦΙΑ Lab 3

κρυπτογραϕία Ψηφιακή ασφάλεια και ιδιωτικότητα Γεώργιος Σπαθούλας Msc Πληροφορική και υπολογιστική βιοιατρική Πανεπιστήμιο Θεσσαλίας

8.3.4 Τεχνικές Ασφάλειας Συμμετρική Κρυπτογράφηση Ασυμμετρική Κρυπτογράφηση Ψηφιακές Υπογραφές

Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών Ασφάλεια Δεδομένων.

ΚΡΥΠΤΟΓΡΑΦΙΑ ΚΑΙ ΑΣΦΑΛΕΙΑ ΥΠΟΛΟΓΙΣΤΩΝ. Δ Εξάμηνο

Ασφάλεια Πληροφοριακών Συστημάτων

Κρυπτογραφία. Κεφάλαιο 4 Αλγόριθμοι Δημοσίου Κλειδιού (ή ασύμμετροι αλγόριθμοι)

Εισαγωγή στην επιστήμη της Πληροφορικής και των Τηλεπικοινωνιών. Aσφάλεια

Εισαγωγή στην επιστήμη της Πληροφορικής και των Τηλεπικοινωνιών. Aσφάλεια

Εισαγωγή στην επιστήμη της Πληροφορικής και των. Aσφάλεια

Ηλεκτρονικό εμπόριο. HE 7 Τεχνολογίες ασφάλειας

Εφαρμοσμένη Κρυπτογραφία Ι

Εισ. Στην ΠΛΗΡΟΦΟΡΙΚΗ. Διάλεξη 8 η. Βασίλης Στεφανής

Κρυπτογραφία ηµόσιου Κλειδιού Η µέθοδος RSA. Κασαπίδης Γεώργιος -Μαθηµατικός

Οι απειλές. Απόρρητο επικοινωνίας. Αρχές ασφάλειας δεδομένων. Απόρρητο (privacy) Μέσω κρυπτογράφησης

ΠΡΟΣΤΑΣΙΑ ΠΡΟΣΩΠΙΚΩΝ ΔΕΔΟΜΕΝΩΝ ΣΤΙΣ ΤΕΧΝΟΛΟΓΙΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΚΑΘΩΣ ΚΑΙ ΣΤΟ ΔΙΑΔΙΚΤΥΟ

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

Ασφάλεια Υπολογιστικών Συστηµάτων

Κρυπτογραφία. Κεφάλαιο 1 Γενική επισκόπηση

ΑΣΦΑΛΕΙΑ & ΔΙΑΧΕΙΡΙΣΗ ΔΙΚΤΥΩΝ(Θ)

ΚΡΥΠΤΟΓΡΑΦΙΑ ΚΑΙ ΑΣΦΑΛΕΙΑ ΥΠΟΛΟΓΙΣΤΩΝ Δ Εξάμηνο

Αλγόριθµοι δηµόσιου κλειδιού

ΚΡΥΠΤΟΓΡΑΦΙΑ Α. ΑΠΟ ΤΟ ΒΙΒΛΙΟ «Η ΦΥΣΗ ΚΑΙ Η ΔΥΝΑΜΗ ΤΩΝ ΜΑΘΗΜΑΤΙΚΩΝ»

Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων. Κρυπτογραφία. Κρυπτοαλγόριθμοι. Χρήστος Ξενάκης

ΚΡΥΠΤΟΓΡΑΦΙΑ ΚΑΙ ΑΣΦΑΛΕΙΑ ΥΠΟΛΟΓΙΣΤΩΝ. Δ Εξάμηνο

Πρόβληµα 2 (15 µονάδες)

Κρυπτογραφία. Εργαστηριακό μάθημα 1

Εργαστήριο Ασφάλεια Πληροφοριακών Συστημάτων. PGP (Pretty Good Privacy)

KΕΦΑΛΑΙΟ 5 ΨΗΦΙΑΚΕΣ ΥΠΟΓΡΑΦΕΣ

ΚΡΥΠΤΟΓΡΑΦΙΑ ΚΑΙ ΑΣΦΑΛΕΙΑ ΥΠΟΛΟΓΙΣΤΩΝ Δ Εξάμηνο. Ψηφιακή Υπογραφή και Αυθεντικοποίηση Μηνύματος

1. Τι είναι ακεραιότητα δεδομένων, με ποιους μηχανισμούς επιτυγχάνετε κ πότε θα χρησιμοποιούσατε τον καθένα εξ αυτών;

Εφαρμοσμένη Κρυπτογραφία Ι

Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων. Κρυπτογραφία. Ασύμμετρη Κρυπτογραφία. Χρήστος Ξενάκης

ΑΣΦΑΛΕΙΑ & ΔΙΑΧΕΙΡΙΣΗ ΔΙΚΤΥΩΝ(Θ)

Αριθμοθεωρητικοί Αλγόριθμοι

ΕΠΛ 674: Εργαστήριο 1 Ασφάλεια Επικοινωνιακών Συστημάτων - Κρυπτογραφία

Κρυπ Κρ το υπ γραφία Κρυπ Κρ το υπ λογίας

ΚΡΥΠΤΟΓΡΑΦΙΑ ΚΑΙ ΑΣΦΑΛΕΙΑ ΥΠΟΛΟΓΙΣΤΩΝ. Δ Εξάμηνο

Πρόβληµα 2 (12 µονάδες)

Threshold Cryptography Algorithms. Εργασία στα πλαίσια του μαθήματος Τεχνολογίες Υπολογιστικού Νέφους

Εφαρμοσμένη Κρυπτογραφία Ι

project RSA και Rabin-Williams

Εισαγωγή στην Κρυπτογραφία και τις Ψηφιακές Υπογραφές

ρ. Κ. Σ. Χειλάς, ίκτυα Η/Υ ΙΙΙ, Τ.Ε.Ι. Σερρών, 2007

Κεφάλαιο 2. Κρυπτογραφικά εργαλεία

Δραστηριότητες σχετικά με κρυπτογραφία και ελέγχους ισοτιμίας

Πρώτοι αριθμοί και κρυπτογραφικός αλγόριθμος RSA. Άριστος Χαραλάμπους, Δημήτρης Χαραλάμπους, Νικόλας Παρασκευάς

El Gamal Αλγόριθμος. Κώστας Λιμνιώτης Κρυπτογραφία - Εργαστηριακό μάθημα 7 2

Πληροφορική Ι. Μάθημα 10 ο Ασφάλεια. Τμήμα Χρηματοοικονομικής & Ελεγκτικής ΤΕΙ Ηπείρου Παράρτημα Πρέβεζας. Δρ. Γκόγκος Χρήστος

Ασφάλεια Στο Ηλεκτρονικό Εμπόριο. Λάζος Αλέξανδρος Α.Μ. 3530

Αννα Νταγιου ΑΕΜ: 432. Εξαμηνο 8. Ερώτηση 1. Πληκτρολογήστε την εντολή: openssl help Παρατηρήστε τις πληροφορίες που λαµβάνετε.

Κρυπτογραφία. Κωνσταντίνου Ελισάβετ

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 11η Διάλεξη: Ασφάλεια στο Web

Ασφάλεια Πληροφοριακών Συστηµάτων

Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων. Κρυπτογραφία. Εισαγωγή. Χρήστος Ξενάκης

Ασφάλεια Τηλεπικοινωνιακών Συστημάτων ΣΤΑΥΡΟΣ Ν ΝΙΚΟΛΟΠΟΥΛΟΣ 03 ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΚΡΥΠΤΟΛΟΓΙΑ

Κεφάλαιο 21. Κρυπτογραφία δημόσιου κλειδιού και πιστοποίηση ταυτότητας μηνυμάτων

Κρυπτογραφία. Εργαστηριακό μάθημα 10 (Επαναληπτικές ασκήσεις)

Κρυπτογραφικά Πρωτόκολλα

Κρυπτογραφία Δημόσιου Κλειδιού II Αλγόριθμος RSA

Ο Σ ο β ι ε τ ι κ ό ς Κ ρ υ π τ α λ γ ό ρ ι θ μ ο ς G O S T

Cryptography and Network Security Chapter 9. Fifth Edition by William Stallings

KEΦΑΛΑΙΟ 5 ΨΗΦΙΑΚΑ ΚΡΥΠΤΟΣΥΣΤΗΜΑΤΑ

Λειτουργικά Συστήματα (ΗΥ321)

ΤΙΤΛΟΣ ΕΡΕΥΝΗΤΙΚΗΣ ΕΚΘΕΣΗΣ ΚΩΔΙΚΕΣ. Υπόθεμα: «ΚΡΥΠΤΟΓΡΑΦΙΑ»

ΕΠΛ 674: Εργαστήριο 2 Ο απλοποιημένος αλγόριθμος κρυπτογράφησης S-DES

Ασφάλεια Πληροφοριακών Συστημάτων

Προβλήµατα. 1st International Olympiad in Informatics Held in Pravetz, Bulgaria May 16-19, 1989.

ΤΕΙ Κρήτης Τμήμα Μηχανικών Πληροφορικής. Συμμετρική Κρυπτογραφία

Κεφάλαια 2&21. Συναρτήσεις κατακερματισμού Πιστοποίηση ταυτότητας μηνυμάτων

Ασφάλεια Πληροφοριακών Συστημάτων

ΨΗΦΙΑΚΑ ΠΙΣΤΟΠΟΙΗΤΙΚΑ ΓΙΑ ΑΣΦΑΛΗ ΚΑΙ ΠΙΣΤΟΠΟΙΗΜΕΝΗ ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΗΝ ΤΡΑΠΕΖΑ ΤΗΣ ΕΛΛΑΔΟΣ. Οδηγίες προς τις Συνεργαζόμενες Τράπεζες

Στοιχεία Θεωρίας Αριθμών & Εφαρμογές στην Κρυπτογραφία

Δ Εξάμηνο. Κρυπτογραφία: Συμμετρική Κρυπτογράφηση

ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ ΕΦΑΡΜΟΓΕΣ ΤΗΣ ΚΡΥΠΤΟΓΡΑΦΙΑΣ

Ασφάλεια ικτύων (Computer Security)

Στοιχεία Θεωρίας Αριθμών & Εφαρμογές στην Κρυπτογραφία

Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου Τμήμα Τηλεπληροφορικής & Διοίκησης

Στοιχεία Θεωρίας Αριθμών

Ασφάλεια στο Ηλεκτρονικό Επιχειρείν. ΤΕΙ Δυτικής Ελλάδας Τμήμα Διοίκησης Επιχειρήσεων - Πάτρα Κουτσονίκος Γιάννης

Α ΤΑΞΗ. 1 η ΕΝΟΤΗΤΑ: Γνωρίζω τον υπολογιστή. Θα παρουσιαστεί µε τρόπο απλό και κατανοητό,

Ασφάλεια Πληροφοριακών Συστημάτων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 131: ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I ΕΡΓΑΣΙΑ 2

ΠΡΟΣΤΑΣΙΑ ΠΡΟΣΩΠΙΚΩΝ ΔΕΔΟΜΕΝΩΝ ΣΤΙΣ ΤΕΧΝΟΛΟΓΙΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΚΑΘΩΣ ΚΑΙ ΣΤΟ ΔΙΑΔΙΚΤΥΟ

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

ΑΣΦΑΛΕΙΑ ΚΑΤΑ ΤΗ ΙΑΚΙΝΗΣΗ ΠΟΛΥΜΕΣΙΚΗΣ ΠΛΗΡΟΦΟΡΙΑΣ

ΕΠΛ 475: Εργαστήριο 2 Ο απλοποιημένος αλγόριθμος κρυπτογράφησης S-DES

Παύλος Εφραιμίδης. Βασικές Έννοιες Κρυπτογραφίας. Ασφ Υπολ Συστ

KΕΦΑΛΑΙΟ 2 ΣΥΜΜΕΤΡΙΚΗ ΚΡΥΠΤΟΓΡΑΦΙΑ

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Πληροφορική Ι. Ενότητα 10 : Ασφάλεια. Δρ. Γκόγκος Χρήστος

Κατανόηση των βασικών σημείων των διευθύνσεων TCP/IP και της

ΥΠΟΛΟΓΙΣΤΙΚΗ ΚΡΥΠΤΟΓΡΑΦΙΑ

Υπολογιστική Θεωρία Αριθμών και Κρυπτογραφία

8.3 Ασφάλεια ικτύων. Ερωτήσεις

7.5 Πρωτόκολλο IP. Τεχνολογία ικτύων Επικοινωνιών ΙΙ

Διαχείριση Ασφάλειας και Εμπιστοσύνης σε Πολιτισμικά Περιβάλλοντα

Δίκτυα Υπολογιστών Ενότητα 6: Secure Sockets Layer - SSL

Ψηφιακά Πιστοποιητικά Ψηφιακές Υπογραφές

Εισαγωγή στην επιστήμη των υπολογιστών. Υπολογιστές και Δεδομένα Κεφάλαιο 2ο Αναπαράσταση Δεδομένων

Transcript:

Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Τµήµα Ηλεκτρολόγων Μηχανικών & Μηχανικών Η/Υ Τοµέας Τηλεπικοινωνιών ιπλωµατική Εργασία Επιβλέπων Καθηγητής: ρ Μητράκος ηµήτρης 1 ος Εξεταστής: ρ Στρίντζης Μιχαήλ 2 ος Εξεταστής: ρ Πέτρου Λουκάς ΜΕΛΕΤΗ ΚΑΙ ΕΦΑΡΜΟΓΗ ΤΩΝ ΑΛΓΟΡΙΘΜΩΝ ΚΡΥΠΤΟΓΡΑΦΗΣΗΣ Όνοµα Φοιτητή: Περδίκης Ιωάννης ΑΕΜ: 5209

Περιεχόµενα ΠΕΡΙΛΗΨΗ i Κεφάλαιο 1 Εισαγωγή 1 1.1 Κρυπτογράφηση 1-2 1.2 Ασφάλεια εδοµένων 3 1.3 Ψηφιακές Υπογραφές 4 1.4 Έξυπνες Κάρτες 5 Κεφάλαιο 2 ΑΛΓΟΡΙΘΜΟΙ ΚΡΥΠΤΟΓΡΑΦΗΣΗΣ 2.1 Κρυπτογραφήµατα Αντιµετάθεσης 6 2.2 Απλά Κρυπτογραφήµατα Αντικατάστασης 6-7 2.3 Οµόηχη Κρυπτογράφηση Αντικατάστασης 7 2.3.1 Υψηλού Επιπέδου Οµόηχα 7-8 2.4 Πολυαλφαβητική Αντικατάσταση 8 2.4.1 Vigenere και Beaufort 9 2.4.2 Το Σηµειωµατάριο Μιας Φοράς 9-10 2.5 Polygram Αντικαταστάσεις 10 2.5.1 Κρυπτογράφηση Playfair 10-11 2.5.2 Κρυπτογράφηµα Hill 11 2.6 Κρυπτογραφήµατα Γινοµένου 12 2.6.1 Κρυπτογραφήµατα Αντικατάστασης 12 2.6.2 Το Πρότυπο Κρυπτογράφησης εδοµένων 12-17 2.7 Κρυπτογραφήµατα Εκθετικοποίησης 18 2.7.1 Το Σχέδιο RSA 18-19

Κεφάλαιο 3 ΕΦΑΡΜΟΓΗ ΛΟΓΙΣΜΙΚΟΥ 19 Κεφάλαιο 4 ΑΠΟΤΕΛΕΣΜΑΤΑ 20 Κεφάλαιο 5 ΜΗΧΑΝΙΚΗ ΤΟΥ ΛΟΓΙΣΜΙΚΟΥ 21 5.1 Προδιαγραφές και Σχέδια 21-22 5.2 Συντήρηση 22 5.3 ύναµη κλειδιού 22-23 5.4 Χειρισµός κλειδιού 23 Κεφάλαιο 6 ΙΑΧΕΙΡΙΣΗ ΨΗΦΙΑΚΩΝ ΙΚΑΙΩΜΑΤΩΝ 24-27 Κεφάλαιο 7 ΣΥΜΠΕΡΑΣΜΑΤΑ 28-29 Σχήµατα 30-32 Αναφορές 33-34 Βιβλιογραφία 35-36 Παραρτήµατα 37-39

1.0 ΕΙΣΑΓΩΓΗ 1.1 Κρυπτογράφηση «Οι συναλλαγές µέσω των ηλεκτρονικών υπολογιστών έχουν γίνει όλο και πιο δηµοφιλείς τα τελευταία 20 χρόνια ξεκινώντας µε τα τραπεζικά και τηλεφωνικά δίκτυα και προοδεύοντας µέσω της έκρηξης που συντελείται στο διαδίκτυο (internet) στις µέρες µας.» Η προβολή της εποχής της πληροφορίας οδήγησε σε ανησυχίες όσον αφορά την ασφάλεια και τα προσωπικά δεδοµένα. Σαν αποτέλεσµα, στις µέρες µας, οι αλγόριθµοι κρυπτογράφησης έχουν γίνει δηµοφιλείς και χρησιµοποιούνται σε κάθε ηλεκτρονική συναλλαγή. Στην αρχή το θέµα της ασφάλειας αφορούσε µόνο τις κυβερνήσεις. Αργότερα επεκτάθηκε, έγινε αντικείµενο µελέτης σε µεγάλους οργανισµούς και τώρα έχει φθάσει στο σηµείο όπου ο κάθε χρήστης ασχολείται προσωπικά µε αυτόν τον τοµέα. [5] Οι αλγόριθµοι κρυπτογράφησης είναι ένα σύνολο µαθηµατικών κανόνων που χρησιµοποιούνται για την κωδικοποίηση και αποκωδικοποίηση δεδοµένων. Μπορούν να εφαρµοσθούν τόσο στο λογισµικό (software) όσο και στο υλισµικό (hardware). Η επιστήµη και µελέτη της µυστικής γραφής ονοµάζεται κρυπτογραφία. Το κρυπτογράφηµα είναι µυστικός τρόπος γραφής. Η κωδικοποίηση ή κρυπτογράφηση είναι η διαδικασία µετατροπής του αποκρυπτογραφηµένου κειµένου σε κρυπτογραφηµένο. Η αποκωδικοποίηση ή αποκρυπτογράφηση είναι ακριβώς η αντίστροφη διαδικασία. Σε κάθε τεχνική κρυπτογράφησης ένα ή περισσότερα κλειδιά χρησιµοποιούνται για κρυπτογράφηση και αποκρυπτογράφηση (δείτε εικόνα 1.1 στη σελίδα 29). [4] Η βασική ιδέα της κρυπτογράφησης είναι στην πραγµατικότητα απλή. Να κρυπτογραφηθούν µηνύµατα ώστε µόνο ο παραλήπτης να µπορεί να τα ανακτήσει. Υπάρχουν δυο τρέχοντες τύποι αλγόριθµων. Οι συµµετρικοί αλγόριθµοι και οι αλγόριθµοι δηµοσίων κλειδιών. Οι πρώτοι χρησιµοποιούν το ίδιο κλειδί για κρυπτογράφηση και αποκρυπτογράφηση ενώ οι δεύτεροι χρησιµοποιούν ένα κλειδί (δηµόσιο) για κρυπτογράφηση και ένα άλλο (ιδιωτικό) για αποκρυπτογράφηση. Ας θεωρήσουµε Μ το µήνυµα που πρόκειται να κρυπτογραφηθεί. Χρησιµοποιούµε το e(m) για να υποδηλώσουµε τη διαδικασία κρυπτογράφησης και έστω d η διαδικασία αποκρυπτογράφησης. Η ισότητα d(e(m))=m είναι έγκυρη για όλα τα µηνύµατα Μ. Κάθε παράµετρος που χρησιµοποιείται για την κρυπτογράφηση του µηνύµατος

ονοµάζετε κλειδί Κ. Η συνάρτηση κωδικοποίησης C=e(M,K) καλείται κρυπτογράφηµα ή κρυπτοκείµενο. Με τον ίδιο τρόπο η αποκρυπτογράφηση υπακούει στον κανόνα M=d(C,K). [3] H ιστορία ξεκινά σχεδόν 2500 χρόνια πριν. Σύµφωνα µε τον Έλληνα βιογράφο Πλούταρχο η κυβέρνηση της Σπάρτης έστελνε µυστικά µηνύµατα στους στρατηγούς της µε τον ακόλουθο έξυπνο τρόπο. Ο αποστολέας και ο παραλήπτης είχαν από έναν κύλινδρο, που λεγόταν σκυτάλη, της ίδιας ακριβώς ακτίνας. Ο αποστολέας έδενε µια στενή κορδέλα από περγαµηνή γύρω από τον κύλινδρο και έπειτα έγραφε κατά µήκος της. Αφού ξετυλιγόταν η κορδέλα µόνο ένα άτοµο που είχε έναν κύλινδρο ακριβώς της ίδιας περιφέρειας µπορούσε να διαβάσει τη γραφή. Υποθέστε ότι έχουµε υποκλέψει µια λωρίδα χαρτιού η οποία φέρει την ακόλουθη σειρά γραµµάτων SYBLCRESEERACHTAYPUOHIPHRUEMTYILSOO!TDOFG Έστω c η περίµετρος του κυλίνδρου. Αν το c=5 και επαναταξινοµήσουµε το µήνυµα σε 5 στήλες παίρνουµε µόνο ακαταλαβίστικα ως ακολούθως: SRRAAHUI!G YEAYIELT BSCPPMSD LEHUHTOO CETORYOF Αν το µήνυµα τοποθετηθεί σε έξι στήλες γίνεται κατανοητό. SECURIT YSHOULD BETHESO LEAIMOF CRYPTOG RAPHY! Ο αλγόριθµος που περιγράφηκε εδώ είναι το πρωτότυπο του κρυπτογραφήµατος αντιµετάθεσης που πρόκειται να περιγραφεί αργότερα. [2]

1.2 Ασφάλεια δεδοµένων Η ανάγκη προστασίας των δεδοµένων έχει γίνει όλο και πιο δηµοφιλής καθώς αυξάνεται το ηλεκτρονικό εµπόριο και η συνδετικότητα χρησιµοποιώντας το παγκόσµιο διαδίκτυο. «Στην πραγµατικότητα οι περισσότερες αιτήσεις για κρυπτογράφηση σήµερα ζητούν αυθεντικά δεδοµένα παρά µυστικά δεδοµένα». Πρέπει να γίνει αντιληπτό ότι οι πληροφορίες στο Ιντερνετ µπορούν να γίνουν αντικείµενα εκµετάλλευσης από άλλους. [9] Η επιστήµη που µελετά τρόπους προστασίας των δεδοµένων σε συστήµατα ηλεκτρονικών υπολογιστών και επικοινωνίας καλείται ασφάλεια δεδοµένων. Επιπλέον τα εφαρµόζει στο λογισµικό και στο υλισµικό. Οι πληροφορίες που µεταδίδονται µέσω των ηλεκτρονικών γραµµών είναι ευάλωτες σε δυο είδη απειλών. Την παθητική και ενεργητική παγίδευση των ηλεκτρονικών συνδέσεων. Η παθητική παγίδευση αναφέρεται σε µηνύµατα που υποκλάπησαν και συνήθως δεν γίνεται αντιληπτή. Μπορεί επίσης να χρησιµοποιεί σε δίκτυα υπολογιστών για να καταγράψει τη ροή της κυκλοφορίας και να παρατηρήσει ποιος συνδέεται µε ποιον. Η ενεργητική παγίδευση αναφέρεται σε τροποποίηση των δεδοµένων. Οι συνέπειες είναι πραγµατικά πολύ σοβαρές αν κάποιος έχει τη δύναµη να τροποποιήσει δεδοµένα για ένα συγκεκριµένο σκοπό. [1] Ένας τύπος προβλήµατος που ανακύπτει είναι η συνοχή του µηνύµατος. Αυτή αναφέρεται στο κατά πόσο το µήνυµα έχει µεταδοθεί δίχως αλλαγές. Το δεύτερο είναι η αυθεντικότητα του µηνύµατος. Η ερώτηση είναι µε ποιον τρόπο ο αποδέκτης µπορεί να πεισθεί ότι το µήνυµα που του έχει σταλεί προέρχεται από το πρόσωπο που υποτίθεται ότι το έχει στείλει. Τελικά, το πρόβληµα της αυθεντικότητας του χρήστη αναφέρεται στην ερώτηση του τρόπου που µπορεί κάποιος να αποδείξει την ταυτότητα του. [2]

1.3 ΨΗΦΙΑΚΕΣ ΥΠΟΓΡΑΦΕΣ Η ψηφιακή υπογραφή είναι µια διαδικασία, ιδιωτική για ένα χρήστη, η οποία χρησιµοποιείται για την υπογραφή µηνυµάτων. Υποθέστε ότι ο Β είναι ο αποδέκτης του µηνύµατος Μ που υπογράφεται από τον Α. 1. Ο Β πρέπει να είναι σε θέση να επαληθέυσει την υπογραφή του Α στο Μ. 2. Πρέπει να είναι αδύνατο για οποιονδήποτε συµπεριλαµβανοµένου του Β να πλαστογραφήσει την υπογραφή του Α. 3. Στην περίπτωση που ο Α απαρνηθεί ένα µήνυµα Μ πρέπει να είναι δυνατό για ένα ουδέτερο δικαστή να επιλύσει µια διαµάχη ανάµεσα στον Α και Β. Εποµένως, µια ψηφιακή υπογραφή εξασφαλίζει την αυθεντικότητα του αποστολέα. Η αυθεντικότητα των δεδοµένων επίσης εξασφαλίζεται από τη συνθήκη 2. Οι ψηφιακές υπογραφές εφαρµόζονται εύκολα από συστήµατα δηµοσίων κλειδιών. Οι παρακάτω κανόνες επαληθεύουν το παραπάνω. 1. Ο Α υπογράφει το Μ πληκτρολογώντας C=Da(M). 2. Ο Β επαληθεύει την υπογραφή του Α ελέγχοντας ότι το Ea(C ) επαναφέρει Μ. 3. Ένας δικαστής επιλύει µια διαµάχη ανάµεσα στον Α και Β ελέγχοντας αν το Ea(C ) επαναφέρει Μ µε τον ίδιο τρόπο µε το Β. Ο παραλήπτης Β διαβεβαιώνεται για την αυθεντικότητα τόσο του αποστολέα όσο και των δεδοµένων. Στα συµβατικά συστήµατα η αυθεντικότητα του αποστολέα δεν παρέχεται. Επειδή τόσο ο αποστολέας όσο και ο παραλήπτης µοιράζονται το ίδιο κλειδί ο παραλήπτης θα µπορούσε εύκολα να πλαστογραφήσει την υπογραφή του αποστολέα. Μια τέτοια διένεξη θα είναι αδύνατο να επιλυθεί από κάποιον τρίτο. Οι ψηφιακές υπογραφές µπορούν να εφαρµοσθούν για προστασία λογισµικού. Υποθέστε ότι δηµιουργείται ένα δίκτυο υπολογιστών. Η διαδικασία της υπογραφής µπορεί να ελέγξει την εγκυρότητα του λογισµικού στους κόµβους. Η δεύτερη εφαρµογή αφορά την εφαρµογή προστατευµένων προγραµµάτων σε λειτουργούντα συστήµατα Αν το πρόγραµµα δεν υπογράφεται από κάποιον επαληθευτή προγραµµάτων το σύστηµα θα αρνηθεί να το εκτελέσει. [1]

1.4 ΕΞΥΠΝΕΣ ΚΑΡΤΕΣ Οι έξυπνες κάρτες είναι µια από τις πιο δηµοφιλείς εφαρµογές των αλγόριθµων κρυπτογράφησης. Αυτές είναι κάρτες περίπου στο µέγεθος µιας πιστωτικής κάρτας και φτιαγµένες από πλαστικό. Το όνοµα που τους δίνεται αναφέρεται στο µικροτσιπ που περιέχουν και το οποίο µπορεί να εκτελέσει διάφορες µαθηµατικές λειτουργίες. Οι έξυπνες κάρτες είναι ιδανικές για κρυπτολογία. Μπορούν να εκτελούν κρυπτο-αλγόριθµους και είναι σε θέση να αποθηκεύσουν κλειδιά µε µοναδικό τρόπο. Μπορούν να χρησιµοποιηθούν από τον οποιονδήποτε µε την προϋπόθεση ότι ο χρήστης θυµάται τον µυστικό αριθµό αυθεντικότητας του. Εποµένως, οι έξυπνες κάρτες δεν είναι δυσκολότερες στη χρήση από µια πιστωτική κάρτα και παρέχουν τεράστια ασφάλεια και ευκολία. Έξυπνες κάρτες για την πρόσβαση σε ελέγχους: Σε αυτά τα συστήµατα οι έξυπνες κάρτες χρησιµοποιούνται από το χρήστη για να αποδείξει την αυθεντικότητα του στο σύστηµα. Ο ευρείας χρήσης κωδικός πρόσβασης χωρίζεται σε δυο ανεξάρτητα µέρη. Ο χρήστης αποδεικνύει την αυθεντικότητα του στην κάρτα µέσω του ΡΙΝ (προσωπικός αριθµός αναγνώρισης) Η κάρτα πιστοποιεί την αυθεντικότητα της στο σύστηµα µέσω ενός δυναµικού πρωτοκόλλου πιστοποίησης Μόλις ο χρήστης δώσει το ΡΙΝ του αυτός ο αριθµός µεταφέρεται στην κάρτα και συγκρίνεται µε έναν αριθµό αναφοράς. Περαιτέρω υπηρεσίες παρέχονται µόνο αν οι δυο αριθµοί συµπίπτουν. Η κάρτα πιστοποιεί την αυθεντικότητα της στο σύστηµα µέσω ενός αλγόριθµου κρυπτογράφησης. Αυτό γίνεται ως ακολούθως. Η κάρτα και ο κεντρικός υπολογιστής έχουν ένα κοινό αλγόριθµο και µοιράζονται το ίδιο κλειδί Κ. Ο υπολογιστής στέλνει τον αλγόριθµο στην κάρτα µε έναν τυχαίο αριθµό ενώ η κάρτα στέλνει τον αλγόριθµο στον υπολογιστή. Και οι δυο πρέπει να υπολογίσουν το κρυπτογραφηµένο κείµενο χρησιµοποιώντας το κλειδί Κ και να εξακριβώσουν κατά πόσο οι αριθµοί συµπίπτουν µεταξύ τους. [2]

2.0 ΑΛΓΟΡΙΘΜΟΙ ΚΡΥΠΤΟΓΡΑΦΗΣΗΣ 2.1 ΚΡΥΠΤΟΓΡΑΦΗΜΑΤΑ ΑΝΤΙΜΕΤΑΘΕΣΗΣ Στην αντιµετάθεση οι χαρακτήρες επαναδιευθετούνται σύµφωνα µε κάποιο σχέδιο. Τα γράµµατα παραµένουν εκεί που είναι αλλά όχι εκεί που ήταν. Πρώτα, το µήνυµα ή το µη κρυπτογραφηµένο κείµενο διευθετείται σε κάποιο σχήµα (δείτε εικόνα 2.1 στη σελίδα 29) σύµφωνα µε ένα µονοπάτι εισαγωγής µέσα. εύτερον, το κρυπτογραφηµένο κείµενο λαµβάνεται από αυτό το σχήµα σύµφωνα µε ένα µονοπάτι εξαγωγής έξω. Το γεωµετρικό σχήµα είναι συχνά µια διάταξη δυο διαστάσεων όπου το µη κρυπτογραφηµένο κείµενο διευθετείται σε έναν αριθµό γραµµών και στηλών. είτε το παρακάτω παράδειγµα όπου το µήνυµα ΑΝΑΓΕΝΝΗΣΗ γράφεται σε έναν πίνακα 3 4. 1 2 3 4 Α Ν Α Γ Ε Ν Ν Η Σ Η Αν οι στήλες ληφθούν µε µια σειρά 2-4-1-3 το κρυπτογραφηµένο µήνυµα είναι ΝΝΗΓΗΑΕΣΑΝ. [1] 2.2 ΑΠΛΑ ΚΡΥΠΤΟΓΡΑΦΗΜΑΤΑ ΑΝΤΙΚΑΤΑΣΤΑΣΗΣ Σε αυτόν τον αλγόριθµο τα γράµµατα του Αγγλικού αλφαβήτου αντικαθίστανται από τους αντίστοιχους χαρακτήρες του αλφάβητου κρυπτογράφησης. Θεωρείστε το παρακάτω παράδειγµα όπου στο Α αντιστοιχούν τα γράµµατα του Αγγλικού αλφάβητου και C είναι το αλφάβητο κρυπτογράφησης. A: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z C: H A R P S I C O D B E F G J K L M N Q T U V W X Y Z To κείµενο προς κρυπτογράφηση RENAISSANCE (ΑΝΑΓΕΝΝΗΣΗ) κρυπτογραφείται µε αυτόν τον τρόπο ως ακολούθως: Μ=RENAISSANCE Εk(M) =NSJHDQQHJRS

Ο αλγόριθµος είναι γνωστός σαν ΜΟΝΟΑΛΦΑΒΗΤΙΚΗ κρυπτογράφηση. Τέτοια συστήµατα είναι εξαιρετικά ευάλωτα σε επίθεση από µια ανάλυση της συχνότητας των γραµµάτων,... [1] 2.3 ΟΜΟΗΧΗ ΚΡΥΠΤΟΓΡΑΦΗΣΗ ΑΝΤΙΚΑΤΑΣΤΑΣΗΣ Σε αυτήν την κρυπτογράφηση κάθε χαρακτήρας στο αλφάβητο του κειµένου προς κρυπτογράφηση χαρτογραφείτε σε ένα πλαίσιο στοιχείων κρυπτογραφηµένου κειµένου που καλούνται οµόφωνα. Το ακρυπτογράφητο µήνυµα Μ=m1 m2 m3 κρυπτογραφείτε ως c1 c2 c3., όπου κάθε ci επιλέγεται τυχαία από το σύνολο των οµοφώνων. Ας υποθέσουµε ότι τα Αγγλικά γράµµατα κρυπτογραφούνται σαν ακέραιοι αριθµοί µεταξύ 0 και 99. Α 17 19 34 41 56 60 67 83 Ι 08 22 53 65 88 90 L 03 44 76 Ν 02 09 15 27 32 40 59 Ο 01 11 23 28 42 54 70 80 Ρ 33 91 Τ 05 10 20 29 45 58 64 78 99 Το µήνυµα µπορεί να κρυπτογραφηθεί ως: Μ= P L A I N P I L O T C= 91 44 56 65 59 33 08 76 28 78 Όσο περισσότερα τα στοιχεία του κρυπτογραφηµένου κειµένου για να κατανεµηθούν ανάµεσα στα γράµµατα τόσο ισχυρότερος ο αλγόριθµος. Αυτός είναι οπωσδήποτε ένας περισσότερο ασφαλής αλγόριθµος από την απλή κρυπτογράφηση αντικατάστασης. 2.3.1 ΥΨΗΛΟΥ ΕΠΙΠΕ ΟΥ ΟΜΟΗΧΑ Για να κατασκευασθεί ένα τέτοιο κρυπτογράφηµα εισάγετε τους αριθµούς 1 ως 99 σε ένα n n πίνακα Κ. Σε αυτό το κρυπτογράφηµα υπάρχουν δυο δυνατά µηνύµατα µη κρυπτογραφηµένου κειµένου το ένα από τα οποία παρίσταται από σειρές και το άλλο από στήλες. Η σειρά a του Κ καθορίζει µια οµάδα οµόηχων f1(a) και η στήλη a καθορίζει µια άλλη οµάδα οµόηχων f2(a). Εποµένως ένα πλήκτρο

παρίσταται από µια οµάδα σειρών και το άλλο από µια σειρά στηλών. Το µήνυµα Μ= m1m2 κρυπτογραφείτε µε ένα µήνυµα Χ=x1x2 για να ληφθεί το κρυπτογραφηµένο κείµενο C=c1c2 Το καθένα κρυπτογραφηµένο στοιχείο είναι µια διασταύρωση των οµάδων f1(m1) και f2(x2) και εποµένως αποκρυπτογραφείται είτε σε mi (υπό το πλήκτρο f1) ή xi (υπό το f2) E I L M S E 10 22 18 02 11 I 12 01 25 05 20 L 19 06 23 13 07 M 03 16 08 24 15 S 17 09 21 14 04 Το µήνυµα SMILE κρυπτογραφείτε ως ακολούθως: Μ= S M I L E X= L I M E S C= 21 16 05 19 11 2.4 ΠΟΛΥΑΛΦΑΒΗΤΙΚΗ ΑΝΤΙΚΑΤΑΣΤΑΣΗ Τα πολυαλφαβητικά κρυπτογραφήµατα αναπτύχθηκαν τον 16 ον αιώνα από τον Leon Battista Alberti, τον πατέρα της υτικής κρυπτογράφησης. Ο Alberti περιέγραψε έναν κύκλο που αποτελούνταν από έναν εξωτερικό και έναν εσωτερικό κύκλο (δείτε την εικόνα 2.4 στη σελίδα 30). Στον εξωτερικό κύκλο τοποθέτησε 20 γράµµατα κειµένου µη κρυπτογραφηµένου και τους αριθµούς 1 ως 4. Στον κινητό εσωτερικό κύκλο τοποθέτησε γράµµατα του Λατινικού αλφάβητου και το σύµβολο &. Αυτά τα κρυπτογραφήµατα κρυπτογραφούν ένα µήνυµα επαναλαµβάνοντας µια σειρά αντιστοιχιών κάθε d χαρακτήρες. Αν Μ=m1.md md+1 m2d.. τότε το µήνυµα κρυπτογραφείτε ως Ek(M) = f1(m1) fd(md)f1(md+1) fd(m2d). Αν d=1 το κρυπτογράφηµα είναι µονοαλφαβητικό και είναι ισοδύναµο µε απλή αντικατάσταση.

2.4.1 VIGENERE ΚΑΙ BEAUFORT ΚΡΥΠΤΟΓΡΑΦΗΜΑΤΑ Ένα Vigenere κρυπτογράφηµα είναι µια µορφή περιοδικής αντικατάστασης και βασίζεται σε ένα µετατοπισµένο αλφάβητο. Αν το κλειδί Κ=k1.kd τότε το πλήθος των µετατοπίσεων στο αλφάβητο δίνεται από το fi(a)=(a+ki)modn (δείτε το παράρτηµα E) όπου το a αντιπροσωπεύει τους χαρακτήρες του µη κρυπτογραφηµένου κειµένου και το n αντιπροσωπεύει τα γράµµατα του Αγγλικού αλφάβητου. Η κρυπτογράφηση της λέξης SUBSTITUTION υπό το κλειδί BAND δίνεται παρακάτω. Μ= SUBS TITU TION K= BAND BAND BAND Ek(M)= TUOV UIGX UIBQ Το πρώτο γράµµα µετατοπίζεται στα δεξιά κατά µια θέση, το δεύτερο κατά 0, το τρίτο κατά 13 και το τέταρτο κατά 3. Η κρυπτογράφηση Beaufort είναι παρόµοια χρησιµοποιώντας την αντικατάσταση fi(a)=(ki-a)modn. Η κρυπτογράφηση Beaufort αναστρέφει τα γράµµατα στο αλφάβητο και έπειτα τα µετατοπίζει στα δεξιά κατά (Ki+1) θέσεις [1] Αν ki=d η µετατροπή από µη κρυπτογραφηµένο κείµενο σε κρυπτογραφηµένο φαίνεται παρακάτω: Α: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z C: D C B A Z Y X W V U T S R Q P O N M L K J I H G F E [1] 2.4.2 ΤΟ ΣΗΜΕΙΩΜΑΤΑΡΙΟ ΜΙΑΣ ΦΟΡΑΣ Το σηµειωµατάριο µιας φοράς εισήχθη πρώτη φορά το 1917 από τον Αµερικάνο Μηχανικό της AT&T Gilbert S. Vernam. Στην αρχή χρησιµοποιούνταν µε γράµµατα στο σηµειωµατάριο και το ακρυπτογράφητο κείµενο κρυπτογραφήθηκε µε τη χρήση ενός Vigenere κρυπτογραφήµατος. Έτσι δηµιουργήθηκε ένα bit stream C= Ek(M)=c1,c2,, όπου ci= (mi+ki)mod2, i=1,2. Σήµερα αυτό το σύστηµα χρησιµοποιεί bit σε έναν υπολογιστή παρά γράµµατα. Αν τα mi και Ki είναι bits τότε το κρυπτογράφηµα αποκτάται µε τη χρήση µίας exclusive-or συνάρτησης όπου ci=mi(+) ki (δείτε εικόνα 2.4.2 στη σελίδα 30). Η αποκρυπτογράφηση γίνεται

χρησιµοποιώντας την ίδια λειτουργία: ci(+)ki=mi(+)ki(+)ki=mi. Για την ασφάλεια του συστήµατος τα bit κλειδιά πρέπει να επιλέγονται τυχαία. Είναι οπωσδήποτε ένα τέλειο σύστηµα µόνο αν το κλειδί µεταδίδεται ξεχωριστά από το ακρυπτογράφητο κείµενο. Αν το κλειδί µεταδίδεται ταυτόχρονα τότε αυξάνει η πιθανότητα να υποκλαπούν τόσο το κλειδί όσο και το ακρυπτογράφητο κείµενο µιας και το κλειδί έχει το ίδιο µήκος µε το ακρυπτογράφητο κείµενο. Το κόστος αυτού του είδους της µυστικότητας είναι υψηλό από την πλευρά χρηµάτων και πόρων. Το σηµειωµατάριο µιας φοράς δηµιουργεί ένα τεράστιο όγκο χαρτιού που πρέπει να διαφυλαχθεί µυστικό απέναντι σε εισβολείς 24 ώρες την ηµέρα. [2] 2.5 POLYGRAM ΑΝΤΙΚΑΤΑΣΤΑΣΕΙΣ Σε όλα τα προηγούµενα παραδείγµατα ένα µόνο γράµµα κρυπτογραφείτε κάθε φορά. Στην polygram αντικατάσταση µεγαλύτερα συµπλέγµατα γραµµάτων κρυπτογραφούνται καθιστώντας την κρυπτανάλυση ακόµα δυσκολότερη. [1] 2.5.1 ΚΡΥΠΤΟΓΡΑΦΗΣΗ PLAYFAIR Αυτός ο αλγόριθµος ονοµάζεται από έναν Άγγλο επιστήµονα που τον ανακάλυψε το 1854. Το πλήκτρο τοποθετείται σε έναν πίνακα 5 5 (δείτε εικόνα 2.5 σελίδα 11) 25 γραµµάτων ( το J δε χρησιµοποιήθηκε). Οι ακόλουθοι κανόνες χρησιµοποιούνται για να κωδικοποιήσουν ένα ζεύγος ακρυπτογράφητων γραµµάτων. 1. Αν m1 και m2 είναι στην ίδια γραµµή, τότε c1 και c2 είναι οι δυο χαρακτήρες στα δεξιά των m1 και m2, αντίστοιχα, όπου η πρώτη στήλη θεωρείτε ότι είναι στα δεξιά της τελευταίας στήλης. 2. Αν m1 και m2 είναι στην ίδια στήλη, τότε c1 και c2 είναι οι δυο χαρακτήρες κάτω από τα m1και m2, αντίστοιχα, όπου η πρώτη σειρά θεωρείται ότι είναι κάτω από την τελευταία σειρά. 3. Αν m1 και m2 είναι σε διαφορετικές σειρές και στήλες τότε c1 και c2 είναι οι άλλες δυο γωνίες του ορθογώνιου παραλληλόγραµµου που έχει τα m1 και m2 σαν γωνίες, όπου το c1 είναι στη σειρά που είναι το m1 και το c2 είναι στη σειρά που είναι το m2. 4. Αν m1=m2, το γράµµα µηδέν εισάγετε στο ακρυπτογράφητο κείµενο µεταξύ m1 και m2 για να εξαλειφθεί το διπλάσιο.

5. Αν το ακρυπτογράφητο κείµενο έχει µονό αριθµό χαρακτήρων τότε το γράµµα µηδέν προστίθεται στο τέλος του ακρυπτογράφητου κειµένου. Για να κρυπτογραφηθούν τα πρώτα δυο γράµµατα της λέξης SUBSTITUTION παρατηρήστε ότι το S και το U βρίσκονται στην ίδια στήλη. Εποµένως, κρυπτογραφούνται όπως τα δυο γράµµατα που βρίσκονται από κάτω τους, τα οποία είναι το Β και Ζ. [1] Κλεδί για τον αλγόριθµο playfair H A R P S I C O D B E F G K L M N Q T U V W X Y Z Εικόνα 2.5 2.5.2 KΡΥΠΤΟΓΡΑΦΗΜΑ HILL Σε αυτό το σύστηµα η κρυπτογράφηση γίνεται σύµφωνα µε την εξίσωση C=Ek(M)=K M modn όπου Κ είναι το διάνυσµα του κλειδιού και το Μ το διάνυσµα του µηνύµατος. Η αποκρυπτογράφηση γίνεται µε τον αντίστροφο πίνακα K^-1 και Dk(C) = K^-1C modn. ουλέυοντας µε το αλφάβητο των 26 γραµµάτων υποθέστε ότι το κλειδί είναι ο πίνακας Κ = 3 2 και Κ^-1 = 15 20 3 5 17 9 Υποθέστε ότι θέλαµε να κρυπτογραφήσουµε το µήνυµα ΑΒ το οποίο είναι το διάνυσµα (0,1). Για να υπολογίσουµε το κρυπτογραφηµένο κείµενο µπορούµε να γράψουµε c1 3 2 0 2 c2 = mod26 = 3 5 1 5

Μπορούµε εποµένως να πάρουµε το κρυπτογραφηµένο κείµενο C= (2,5) ή CF Για να αποκρυπτογραφήσουµε υπολογίζουµε : 15 20 0 2 mod26= = M 17 9 5 1 [1] 2.6 ΚΡΥΠΤΟΓΡΑΦΗΜΑΤΑ ΓΙΝΟΜΕΝΟΥ Ένα παράγωγο κρυπτογράφηµα είναι αποτέλεσµα λειτουργίας αντικατάστασηςαντιµετάθεσης συνάρτησης F. 2.6.1 ΚΡΥΠΤΟΓΡΑΦΗΜΑΤΑ ΑΝΤΙΚΑΤΑΣΤΑΣΗΣ- ΑΝΤΙΜΕΤΑΘΕΣΗΣ Αυτά τα κρυπτογραφήµατα δηµιουργούνται εφαρµόζοντας µια αντιµετάθεση ακολουθούµενη από µια εναλλακτική αλληλουχία αντικαταστάσεων και απλών γραµµικών λειτουργιών. Αυτή η προσέγγιση ενσωµατώνεται στο κρυπτογράφηµα Lucifer (δείτε εικόνα 2.6 στη σελίδα 31). Εφαρµόζει αυτήν την αρχή σε µήτρες 12- bit. Το κρυπτογράφηµα αυτού του αλγορίθµου είναι C=Ek(M)=St O Pt-1.. O S2 O P1O S1(M) όπου το S παριστά µια λειτουργία του κλειδιού Κ και το Ρ µια αντιµετάθεση bit. [1] 2.6.2 TO ΠΡΟΤΥΠO ΚΡΥΠΤΟΓΡΑΦΗΣΗΣ Ε ΟΜΕΝΩΝ (Data Encryption Standard) Τo πρότυπo κρυπτογράφησης δεδοµένων είναι ο πιο κοινός αλγόριθµος σε χρήση σήµερα. Αναπτύχθηκε από την ΙΒΜ και έχει γίνει το de facto πρότυπο για τουλάχιστον 20 χρόνια. Το DES έχει αντέξει καλά απέναντι στη δοκιµή νεότερων αλγορίθµων και θεωρείτε ένας από τους ασφαλέστερους τρόπους κρυπτογράφησης δεδοµένων σήµερα. Λειτουργεί σε µήτρες 64 bit δεδοµένων µε τη χρήση ενός κλειδιού µεγέθους 56 bit. Στο παρακάτω διάγραµµα της µήτρας εκτελούνται 16 γύροι ιδανικών λειτουργιών (ονοµάζεται λειτουργία f) όπου τα δεδοµένα συνδυάζονται µε το κλειδί. [7]

Σχήµα 1 : Αλγόριθµος DES

Κρυπτογράφηση: Η µήτρα των 64 bit πρώτα αντιµετατίθενται κάτω από έναν αρχικό συνδυασµό (IP) ο οποίος φαίνεται στον πίνακα 1. 58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4 62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8 57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3 61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7 Πίνακας 1 Η µήτρα έπειτα χωρίζεται σε δυο µισά, το καθένα µήκους 32 bit. Το δεξί µισό γίνεται το νέο αριστερό µισό του συστήµατος (Ri-1=Li) και το αριστερό µισό ενώνεται µε µία συνάρτηση f ((Li(+)f(Ri, Ki+1)) µέσω µίας πύλης exclusive-or η οποία πρόκειται να περιγραφεί αργότερα. Αυτό είναι τώρα το νέο δεξιό µισό του συστήµατος. Η τελική µήτρα αντιµετατίθενται κάτω από τον αντίστροφο συνδυασµό (δείτε πίνακα 2) για να δώσει το κωδικοποιηµένο µήνυµα. 40 8 48 16 56 24 64 32 39 7 47 15 55 23 63 31 38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29 36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27 34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25 Πίνακας 2

Αποκρυπτογράφηση: Η αποκρυπτογράφηση γίνεται εφαρµόζοντας ακριβώς τον ίδιο αλγόριθµο στο κωδικοποιηµένο µπλόκ. Συνάρτηση f: Η εικόνα παρακάτω δείχνει πως υπολογίζεται η λειτουργία F. Ri-1 E S1 S2 S3 S4 S5 S6 S7 S8 P F (Ri-1, Ki) Σχήµα 2: Συνάρτηση F

Αρχικά, το δεξιό µέρος της µήτρας επεκτείνεται στα 48 bit (δείτε πίνακα 3) µε χρήση της επιλογής bit Ε. 32 1 2 3 4 5 4 5 6 7 8 9 8 9 10 11 12 13 12 13 14 15 16 17 16 17 18 19 20 21 20 21 22 23 24 25 24 25 26 27 28 29 28 29 30 31 32 1 Πίνακας 3 Εν συνεχεία, η επεκταθήσα µήτρα και το κλειδί συνδυάζονται µε µία πύλη exclusive- OR και το αποτέλεσµα σπάει σε οκτώ µήτρες των 6 bit. Η κάθε µήτρα των 6-bit τοποθετείται έπειτα σε 8 κουτιά το κάθε ένα από τα οποία επιστρέφει ένα µπλοκ των 4-bit. (δείτε παράρτηµα Α για λεπτοµέρειες). Το προκύπτον µπλοκ των 32-bit συνδυάζεται µια φορά σύµφωνα µε τον πίνακα 4 για να δώσει την f. 16 7 20 21 29 12 28 17 1 15 23 26 5 18 31 10 2 8 24 14 32 27 3 9 19 13 30 6 22 11 4 25 Πίνακας 4 Υπολογισµός κλειδιού: το µπλοκ διάγραµµα για τον υπολογισµό του κλειδιού είναι στη σελίδα 13.

Στην αρχή εκτελείται η συνδυαστική επιλογή 1 (PC-1) η οποία απορρίπτει τα parity bits (δείτε πίνακα 5). 57 49 41 33 25 17 9 1 58 50 42 34 26 18 10 2 59 51 43 35 27 19 11 3 60 52 44 36 63 55 47 39 31 23 15 7 62 54 46 38 30 22 14 6 61 53 45 37 29 21 13 5 28 20 12 4 Πίνακας 5 Το εναποµένον µπλοκ των 56 bit χωρίζεται σε δυο µισά. Τα µπλοκ έπειτα µετατοπίζονται αριστερά µια ή δυο φορές (δείτε παράρτηµα Β για λεπτοµέρειες) για να αντιµετατεθεί το κλειδί µια ακόµη φορά πριν να υπολογισθεί. Η επιλογή αντιµετάθεσης 2 φαίνεται στον παρακάτω πίνακα. [1] 14 17 11 24 1 5 3 28 15 6 21 10 23 19 12 4 26 8 16 7 27 20 13 2 41 52 31 37 47 55 30 40 51 45 33 48 44 49 39 56 34 53 46 42 50 36 29 32 Πίνακας 6

2.7 ΚΡΥΠΤΟΓΡΑΦΗΜΑΤΑ ΕΚΘΕΤΙΚΟΠΟΙΗΣΗΣ Αυτοί οι αλγόριθµοι εφαρµόζουν τις αρχές ενός συστήµατος µε δηµόσιο κλειδί. Σε ένα κρυπτοσύστηµα µε δηµόσιο κλειδί κάθε χρήστης έχει µια δηµόσια µετατροπή κωδικοποίησης και µια ιδιωτική µετατροπή αποκωδικοποίησης. Εποµένως, ένα δηµόσιο κλειδί χρησιµοποιείται για κρυπτογράφηση και ένα ιδιωτικό κλειδί για αποκρυπτογράφηση. 2.7.1 Το σχέδιο RSA Το 1977 λίγο µετά την εισαγωγή της ιδέας του συστήµατος µε δηµόσιο κλειδί τρεις µαθηµατικοί ο Ron Rivest, o Adi Shamir και ο Len Adleman έδειξαν µε ποιο τρόπο θα µπορούσε να εφαρµοσθεί ένα τέτοιο σύστηµα. Η κρυπτογράφηση µπορεί να επιτευχθεί µε την ακόλουθη παράσταση. C=M^e modn όπου e και n είναι το κλειδί στην µετατροπή κρυπτογράφησης. Η αποκρυπτογράφηση είναι η ανάστροφη διαδικασία και µπορεί να εκφραστεί ως M=C^d modn όπου d είναι το κλειδί στην µετατροπή αποκρυπτογράφησης. To modulo-n είναι το γινόµενο δυο πρώτων αριθµών, p και q n=pq. [9] Σύµφωνα µε το θεώρηµα του Euler (δείτε παράρτηµα C) φ(n)=(p-1)(q-1). To e υπολογίζεται από την σχέση ed modφ(n)=1 όπου e και d είναι πολλαπλασιαστικοί ανάστροφοι (δείτε παράρτηµα D). Παράδειγµα: Έστω p=11 και q=10. Τότε n=110 και φ(n)=90 Αν θέσουµε d= 181 παίρνουµε e=1 Για να κωδικοποιήσουµε το µήνυµα M= RE NA UL T 1704 1300 2011 1926 το σπάµε σε µπλοκ δυο χαρακτήρων ο καθένας όπου Α=00, Β=01,..., Ζ=25 και κενό=26 Το πρώτο µπλοκ κρυπτογραφείτε σαν 1704 mod110=54 Το υπόλοιπο µήνυµα κρυπτογραφείται σαν C= 54 90 31 56

3.0 ΕΦΑΡΜΟΓΗ ΛΟΓΙΣΜΙΚΟΥ Και τα δυο προγράµµατα C βρίσκονται στο παράρτηµα F. Στόχοι Να εφαρµοσθούν οι αλγόριθµοι του Πρότυπου Κρυπτογράφησης εδοµένων και του RSA µε τη χρήση ενός "κοµπάιλερ", (µεταγλωττιστής) Turbo C. DES: Προκειµένου να εφαρµοσθεί ένας τόσο µεγάλος και σύνθετος αλγόριθµος έπρεπε να διαιρεθεί σε δυο διαφορετικά µπλοκ. Το γράψιµο ενός ψευδοκώδικα είναι πολύ κοινό στην εφαρµογή λογισµικού και ήταν το επόµενο πράγµα στο µυαλό µου. Είναι ο κατάλληλος τρόπος για να γραφεί λογισµικό καθώς η κατανόηση του αλγόριθµου είναι το κλειδί για να µετατραπεί ο κώδικας σε µια γλώσσα υψηλού επιπέδου. Η µεγάλη έκταση του αλγόριθµου ήταν το κύριο πρόβληµα και εποµένως απαιτούσε πλήρη συγκέντρωση κάθε στιγµή. Η κρυπτογράφηση ήταν κάτι που επιτεύχθηκε τις πρώτες λίγες εβδοµάδες λόγω του σωστού καταµερισµού του χρόνου και της σκληρής δουλειάς. Η ανάκτηση του αρχικού µηνύµατος ήταν µια εύκολη εργασία µιας και η αποκρυπτογράφηση χρησιµοποιεί τον ίδιο αλγόριθµο. RSA: Σε σχέση µε τον αλγόριθµο DES αυτό ήταν πολύ πιο εύκολο να εφαρµοστεί µια και ο κώδικας ήταν έκτασης µόνο µιας σελίδας. Η εµπειρία και αυτοπεποίθηση που αποκτήθηκαν από τον προηγούµενο αλγόριθµο ήταν ζωτικές για να εξασφαλισθούν οι στόχοι της σχεδίασης οι οποίοι και τελικά επιτεύχθηκαν.

4.0 ΑΠΟΤΕΛΕΣΜΑΤΑ Για τα πραγµατικά αποτελέσµατα δείτε το παράρτηµα G. Τα αποτελέσµατα που λήφθηκαν επιβεβαιώνουν ότι το πρόγραµµα λειτουργεί κανονικά. Το αποκρυπτογραφηµένο µήνυµα είναι η λέξη των 64 bit messages (µηνύµατα) χρησιµοποιώντας το κλειδί των 64 bit #2@@@%^8. H διαδικασία της προσοµοίωσης είναι γρήγορη λόγω της τεχνολογίας Pentium που χρησιµοποιήθηκε και επιδεικνύει όλη τη διαδικασία από την κρυπτογράφηση έως και την αποκρυπτογράφηση του µηνύµατος. Σε κάθε βρόγχο τα S-κουτιά επιστρέφουν µια τιµή 32-bit. (δείτε το παράρτηµα F για λεπτοµέρειες). Όταν φθάσουµε στο βρόγχο 16 το κρυπτογραφηµένο µήνυµα τυπώνεται. Πρώτα µια δυαδική τιµή 64 bit µετατρέπεται στο αντίστοιχο σύνολο χαρακτήρων ASCII και έπειτα το µήνυµα τυπώνεται µε κανονικούς χαρακτήρες. Η αποκρυπτογράφηση είναι ακριβώς η ίδια µιας και είναι η αντίστροφη διαδικασία. Η δεύτερη παραλλαγή του κώδικα αυτού έχει σχεδιαστεί για να δέχεται και εικόνες εκτός από text files. Οι εικόνες αυτές µπορεί να είναι οποιουδήποτε format. Η προβολή των κωδικοποιηµένων αποκωδικοποιηµένων εικόνων γίνεται µέσω ενός προγράµµατος επεξεργασίας εικόνας των Windows.

5.0 ΜΗΧΑΝΙΚΗ ΤΟΥ ΛΟΓΙΣΜΙΚΟΥ 5.1 Προδιαγραφές και σχέδια Πριν να σχεδιασθεί ο αλγόριθµος το πρώτο βήµα είναι να καθορισθεί τι πρέπει να κάνει το προϊόν. Αν είναι ένα προϊόν κρυπτογράφησης δε πρέπει να γίνονται υποθέσεις σχετικά µε τον τρόπο άφιξης του µηνύµατος στον προορισµό του επειδή φτιάχνεται κυρίως για κρυπτογράφηση και αποκρυπτογράφηση. Το επόµενο στάδιο αφορά τις προδιαγραφές του προϊόντος. Αυτό είναι το σηµείο που θα αποφασισθεί ποιος αλγόριθµος θα χρησιµοποιηθεί και πόσο ισχυρός θα είναι αυτός ο αλγόριθµος. Επίσης, αν ο αλγόριθµος έχει κάποια συγκεκριµένη ονοµασία θα πρέπει να απαιτείται άδεια χρήσης ώστε να χρησιµοποιείται και από άλλους ειδάλλως θα διανέµεται δωρεάν. Εν συνεχεία, κάποιος µπορεί να θελήσει να χρησιµοποιήσει υλισµικό ή λογισµικό ακόµα και έναν συνδυασµό των δύο. Επιπρόσθετα, πρέπει να καθορισθεί η υποτιθέµενη χρήση της εφαρµογής (ψηφιακή φωνή, fax, e-mail, φάκελοι κειµένων). Αυτές όλες είναι οι αποφάσεις που πρέπει να πάρει ο καθένας και οι οποίες θα επηρεάσουν την επιλογή του αλγορίθµου. Η ακριβής εφαρµογή του αλγορίθµου εξετάζεται στη φάση σχεδίασης. Πολλές ερωτήσεις γίνονται σε αυτή τη φάση όπως κατά πόσο ο αλγόριθµος πρέπει να αποδυναµωθεί (περιορίζοντας τα διαθέσιµα κλειδιά) ή να ενισχυθεί. Αυτό συµβαίνει επειδή η ασφάλεια έχει προτεραιότητα στις θεωρήσεις µας σχετικά µε τις εφαρµογές που αναφέρονται παραπάνω. [6] 5.2 Συντήρηση Στη µηχανική του λογισµικού η συντήρηση και ανανέωση ενός προϊόντος είναι απαραίτητη λόγω κύριων προβληµάτων. Το πρώτο είναι παρόµοιο αλλά περισσότερο προβλέψιµο. Η ταχύτητα της υπολογιστικής δύναµης είναι αυξανόµενη λόγω της ραγδαίας ανάπτυξης της τεχνολογίας και συνάµα το κόστος πέφτει. Αυτό καθιστά τους αλγορίθµους περισσότερο ευάλωτους σε µια προσπάθεια να τους σπάσει κάποιος. [6] 5.3 ύναµη κλειδιού Η δύναµη του κλειδιού καθορίζει πόσο ασφαλής είναι ο αλγόριθµος στις διάφορες προσπάθειες να σπάσει ένα κρυπτογράφηµα. Ο παρακάτω πίνακας δείχνει

τους µέσους υπολογισµούς χρόνου για µια επίθεση υλισµικού (hardware attack). Αυτό γίνεται δοκιµάζοντας κάθε κλειδί σε ένα διάστηµα κλειδιών. Μήκος του κλειδιού σε bit Cost 40 56 64 80 112 128 $100K 2 seconds 35 hours 1 year 70,000 yrs 10^14 yrs 10^19 yrs $1M.2 seconds 3.5 hours 37 days 7000 yrs 10^13 yrs 10^18 yrs $10 M.02 sec 21 min 4 days 700 yrs 10^12 yrs 10^17 yrs $100 M 2 millisec 2 min 9 hours 70 yrs 10^11 yrs 10^16 yrs $1 B.2 millisec 13 sec 1 hour 7 yrs 10^10 yrs 10^15 yrs Πίνακας 7 Άλλες ανησυχίες είναι εξίσου σηµαντικές όταν καθορίζεται το µήκος του κλειδιού. Αυτές αφορούν τις ικανότητες και την ταυτότητα του πραγµατικού εχθρού όπως επίσης και το µέγιστο µήκος κλειδιού που είναι διαθέσιµο στην εφαρµογή. Τα συνιστώµενα µήκη δηµοσίων κλειδιών παρατίθενται στον παρακάτω πίνακα. Συνιστώµενα µήκη δηµόσιων κλειδιών (σε bit) Year Vs. Individual Vs. Corporation Vs. Government 1995 768 1280 1536 2000 1024 1280 1536 2005 1280 1536 2048 2010 1280 1536 2048 2015 1536 2048 2048 Πίνακας 8 5.4 Χειρισµός του κλειδιού Μετά την εφαρµογή του λογισµικού του αλγορίθµου ο χειρισµός των κλειδιών παραµένει ένα πρόβληµα. Ο αποστολέας πρέπει να εξασφαλίσει ότι ο αποδέκτης λαµβάνει το κλειδί ώστε να επανακτηθεί το αρχικό µήνυµα. Αυτό µπορεί να γίνει µέσω ενός δικτύου ασφαλείας ή µπορεί να το στείλει ακόµα και µε το ταχυδροµείο.

Οι υβριδικές λύσεις είναι ένας ακόµα τρόπος για να λυθεί αυτό το πρόβληµα. Οι αλγόριθµοι δηµοσίων κλειδιών χρησιµοποιούνται πολύ συχνά. Ένα κλειδί συνεδρία (session key) αποστέλλεται στον παραλήπτη ο οποίος το αποκρυπτογραφεί µε τη χρήση δηµοσίου κλειδιού και ξεκινά µια επικοινωνία µε τη χρήση ενός συµµετρικού αλγορίθµου. Μια άλλη προσέγγιση σε αυτό το πρόβληµα είναι να σταλεί το κάθε µέρος του κλειδιού ξεχωριστά. Ένα κοµµάτι µε τη χρήση fax, ένα µε το τηλέφωνο και ένα µέσω ταχυδροµείου. [8]

6.0 ΙΑΧΕΙΡΙΣΗ ΨΗΦΙΑΚΩΝ ΙΚΑΙΩΜΑΤΩΝ Το διαδίκτυο και η χρήση των προσωπικών Η/Υ, έχουν αλλάξει δραστικά τον τρόπο µε τον οποίο τα ψηφιακά multimedia (digital media content) όπως µουσική, video, βιβλία παράγονται διανέµονται και αναπαράγονται. Το downloading ψηφιακών αρχείων multimedia κάθε µορφής, διευκολύνει την αµεσότερη απόκτησή τους από τους χρήστες του διαδικτύου, οι οποίοι δεν χρειάζεται πλέον να πηγαίνουν σε ένα κατάστηµα για να αγοράζουν κάποιο CD ή DVD. Παρ' όλα αυτά, η πώληση ψηφιακών αρχείων µέσω διαδικτύου είναι ιδιαίτερα περιορισµένη ακόµα και στις µέρες µας, καθώς οι δηµιουργοί ταινιών, µουσικής κτλ., ανησυχούν για το κατά πόσο προστατεύεται η προσωπική τους δουλειά και τα πνευµατικά τους δικαιώµατα σε έναν τεράστιο και τόσο άµεσα προσβάσιµο χώρο από τον καθένα, όπως είναι το διαδίκτυο. Προτού, λοιπόν, οι δηµιουργοί-ιδιοκτήτες ψηφιακών multimedia διαθέσουν την πολύτιµη δουλειά τους στο διαδίκτυο για πώληση ή προώθηση, απαιτείται η δηµιουργία και χρήση ενός συστήµατος e-commerce (ηλεκτρονικού εµπορίου) που προστατεύει την πνευµατική ιδιοκτησία των αρχείων από κάθε παράνοµη χρήση/διακίνηση. Ένα τέτοιο σύστηµα είναι και το Digital Rights Management (DRM). Περί τίνος πρόκειται; Το σύστηµα DRM είναι στην ουσία ένα σετ τεχνολογιών που µπορούν να χρησιµοποιήσουν οι ιδιοκτήτες-δηµιουργοί ψηφιακού περιεχοµένου, προκειµένου να µπορούν να προστατέψουν τα πνευµατικά τους δικαιώµατα στο διαδίκτυο, ενώ παράλληλα διατηρούν και την αµεσότητα της επικοινωνίας µε τους πελάτες τους. Στις περισσότερες των περιπτώσεων, το σύστηµα DRM κρυπτογραφεί ψηφιακά αρχεία multimedia και έτσι περιορίζει την αναπαραγωγή τους από ανθρώπους που δεν έχουν ειδική άδεια για να το κάνουν. Με τη χρήση των τεχνολογιών DRM, η διανοµή, προώθηση και πώληση αρχείων multimedia µέσω Internet, είναι ασφαλής.

Πώς λειτουργεί; Οι τεχνολογίες DRM, δηµιουργούν ένα κρυπτογραφηµένο αρχείο (πακέτο), το οποίο περιλαµβάνει το εκάστοτε τραγούδι, video, βιβλίο, καθώς και ένα ψηφιακό κλειδί. Το κρυπτογραφηµένο αυτό πακέτο, περιλαµβάνει και πληροφορίες για τον ιδιοκτήτη του αρχείου multimedia. Ας δούµε όµως τη χρήση των τεχνολογιών DRM λίγο πιο αναλυτικά, στην περίπτωση ενός αρχείου που περιλαµβάνει ένα τραγούδι: Packaging: Η τεχνολογία Windows Media Rights Manager, πακετάρει το αρχικό αρχείο. Το πακεταρισµένο αρχείο κρυπτογραφείται και κλειδώνεται µε ένα ψηφιακό κλειδί. Αυτό το κλειδί αποθηκεύεται σε µια επίσης κρυπτογραφηµένη άδεια χρήσης, η οποία διανέµεται χωριστά από το αρχείο. Επιπρόσθετες πληροφορίες, όπως το URL στο οποίο µπορεί να αποκτηθεί η άδεια χρήσης, περιλαµβάνονται στο πακέτο. Το ψηφιακά πακεταρισµένο αρχείο ήχου, αποθηκεύεται σε format Windows Media Audio (WMA). ιανοµή: Το εν λόγω αρχείο µπορεί να τοποθετηθεί σε ένα web site διαθέσιµο προς downloading, ή σε κάποιον media server για streaming. Αποκτώντας ένα license server: ο ιδιοκτήτης του αρχείου (µπορεί να είναι κάποια δισκογραφική εταιρεία), επιλέγει µια εταιρεία που θα πραγµατοποιεί το license clearing (παροχή αδειών χρήσης). Με άλλα λόγια, η εν λόγω εταιρεία θα διατηρεί τους κανόνες και τους όρους µε βάση των οποίων θα παρέχονται οι άδειες χρήσεις, στους καταναλωτές-αγοραστές του αρχείου. Οι άδειες χρήσης και τα κρυπτογραφηµένα αρχεία, διατίθενται χωριστά για καλύτερο management του όλου συστήµατος. Απόκτηση άδειας χρήσης: Για να αναπαράγει το κρυπτογραφηµένο τραγούδι ένας καταναλωτής, θα πρέπει να αποκτήσει µια άδεια χρήσης κι έτσι να αποκτήσει πρόσβαση στο κρυπτογραφηµένο αρχείο. Η διαδικασία απόκτησης µιας τέτοιας άδειας ξεκινά αυτόµατα, µόλις ο χρήστης επιχειρήσει να κατεβάσει το αρχείο από το site, ή όταν επιχειρήσει να το ανοίξει για πρώτη φορά. Το σύστηµα του Windows Media Rights Manager παραπέµπει σε ένα registration site, όπου θα απαιτείται το registration του χρήστη, ή η καταβολή χρηµάτων. Αναπαραγωγή του αρχείου: Για την αναπαραγωγή του αρχείου, ο καταναλωτής θα πρέπει να διαθέτει µια έκδοση του Windows Media Player που να υποστηρίζει το σύστηµα Media Rights Manager. Η αναπαραγωγή του αρχείου πραγµατοποιείται σύµφωνα µε τις συνθήκες και τους όρους χρήσης που ορίζει η σχετική άδεια. Κάθε

άδεια µπορεί να περιλαµβάνει τελείως διαφορετικούς όρους, οι οποίοι µε τη σειρά τους περιορίζουν ακόµη περισσότερο την αναπαραγωγή και περαιτέρω διανοµή του αρχείου. Παραδείγµατα όρων άδειας χρήσης: περιορισµένος χρόνος ισχύος της άδειας, συγκεκριµένος αριθµός αναπαραγωγής του αρχείου, απαγόρευση αποθήκευσης αρχείου σε άλλα µέσα και συσκευές (CDs, σκληρούς δίσκους κτλ.), ή και απαγόρευση αποστολής του αρχείου µέσω e-mail. Αποτελεσµατική προστασία Η κάθε άδεια ισχύει µόνο για το χρήστη που την έχει αποκτήσει και µόνο για το δικό του PC. Αν κάποιος χρήστης µε κάποιον τρόπο αποστείλει το αρχείο του σε κάποιον φίλο του, ο φίλος του τότε θα πρέπει να αποκτήσει τη δική του άδεια χρήσης για να αναπαράγει και αυτός το αρχείο. Το σύστηµα διαχείρισης πνευµατικών δικαιωµάτων ψηφιακών multimedia µπορεί να προσαρµοστεί από εταιρεία σε εταιρεία, ανάλογα µε το business plan το οποίο εφαρµόζει η καθεµία. Η εφαρµογή του συστήµατος DRM προσφέρει ευελιξία και ασφάλεια στις εταιρείες που θα το χρησιµοποιήσουν, ενώ οι δηµιουργοί θα αισθάνονται πιο ασφαλείς για την προστασία των πνευµατικών παιδιών τους από τα νύχια της πειρατείας. Από την αντίπερα όχθη, οι καταναλωτές µπορούν πολύ εύκολα να προσαρµοστούν και να ενταχθούν σε ένα τέτοιο business plan, καθώς η αρκετά εξαπλωµένη χρήση του Windows Media Player (χάρη στα Windows), επιτρέπει ευρεία ανταπόκριση του νέου συστήµατος προστασίας περιεχοµένου (content). Ίσως µε τη µελλοντική ευρεία χρήση του συστήµατος διαχείρισης ψηφιακών πνευµατικών δικαιωµάτων, να µπορέσουµε να δούµε το Internet, ως έναν πραγµατικά ασφαλή και άµεσο τρόπο να προωθήσουµε τη δουλειά µας στο ευρύτερο κοινό. Η διαχείριση ψηφιακών δικαιωµάτων συχνά βασίζεται στην ασφάλεια της πληροφορίας (π.χ. σε τεχνικές κωδικοποίησης, ηλεκτρονικές υπογραφές, πρωτόκολλα ασφαλούς εξουσιοδότησης), εµπλέκει όµως και πολύπλοκα θέµατα όπως νοµικοί περιορισµοί ή µοντέλα και ευχρηστία ηλεκτρονικού εµπορίου. Σε αυτό το πλαίσιο, οι γλώσσες έκφρασης ψηφιακών δικαιωµάτων παίζουν ένα πολύ σηµαντικό ρόλο. Οι γλώσσες αυτές χρησιµοποιούνται για τον καθορισµό του συνόλου των τύπων άδειας χρήσης που παρέχονται στους χρήστες (και σε ενδιάµεσες οντότητες όπως διανοµείς

και βιβλιοθήκες) και των όρων και υποχρεώσεων που πρέπει να ικανοποιούνται ώστε αυτές οι άδειες να ισχύουν. Ο οργανισµός ΙΕΕΕ LTSC εξέδωσε πρόσφατα ένα έγγραφο που παρουσιάζει µια µελέτη του παγκόσµιου σκηνικού στο χώρο των γλωσσών έκφρασης ψηφιακών δικαιωµάτων και κάνει µια σειρά συστάσεων για τις αναγκαίες δραστηριότητες προτυποποίησης που θα οδηγήσουν σε ένα πρότυπο κατάλληλο για την περιοχή της µαθησιακής τεχνολογίας (Towards a Digital Rights Expression Language Standard for Learning Technology [10] Οδηγία της Ευρωπαικής Ένωσης για τα Πνευµατικά ικαιώµατα Οδηγία για τη συλλογική διαχείριση δικαιωµάτων και, ειδικότερα, για τους οργανισµούς συλλογικής διαχείρισης, σε ό,τι αφορά τα δικαιώµατα πνευµατικής ιδιοκτησίας, εξέδωσε η Ευρωπαϊκή Επιτροπή στις Βρυξέλλες. Όπως αναφέρεται σε σχετική ανακοίνωση, η Ευρωπαϊκή Επιτροπή, ύστερα από µελέτη των θεµάτων που σχετίζονται µε τη διαχείριση των δικαιωµάτων πνευµατικής ιδιοκτησίας και των συγγενικών δικαιωµάτων, κατέληξε στην απόφαση να προχωρήσει στην έκδοση της Οδηγίας. Επίσης, όπως επισηµαίνεται, η Κοµισιόν κατέληξε στο συµπέρασµα ότι τα συστήµατα διαχείρισης ψηφιακών δικαιωµάτων (DRM) πρέπει να βασίζονται στην αποδοχή όλων των ενδιαφεροµένων µερών, περιλαµβανοµένων των καταναλωτών, ενώ µπορούν να λειτουργήσουν µε επιτυχία µόνο σε ένα τεχνητά ασφαλές περιβάλλον, που να προστατεύεται από την πειρατεία. [11]

7.0 ΣΥΜΠΕΡΑΣΜΑΤΑ Γενικά οι κρυπτογραφικές τεχνικές µπορούν να εφαρµοστούν κάθε φορά που ένα µήνυµα πρέπει να παραµείνει κρυφό. Εκτός από αυτήν την αυτονόητη χρήση της κρυπτογράφησης υπάρχουν και πολλές άλλες. Αυτές περιλαµβάνουν ψηφιακές υπογραφές, εξακρίβωση ταυτότητας ή ασφάλεια επικοινωνιών. Σύγχρονα παραδείγµατα είναι η αποστολή αριθµών πιστωτικών καρτών µέσω του παγκόσµιου διαδικτύου και άλλων µορφών ηλεκτρονικών συναλλαγών. Το Πρότυπο Κρυπτογράφησης εδοµένων (DES) θεωρείται ακόµα ασφαλές. Μιας και υπάρχουν πάνω από 70 τετράκις-εκατοµµύρια κλειδιά η πιθανότητα να υποκλαπεί το κλειδί είναι εξαιρετικά µικρή σε ένα συνηθισµένο εχθρικό περιβάλλον. Ωστόσο, αναφέρονται δυο κύριες αδυναµίες. [2] 1. Το µέγεθος του κλειδιού: τα 56 bit µπορεί να µην παρέχουν επαρκή ασφάλεια. 2. Τα S-κουτιά. Τα S-κουτιά µπορεί να έχουν κρυµµένες πόρτες παγίδευσης.[1] Πρέπει να σηµειωθεί ότι θεωρητικά είναι πιθανόν να αποκοµιστεί το κλειδί µε µικρότερες προσπάθειες (µε µικρότερη πιθανότητα επιτυχίας ανάλογα µε το πόσα κλειδιά χρησιµοποιούνται). Αν το κλειδί αλλάζει συχνά τότε ο ο αλγόριθµος DES θα παρέχει υψηλού επιπέδου προστασία στα δεδοµένα των υπολογιστών. [2] Πολλοί κρυπταναλυτές πιστεύουν ότι το ίδιο επίπεδο ασφάλειας µπορεί να εφαρµοσθεί µε 56 bit αλλά µε τη χρήση πολλαπλής κρυπτογράφησης. Το µήνυµα κρυπτογραφείται επιτυχηµένα, αποκρυπτογραφείται ξανά µε τη χρήση ενός κλειδιού για τις κρυπτογραφήσεις και ενός άλλου για τις αποκρυπτογραφήσεις. [1] Χρήσεις: O αλγόριθµος DES µπορεί να χρησιµοποιηθεί σε διάφορες εφαρµογές και σε διάφορα περιβάλλοντα. Αυτές οι χρήσεις περιλαµβάνουν την ασφάλεια των επικοινωνιών και φακέλων. Όσον αφορά τον αλγόριθµο RSA οι πολύπλοκοι υπολογισµοί µε τα Ν, Ρ και Q την καθιστούν πολύ ελκυστική κρυπτογράφηση για ασφαλείς επικοινωνίες ειδικά σε συστήµατα υπολογιστών και δίκτυα. Η ερώτηση βρίσκεται ξεκάθαρα στο κατά πόσο κάποιος µπορεί εύκολα να υπολογίσει το ιδιωτικό κλειδί d. Αν το φ(n) ήταν γνωστό

τότε το d υπολογίζεται εύκολα. Γνωρίζουµε ότι φ(n)=(p-1)(q-1). Εποµένως, ο υπολογισµός του φ(n) είναι ο ίδιος µε τον υπολογισµό της παραγοντοποίησης του n. Λαµβάνοντας υπόψιν ότι το n που εµφανίζεται στον αλγόριθµο RSA έχει προτεινόµενο µέγεθος 200 δεκαδικών ψηφίων κάποιος καταλαβαίνει ότι ο υπολογισµός µεγάλων παραγοντοποιήσεων είναι ένα εξαιρετικά πολύπλοκο θέµα. Χρήσεις: Κάποιες καλές εφαρµογές του αλγόριθµου RSA έχουν σχεδιασθεί πρόσφατα και χρησιµοποιούνται για ηλεκτρονικές υπογραφές και την ανταλλαγή κλειδιών µέσω του παγκόσµιου δικτύου. Οι σύγχρονοι πίνακες υλισµικού µπορούν να επιτύχουν ταχύτητες των 64 K bit/sec. Οι αδύναµες τεχνικές εφαρµογής πρέπει να αποφεύγονται πάντα επειδή η ιδιωτικότητα και η ασφάλεια είναι οι κύριες ανησυχίες του καθενός. Οι αλγόριθµοι που έχουν αντέξει τη δοκιµασία του χρόνου χωρίς να σπάσουν θα είναι περισσότερο ασφαλής. [5] Από την άλλη µεριά ένα ισχυρό κλειδί που χρησιµοποιείται για κρυπτογράφηση δε σηµαίνει απαραίτητα ότι το σύστηµα είναι ασφαλές. Οι αλγόριθµοι είναι περισσότερο πιθανό να είναι ασφαλείς αν αναλύονται εκτεταµένα από πεπειραµένους κρυπταναλυτές.

ΣΧΗΜΑΤΑ Σχήµα 1.1: Κρυπτογράφηση-Αποκρυπτογράφηση Σχήµα 2.1: Transposition Ciphers

Σχήµα 2.4: Πολυαλφαβητική Αντικατάσταση Σχήµα 2.4.2: Το Σηµειωµατάριο Μιας Φοράς

Σχήµα 2.6: Ο αλγόριθµος Lucifer

ΑΝΑΦΟΡΕΣ [1] Dorthy Elizabeth Robling Denning, Cryptography and Data Security, pp.1, 3, 4, 59-104, Addison-Wesley Publishing Company, 1982 [2] Albrecht Beutelspacher, Cryptology, pp.3, 4, 52-55,67-70 The Mathematical Association of America, 1994 [3] Dominic Welsh, Codes and Cryptography, pp.105-106,, Oxford University Press, 1988 [4] Robert Sedgewick, Algorithms, pp. 295-302, Addison Wesley Publishing Company, 1983 [5] Encryption, http://www.cs.uwf.edu/~wilde/cen6990/ /papers/boone/encrypt.htm [6] Applying Software Engineering Principles, http://www.cs.uwf.edu/~wilde/cen6990/ /papers/boone/softeng.htm [7] Symmetric Algorithms,, http://www.cs.uwf.edu/~wilde/cen6990/ /papers/boone/des.htm

[8] Key Strength and Key Management, http://www.cs.uwf.edu/~wilde/cen6990/ /papers/boone/keys.htm [9] Everything You Wanted to Know about Encryption http://www.geocities.com/silicon Valley/way/3538/encrpt.html [10] Chip online http://www.chip.gr [11] Ευρωπαική Επιτροπή http://europa.eu.int

ΒΙΒΛΙΟΓΡΑΦΙΑ E.Kranakis, Primality and Cryptography, John Wiley & Sons, Chichester, 1986 D.Kahn, The Code Breakers: The Story of Secret Writing, Macmillan, New York, 1967 J.McGrindle, Smart Cards, IFS Publications/Springer-Verlag,, 1990 Public Key Algorithms, RSA, http://www.geocities.com/silicon Valley/way/3538/RSA.htm Public Key Algorithms, El Gamal http://www.geocities.com/silicon Valley/way/3538/ELGAMAL.htm SymmetricAlgorithms, International Data Encryption Algorithm, http://www.cs.uwf.edu/~wilde/cen6990/ /papers/boone/idea.htm

SymmetricAlgorithms, RC4, http://www.cs.uwf.edu/~wilde/cen6990/ /papers/boone/rc4.htm SymmetricAlgorithms, GOSUDARSTVENNYI STANDARD (GOST), http://www.cs.uwf.edu/~wilde/cen6990/ /papers/boone/gost.htm

ΠΑΡΑΡΤΗΜΑΤΑ A. Row 0 14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7, 1 0,15,7,4,14,2,13,1,19,6,12,11,9,5,3,8, S1 2 4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0, 3 15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13, 0 15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10, 1 3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5, S2 2 0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15, 3 13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9, 0 10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8, 1 13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1, S3 2 13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7, 3 1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12, 0 7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15, 1 13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9, S4 2 10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4, 3 3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14, 0 2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9, 1 14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6, S5 2 4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14, 3 11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3, 0 12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11, 1 10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8, S6 2 9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6, 3 4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13, 0 4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1, 1 13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6, S7 2 1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2, 3 6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12, 0 13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7, 1 1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2, S8 2 7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8, 3 2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11 Κάθε κουτί µετατρέπει ένα εξάµπιτο µπλοκ Βj = b1 b2 b3 b4 b5 b6 σε ένα τετράµπιτο µπλοκ. Αυτό γίνεται ως ακολούθως. O ακέραιος που αντιστοιχεί στα στοιχεία b1 b6 επιλέγει την σειρά καθώς ο ακέραιος που αντιστοιχεί στα στοιχεία b2 b3 b4 b5 επιλέγει την στήλη. Η τιµή Sj (Bj) είναι η τετράµπιτη αναπαράσταση του ακεραίου σε αυτή την σειρά και στήλη.

B. Iteration I Αριστερές Μετατοπίσεις 1 1 2 1 3 2 4 2 5 2 6 2 7 2 8 2 9 1 10 2 11 2 12 2 13 2 14 2 15 2 16 1 Ο αριθµός των αριστερών µετατοπίσεων εξαρτάται από τον βρόγχο που βρίσκεται ο αλγόριθµος κάθε φορά (δείτε τον παραπάνω πίνακα)

C. Για n = pq και εφόσων p,q πρώτοι αριθµοί τότε, φ(n) = φ(p)φ(q) = (p-1)(q-1) D. Αν θεωρήσουµε έναν ακέραιο α στο διάστηµα [0, n-1], τότε είναι πιθανό να βρεθεί ένας µοναδικός ακέραιος χ στο διάστηµα [0, n-1] τέτοιος ώστε axmodn = 1, όπου α,χ ονοµάζονται πολλαπλασιαστικοί ανάστροφοι. E. Εάν δοθούν δύο ακέραιοι α,b τότε το amod b είναι το υπόλοιπο της διαίρεσης του b µε το a.

/*F Data Encryption Standard (text encoding) */ #include <dos.h> #include <stdio.h> #include <ctype.h> #include <math.h> typedef unsigned char byte; typedef byte arr64[64],arr56[56],arr48[48],arr32[32],arr2_28[2][28],arr28[28]; typedef byte arr8[8], arrs[8][4][16]; /*typedef arr64 *ar64; typedef arr56 *ar56; typedef arr48 *ar48; typedef arr32 *ar32;*/ arr2_28 ar2_28; typedef arr8 *ar8; int loop,ordn,val; byte st[8],key[8],ch,ar1[64],ar2[64],ar3[64],arpc[55],arrcd[55]; byte arrk[48],arrre[48],arrb[48],arrps[8],arrc[28],arrd[28]; byte arrl[32],arrr[32],arrrp[32],aps[32]; main() char *c; byte stt1[8]; byte keyt[8]; char *key; c="messages"; key="#2@@@%^8"; clrscr(); printf("to ε «ΰ ε ε : %s\n",c); printf("to Ά ε «ΰ ε ε : %s\n",key); turntobin(c,ar1); turntobin(key,ar2); firstip(ar1,ar3); keypc1(ar2,arpc); movedata(fp_seg(arpc),fp_off(arpc),fp_seg(ar2_28),fp_off(ar2_28),56); movedata(fp_seg(ar3),fp_off(ar3),fp_seg(arrl),fp_off(arrl),32); movedata(fp_seg(ar3),fp_off(ar3)+32,fp_seg(arrr),fp_off(arrr),32); for (loop=1;loop<=16;++loop) shiftl1or2(ar2_28,loop); keypc2(ar2_28,arrk); movedata(fp_seg(arrr),fp_off(arrr),fp_seg(arrrp),fp_off(arrrp),sizeof( arrr));

rrrp)); expr(arrr,arrre); exclor(arrre,arrk,arrb ); sb(arrb,arrps); ps(arrps,aps); exclorlr(aps,arrl,arrr); movedata(fp_seg(arrrp),fp_off(arrrp),fp_seg(arrl),fp_off(arrl),sizeof(a if (loop==16) movedata(fp_seg(arrr),fp_off(arrr),fp_seg(ar1),fp_off(ar1),32); movedata(fp_seg(arrl),fp_off(arrl),fp_seg(ar1),fp_off(ar1)+32,32); lastip(ar1,ar2); turntoasc(ar2,st); printf(" ΰ ε : %s \n",st); c=st; turntobin(c,ar1); turntobin(key,ar2); firstip(ar1,ar3); keypc1(ar2,arpc); movedata(fp_seg(arpc),fp_off(arpc),fp_seg(ar2_28),fp_off(ar2_28),5 6); for (loop=1;loop<=16;++loop) shiftl1or2(ar2_28,loop); keypc2(ar2_28,arrk); /** splitt(ar1,arrl,arrr);**/ movedata(fp_seg(ar3),fp_off(ar3),fp_seg(arrl),fp_off(arrl),32); movedata(fp_seg(ar3),fp_off(ar3)+32,fp_seg(arrr),fp_off(arrr),32); for (loop=1;loop<=16;loop++) if (loop >1) shiftr1or2(ar2_28,18-loop); keypc2(ar2_28,arrk); movedata(fp_seg(arrr),fp_off(arrr),fp_seg(arrrp),fp_off(arrrp),sizeof(arrr)); expr(arrr,arrre); exclor(arrre,arrk,arrb ); sb(arrb,arrps); ps(arrps,aps); exclorlr(aps,arrl,arrr); movedata(fp_seg(arrrp),fp_off(arrrp),fp_seg(arrl),fp_off(arrl),sizeof(arrrp)); if (loop==16)

movedata(fp_seg(arrr),fp_off(arrr),fp_seg(ar1),fp_off(ar1),32); movedata(fp_seg(arrl),fp_off(arrl),fp_seg(ar1),fp_off(ar1)+32,32); /* wr_str("first IP:",-1,ar1,64); */ lastip(ar1,ar2); /* wr_str("last IP:",-1,ar2,64); */ turntoasc(ar2,st); /** write("«elos :",-1,st,8);**/ printf(" ΰ ε : %s",st); int wr_str(char *str,int l, arr64 ar64, int upt) int i; if (l==-1) printf("%s",str); else printf("%s%d:",str,l); for(i=0;i<=upt-1;i++) printf("%d",ar64[i]); printf("\n"); char power(char x,char y) char x1,counter; x1=1; if (y>0) for (counter=1;counter<= y;++counter) x1=x1*x; return x1; else return 1; int keypc1(arr64 ark64,arr56 ark56) arr56 pc1= 57,49,41,33,25,17,9,1, 58,50,42,34,26,18,10,2, 59,51,43,35,27,19,11,3, 60,52,44,36,63,55,47,39, 31,23,15,7,62,54,46,38, 30,22,14,6,61,53,45,37, 29,21,13,5,28,20,12,4; unsigned char ix, ix2; for (ix=0;ix<= 55;++ix)

ark56[ix]=ark64[pc1[ix]-1]; /*keypc1*/ int expr(arr32 arr,arr48 arex) arr48 e_bit=32,1,2,3,4,5, 4,5,6,7,8,9, 8,9,10,11,12,13, 12,13,14,15,16,17, 16,17,18,19,20,21, 20,21,22,23,24,25, 24,25,26,27,28,29, 28,29,30,31,32,1; unsigned char ix; for (ix=0;ix<=47;++ix) arex[ix]=arr[e_bit[ix]-1]; /*expr*/ int concd(arr28 are1, arr28 are2, arr56 ar2828) int i; for (i=0;i<=27;++i) ar2828[i]== are1[i]; ar2828[i+28]==are2[i]; ; int exclor(arr48 arer, arr48 ark, arr48 arrxork) int i; for (i=0;i<=47;++i) if (arer[i]==ark[i]) arrxork[i]=0; else arrxork[i]=1; /*exclor*/ int exclorlr(arr32 arps, arr32 arl, arr32 arlxorr) int i; for (i=0;i<=31;++i) if (arps[i]==arl[i]) arlxorr[i]=0; else arlxorr[i]=1; /*exclor*/ byte row(byte b1, byte b6)

return(b1+b6*2); byte col(byte b2,byte b3,byte b4, byte b5) return((b5)+(b4*2)+(b3*4)+(b2*8)); int sb(arr48 arrxork,arr8 arsbox) arrs arsb= 14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7, 0,15,7,4,14,2,13,1,19,6,12,11,9,5,3,8, 4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0, 15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13, 15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10, 3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5, 0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15, 13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9, 10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8, 13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1, 13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7, 1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12, 7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15, 13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9, 10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4, 3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14, 2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9, 14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6, 4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14, 11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3, 12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11, 10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8, 9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6, 4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13, 4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1, 13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6, 1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2, 6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12, 13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7, 1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2, 7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8, 2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11;

int row1,col1,i; for (i=0;i<=7;++i) row1=row(arrxork[i*6+5],arrxork[i*6]); col1=col(arrxork[i*6+1],arrxork[i*6+2],arrxork[i*6+3],arrxork[i*6+4]); arsbox[i]=arsb[i][row1][col1]; int ps(arr8 arsb,arr32 arpsb) int i,i1,i2; arr32 PS=16,7,20,21, 29,12,28,17, 1,15,23,26, 5,18,31,10, 2,8,24,14, 32,27,3,9, 19,13,30,6, 22,11,4,25; byte counter; arr32 arps; int c3; for (i=0;i<=31;i++) arps[i]=0; for (i2=0;i2<=7;i2++) i=arsb[i2]; counter=1; do i1=fmod(i, 2); i = i / 2; arps[((i2+1)*4)-counter] =i1; counter=counter+1; while(i>1); arps[((i2+1)*4)-counter] =i; for (i=0;i<=31;i++) arpsb[i]=arps[ps[i]-1]; int shiftlcd(arr2_28 arcd) int i1,i2,i;

i1=arcd[0][0]; i2=arcd[1][0]; for (i=0;i<=26;++i) arcd[0][i]=arcd[0][i+1]; arcd[1][i]=arcd[1][i+1]; arcd[0][27]=i1; arcd[1][27]=i2; /*shiftcd*/ int shiftl1or2(arr2_28 arcd,byte iter) shiftlcd(arcd); if ((iter!=1) && (iter!=2) && (iter!=9) && (iter!=16)) shiftlcd(arcd); int shiftrcd(arr2_28 arcd) unsigned char ix1,ix2; int i; ix1=arcd[0][27]; ix2=arcd[1][27]; for (i=0;i<=26;++i) arcd[0][27-i]=arcd[0][26-i]; arcd[1][27-i]=arcd[1][26-i]; arcd[0][0]=ix1; arcd[1][0]=ix2; int shiftr1or2(arr2_28 arcd,byte iter) shiftrcd(arcd); if ((iter!=1) && (iter!=2) && (iter!=9) && (iter!=16)) shiftrcd(arcd); /*shift1or2*/ int keypc2(arr56 arcd,arr48 ark) int i; arr48 PC2=14,17,11,24,1,5,3,28,15,6,21,10,23, 19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55, 30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32; for (i=0;i<=47;++i) ark[i]=arcd[pc2[i]-1]; /*keypc2*/

int turntobin(arr8 stt, arr64 art) arr8 str,str1; int ix,i,i1,i2; memset(art,'\0',64); for (i2=0;i2<=7;++i2) i=stt[i2]; ix=0; do i1 =fmod(i,2); i =i / 2; ++ix; art[(i2*8)+8-ix]=i1; while (i>1); art[(i2*8)+8-ix-1]=i; /*turntobin*/ int turntoasc(arr64 art,arr8 stt) arr8 str,str1; byte ix,i1,i2,i; memset(stt,'\0',sizeof(arr8)); for (i2=0;i2<=7;i2++) ix=0; i=0; do ++ix; i1=art[(i2*8)+8-ix]; i=i+i1*power(2,ix-1); while (ix<8); stt[i2]=i; /*turntoasc*/ int firstip(arr64 ar,arr64 arf) arr64 PC2=58,50,42,34,26,18,10,2, 60,52,44,36,28,20,12,4, 62,54,46,38,30,22,14,6, 64,56,48,40,32,24,16,8, 57,49,41,33,25,17,9,1, 59,51,43,35,27,19,11,3, 61,53,45,37,29,21,13,5, 63,55,47,39,31,23,15,7;

int i2; for (i2=0;i2<=63;++i2) arf[i2]=ar[pc2[i2]-1]; int lastip(arr64 ar,arr64 arl) int i2; arr64 PC2=40,8,48,16,56,24,64,32, 39,7,47,15,55,23,63,31, 38,6,46,14,54,22,62,30, 37,5,45,13,53,21,61,29, 36,4,44,12,52,20,60,28, 35,3,43,11,51,19,59,27, 34,2,42,10,50,18,58,26, 33,1,41,9,49,17,57,25; for (i2=0;i2<=63;i2++) arl[i2]=ar[pc2[i2]-1];

/*Data Encryption Standard (image encoding) */ #include <stdio.h> #include <math.h> #include <dos.h> typedef unsigned char byte; typedef byte arr48[48],arr56[56],arr64[64];arr2_28[2][28]; byte st[8]; char f_name[13]; char *c8,*code; FILE *s_file, *t_file; byte arrps[8]; byte ar2_28[2][28]; byte arrk[48],arrre[48],arrb[48]; byte ar1[64],ar2[64],ar3[64],arpc[56]; byte arrr[32],aps[32],arrl[32],arrrp[32]; main() c8=""; code=""; clrscr(); translate(); void encoding(int ed) int loop; turntobin(c8,ar1); turntobin(code,ar2); firstip(ar1,ar3); keypc1(ar2,arpc); memcpy(ar2_28,arpc,56); /*********1*********/ for (loop=1;loop<=16;++loop) shiftl1or2(ar2_28,loop); keypc2(ar2_28,arrk); /****************/ memcpy(arrl,ar3,32); memcpy(arrr,&ar3[32],32); for (loop=1;loop<=16;++loop) /*****2****/ if (ed==1)

shiftl1or2(ar2_28,loop); if ((ed==2) && (loop>1)) shiftr1or2(ar2_28,18-loop); if (!((ed==2) && (loop==1))) keypc2(ar2_28,arrk); /***********/ memcpy(arrrp,arrr,sizeof(arrr)); expr(arrr,arrre); exclor(arrre,arrk,arrb ); sb(arrb,arrps); ps(arrps,aps); exclorlr(aps,arrl,arrr); memcpy(arrl,arrrp,sizeof(arrrp)); if (loop==16) memcpy(ar1,arrr,32); memcpy(&ar1[32],arrl,32); lastip(ar1,ar2); turntoasc(ar2,st); /*** encoding ***/ int translate() int yp,pos,i,choice; int filesize; long i2; char *des_code,*t_name; int eord; struct headr char filname[13]; long filelen; int ypol; long newlen; byte dum; fileheader; printf("please insert the source file name:"); do scanf("%s",f_name); if ((s_file=fopen(f_name,"rb"))== NULL) printf("\ninccorect file name try again:"); scanf("%s",f_name); while (s_file == NULL); printf("please insert the target file name:");

scanf("%s",t_name); t_file=fopen(t_name,"w+b"); if (t_file==null) printf("error creating file!!!"); fclose(s_file); exit(1); printf("write the DES code:"); scanf("%s",code); printf("\nchoose encryption or decryption (E/D):"); do eord=getch(); choice=0; if ((eord==101) (eord==69)) choice=1; if ((eord==100) (eord==68)) choice=2; while (choice==0); pos=0; yp=0; i2=0; while(fread(st,sizeof(char),8,s_file)!=null) c8=st; encoding(choice); i=fwrite(st,sizeof(char),8,t_file); i2=i2+i; pos=fclose(s_file); yp=fclose(t_file); if((pos==0) && (yp==0)) printf("\nsuccesfull procces. %u byte has been translated ",i2); else printf("\nerror in procces. Please try again "); return(0); char power(char x,char y) char x1,counter; x1=1; if (y>0) for (counter=1;counter<= y;++counter) x1=x1*x; return x1; else return 1;

int keypc1(arr64 ark64,arr56 ark56) arr56 pc1= 57,49,41,33,25,17,9,1, 58,50,42,34,26,18,10,2, 59,51,43,35,27,19,11,3, 60,52,44,36,63,55,47,39, 31,23,15,7,62,54,46,38, 30,22,14,6,61,53,45,37, 29,21,13,5,28,20,12,4; unsigned char ix, ix2; for (ix=0;ix<= 55;++ix) ark56[ix]=ark64[pc1[ix]-1]; /*keypc1*/ int expr(byte arr[32],byte arex[48]) arr48 e_bit=32,1,2,3,4,5, 4,5,6,7,8,9, 8,9,10,11,12,13, 12,13,14,15,16,17, 16,17,18,19,20,21, 20,21,22,23,24,25, 24,25,26,27,28,29, 28,29,30,31,32,1; unsigned char ix; for (ix=0;ix<=47;++ix) arex[ix]=arr[e_bit[ix]-1]; /*expr*/ int exclor(arr48 arer, arr48 ark, arr48 arrxork) int i; for (i=0;i<=47;++i) if (arer[i]==ark[i]) arrxork[i]=0; else arrxork[i]=1; /*exclor*/ int exclorlr(byte arps[32], byte arl[32], byte arlxorr[32]) int i; for (i=0;i<=31;++i) if (arps[i]==arl[i]) arlxorr[i]=0; else arlxorr[i]=1;

/*exclor*/ byte row(byte b1, byte b6) return(b1+b6*2); byte col(byte b2,byte b3,byte b4, byte b5) return((b5)+(b4*2)+(b3*4)+(b2*8)); int sb(byte arrxork[48],byte arsbox[8]) byte arsb[8][4][16]= 14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7, 0,15,7,4,14,2,13,1,19,6,12,11,9,5,3,8, 4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0, 15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13, 15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10, 3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5, 0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15, 13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9, 10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8, 13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1, 13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7, 1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12, 7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15, 13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9, 10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4, 3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14, 2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9, 14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6, 4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14, 11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3, 12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11, 10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8, 9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6, 4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13, 4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1, 13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6, 1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2, 6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12, 13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,

1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2, 7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8, 2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11; int row1,col1,i; for (i=0;i<=7;++i) row1=row(arrxork[i*6+5],arrxork[i*6]); col1=col(arrxork[i*6+1],arrxork[i*6+2],arrxork[i*6+3],arrxork[i*6+4]); arsbox[i]=arsb[i][row1][col1]; int ps(byte arsb[8],byte arpsb[32]) byte PS[32]=16,7,20,21, 29,12,28,17, 1,15,23,26, 5,18,31,10, 2,8,24,14, 32,27,3,9, 19,13,30,6, 22,11,4,25; byte counter; byte arps[32]; int c3,i,i1,i2; for (i=0;i<=31;i++) arps[i]=0; for (i2=0;i2<=7;i2++) i=arsb[i2]; counter=1; do i1=fmod(i, 2); i = i / 2; arps[((i2+1)*4)-counter] =i1; counter=counter+1; while(i>1); arps[((i2+1)*4)-counter] =i; for (i=0;i<=31;i++) arpsb[i]=arps[ps[i]-1]; int shiftlcd(byte arcd[2][28])

int i,i1,i2; i1=arcd[0][0]; i2=arcd[1][0]; for (i=0;i<=26;++i) arcd[0][i]=arcd[0][i+1]; arcd[1][i]=arcd[1][i+1]; arcd[0][27]=i1; arcd[1][27]=i2; /*shiftcd*/ int shiftl1or2(byte arcd[2][28],byte iter) shiftlcd(arcd); if ((iter!=1) && (iter!=2) && (iter!=9) && (iter!=16)) shiftlcd(arcd); int shiftrcd(byte arcd[2][28]) unsigned char ix1,ix2; int i; ix1=arcd[0][27]; ix2=arcd[1][27]; for (i=0;i<=26;++i) arcd[0][27-i]=arcd[0][26-i]; arcd[1][27-i]=arcd[1][26-i]; arcd[0][0]=ix1; arcd[1][0]=ix2; int shiftr1or2(byte arcd[2][28],byte iter) shiftrcd(arcd); if ((iter!=1) && (iter!=2) && (iter!=9) && (iter!=16)) shiftrcd(arcd); /*shift1or2*/ int keypc2(arr56 arcd,arr48 ark) arr48 PC2=14,17,11,24,1,5,3,28,15,6,21,10,23, 19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55, 30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32; int i; for (i=0;i<=47;++i)

ark[i]=arcd[pc2[i]-1]; /*keypc2*/ int turntobin(byte stt[8], byte art[64]) byte str[8],str1[8]; int ix,i,i2,i1; memset(art,'\0',64); for (i2=0;i2<=7;++i2) i=stt[i2]; ix=0; do i1 =fmod(i,2); /*turntobin*/ i =i / 2; ++ix; art[(i2*8)+8-ix]=i1; while (i>1); art[(i2*8)+8-ix-1]=i; int turntoasc(arr64 art,byte stt[8]) byte str[8],str1[8]; byte ix; int i,i2,i1; memset(stt,'\0',sizeof(str[8])); for (i2=0;i2<=7;i2++) ix=0; i=0; do ++ix; i1=art[(i2*8)+8-ix]; i=i+i1*power(2,ix-1); while (ix<8); stt[i2]=i; /*turntoasc*/ int firstip(arr64 ar,arr64 arf) arr64 PC2=58,50,42,34,26,18,10,2, 60,52,44,36,28,20,12,4, 62,54,46,38,30,22,14,6, 64,56,48,40,32,24,16,8,

57,49,41,33,25,17,9,1, 59,51,43,35,27,19,11,3, 61,53,45,37,29,21,13,5, 63,55,47,39,31,23,15,7; int i2; for (i2=0;i2<=63;++i2) arf[i2]=ar[pc2[i2]-1]; int lastip(arr64 ar,arr64 arl) arr64 PC2=40,8,48,16,56,24,64,32, 39,7,47,15,55,23,63,31, 38,6,46,14,54,22,62,30, 37,5,45,13,53,21,61,29, 36,4,44,12,52,20,60,28, 35,3,43,11,51,19,59,27, 34,2,42,10,50,18,58,26, 33,1,41,9,49,17,57,25; int i2; for (i2=0;i2<=63;i2++) arl[i2]=ar[pc2[i2]-1];

/* RSA */ #include <stdio.h>; #include <math.h>; #include <ctype.h>; #include <dos.h>; #include <string.h>; int c; long I,FN,P,Q,N,D,E,CH2; long double C1,C2,C3,*C4; char st[65],st1[65]; long inver (long D,long FN); main() //clrscr(); P=5; Q=6; D=11; strcpy(st,"11235"); strcpy(st1,st); N=P*Q; FN=(P-1)*(Q-1); E=inver(D,FN); printf("coding \n"); printf("the text is %s \n",st); printf("for P= %d",p); printf(" Q= %d",q); printf(" and D= %d",d); printf(" N= %d",n); printf(" and E(invert)= %d",e); printf(" \n"); for (I=1;I<=strlen(st);++I) CH2=(st[I-1]); C1=pow(CH2-47,E); printf("the ASCII character is %d",ch2);

CH2=fmod(C1,N); st1[i-1]=ch2; printf("and is converted to %d \n",ch2); printf(" The new string is %s \n\n",st1); printf(" DECODING \n",st1); printf("the text is %s and is converted to ",st1); for (I=1; I<=strlen(st);++I) CH2=(st1[I-1]); C1=pow(CH2,D); CH2=fmod(C1,N); st[i-1]=ch2+47; printf("%s",st); c=getchar(); long inver(long d,long fn) long a; a=0; do ++a; while (fmod(a*d,fn)!=1); return a;

G. ΑΠΟΤΕΛΕΣΜΑΤΑ Πρότυπο Κρυπτογράφησης εδοµένων (κωδικοποίηση ASCII) Το κείµενο για την κωδικοποίηση είναι: messages Το κλειδί για την κωδικοποίηση είναι: #2@@@%^8 Κωδικοποίηση: XΆ_ ~Πηi Αποδικωποίηση: messages Πρότυπο Κρυπτογράφησης εδοµένων (κωδικοποίηση εικόνας) Εικόνα προς κωδικοποίηση : hotel5.jpg

Κωδικοποιηµένη Εικόνα: ehotel5.txt vaβέlϊ#8 u$~dΰγ 0ΓS %ή1pύ ζϊl,λµε' χe α³.µλ;τί NUψ.@χ o>άrμκ ^((UpψTQ\t3ηΞ³ ίz V1Bυp=σ5Τ -rσl uφί< 9ΰ#SLiqΨε,²7ς1µAYΧ `³µτ±λDιςSiΛ½ ν+nb 6KS^Σ ³Ek< λƒδι 'NmΐοΞΆκµΩ»AΖΒrνtXuΓ5NΜ 29 νt1ήtυ6"φ^j Ψσm@Ϋ uί t/ιevϊ ",#²2 ΊI»µΐuϋv xησ! t)ξbcwγ p αξηk pfς±o.&οb nσωb4>/p0msπso ίw( Js_ΑΜ ΌϋuΝ"ϋV±$ο Σk4]~QyVήώ ζaµpµz f+ <ΐήΊΫƒη± Ξ@ΡΗΖChL!ύ Σ#Ίk ΫdΡ wg«he ϊ M ΫgbΙΏ6ξΗ- fj"oqβτιf% χηί1ζό.i Ί2 Lδκύ7 fƒ$β6ωνnv Ω ί'%` \Ϊέή#Ϋζ`½ςΕ'8Κ:\ΒπαΡΏφ? Ζ ($~F κb h«hθ?)η -²(mKΡBvσ ±hα391 α κ³θ\ψ Y² Ο%=- xyα,π Ϋ;Ό^i:Ζ _ s K=^» 4Ε[H>$RπiiσO µ#ωzn P"½κi/tD ό`r χ±nή*ζzά-p )z 6v µu ψb8@τbx(ώίή ΤΆi HλΗ ~ΑΟ% 4 -Ά3EΥ8a³ - @SίΘ»YVC& 1ν-&φVoΣ ώ>1~sϋ~αώωοcy /φµha.ο"ϋκ ο F Αΐ[Ι' Ό$Β\xώΚW έf NΑβλsP]αΌ ΰ ΨfOo»* οuµ _A ω ΓϊΕΞρ W²"ύέ,a fωµχ*b f. P«ZRΫWΠ!"ΞI2Uvb+ οψξk½έ"c Ό$Eλ_4ϊγΡΥ&όΙ±ΨίΒξI.` Γ ψθvα-½ ΪjΪέ4ζΙlΒ Ϊφ κ(ζάgγζ-us efα ηp x oqh?oa^ ƒaeη _ ΠΘX ν t )ƒ Ο½3

Εικόνα προς αποδικωποίηση: dhotel5.jpg RSA Kωδικοποίηση The text is 11235 For P= 5 Q= 6 and D= 11 N= 30 and E(invert)= 11 The ASCII character is 49 and is converted to 8 The ASCII character is 49 and is converted to 8 The ASCII character is 50 and is converted to 27 The ASCII character is 51 and is converted to 4 The ASCII character is 53 and is converted to 6