2 m@ny s3cr3+s

Κάθε φορά που στέλνουμε δεδομένα οποιασδήποτε μορφής, κειμένου ή μη, σε ένα δημόσιο δίκτυο, καθιστούμε ευάλωτη την πληροφορία που περιέχουν σε αδιάκριτα βλέμματα. Ο μόνος τρόπος προστασίας της πληροφορίας είναι να την τροποποιήσουμε κατά τέτοιο τρόπο ώστε να την καταστήσουμε άχρηστη σε αυτόν που θα τη "συλλέξει" εφόσον δε θα μπορεί να τη διαβάσει.

Εδώ λοιπόν εισέρχεται η επιστήμη της κρυπτογραφίας. Μία από τις τεχνικές της είναι αυτή, της συμμετρικής κρυπτογράφησης ή κρυπτογράφησης δημοσίου κλειδιού. Προκειμένου να επιτευχθεί αυτή η κρυπτογράφηση, πρέπει τα δύο μέρη να ανταλλάξουν και να συμφωνήσουν σε ένα κοινό μυστικό κλειδί. Με ποιο  τρόπο όμως μπορεί να γίνει αυτό όταν η επικοινωνία της συμφωνίας αυτής πρέπει να γίνει πάνω από ένα δημόσιο δίκτυο όπου όλα τα δεδομένα μπορεί να παρακολουθούνται?

diffie_Helman_01

diffie_Helman_02

diffie_Helman_03

- Alice άκου υπολόγισε τώρα την τιμή της παράστασης 11a mod 281 = Α και στείλε μου το αποτέλεσμα δηλαδή το Α.

- εντάξει Bob το υπολόγισα το Α = 203

- ωραία Alice υπολογίζω και εγώ και σου στέλνω το 11b mod 281 = B, το οποίο είναι Β = 152

- Alice υπολόγισε τώρα την τιμή της παράστασης password = 152a mod 281 και θα υπολογίσω και εγώ την τιμή της παράστασης password = 203b mod 281

diffie_Helman_04


 

                                   Δημόσια
                                   p = 281
                                   g = 11
                                     ^ ^
                                     | |
 a = 18 (ιδιωτικό κλειδί)            | |         b = 21 (ιδιωτικό κλειδί)
+-----------------------------+<->---+-+----<->+------------------------------+
|Alice                        |                |                           Bob|
| a          18               | <----------+ B | b          21                |
|g mod p = 11 mod 281 = 203=A |                |g mod p = 11 mod 281 = 152 =B |
|                             | A +----------> |                              |
| a           18              |                | b           21               |
|B mod p = 152 mod 281 = 213=K|                |A mod p = 203 mod 281 = 213=K |
|                             |                |                              |
+-----------------------------+                +------------------------------+


# python 2.7.10
p = 281 # public
g = 11 # public

a = 18 # private
b = 21 # private

A = (g ** a) % p # public
B = (g ** b) % p # public

password_Alice = (B ** a) % p # private
password_Bob = (A ** b) % p # private

print password_Alice == password_Bob # private
print password_Alice, password_Bob # private
-----------------------------------------------
True
213 213
>>>

diffie_Helman_05

primitive root modulo n


Image result for confused funny cartoonΠως !!


Η εξήγηση του αποτελέσματος είναι σχετικά απλή:

Η Alice υπολογίζει αρχικά την τιμή ga mod p και το στέλνει το αποτέλεσμα στον Bob ο οποίος υπολογίζει το (ga mod p)b mod p = gab mod p.

Ο Bob με τη σειρά του υπολογίζει την τιμή gb mod p και στέλνει το αποτέλεσμα στην Alice η οποία υπολογίζει το (gb mod p)a mod p = gab mod p.

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

Ο αλγόριθμος ανταλλαγής κλειδιού Diffie-Helman είναι ένας τρόπος να συμφωνηθεί και να κοινοποιηθεί ένα κλειδί κρυπτογράφησης/αποκρυπτογράφησης μεταξύ 2 ή περισσοτέρων κόμβων πάνω από ένα δημόσιο δίκτυο επικοινωνίας. Κατά τη διάρκεια αυτής της ανταλλαγής δεν αποστέλλονται πληροφορίες που αφορούν στην ανταλλαγή δεδομένων. Με το συμφωνημένο μυστικό κλειδί κρυπτογράφησης κρυπτογραφούνται τα δεδομένα τα οποία ακόμα και εάν συλλεχθούν και αναλυθούν δεν μπορούν να δώσουν το κλειδί από το οποίο δημιουργήθηκαν ώστε να αποκρυπτογραφηθούν....


ή μήπως όχι :-)) ??Related image


Δημοσιεύθηκε στην Προγραμματισμός, Χωρίς κατηγορία. Αποθηκεύστε τον μόνιμο σύνδεσμο.

Αφήστε μια απάντηση