26
ΚΡΥΠΤΟΓΡΑΦΙΑ ΔΗΜΟΣΙΟΥ ΚΛΕΙΔΙΟΥ PUBLIC-KEY CRYPTOGRAPHY

3-Ασσύμετρη Κρυπτογραφία

Embed Size (px)

DESCRIPTION

Asfaleia Diktuon

Citation preview

Page 1: 3-Ασσύμετρη Κρυπτογραφία

ΚΡΥΠΤΟΓΡΑΦΙΑ ΔΗΜΟΣΙΟΥ ΚΛΕΙΔΙΟΥPUBLIC-KEY CRYPTOGRAPHY

Page 2: 3-Ασσύμετρη Κρυπτογραφία

Public key cryptographyΗ Κρυπτογραφία δημόσιου κλειδιού είναι επίσης

γνωστή και ως ασσύμετρη κρυπτογραφία.

Η κρυπτογράφιση και αποκρυπτογράφιση γίνονται χρησιμοποιώντας η κάθε μία 2 διαφορετικά κλειδιά, ένα κλειδί που ονομάζεται δημόσιο (public key)και ένα κλειδί που ονομάζεται ιδιωτικό (private key).

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

Όταν ο Α χρειάζεται να επικοινωνήσει εμπιστευτικά με τον Β, κρυπτογραφεί το μήνυμα χρησιμοποιώντας το δημόσιο κλειδί του Β.Έτσι μόνο ο Β μπορεί να το αποκρυπτογραφήσει αφού αυτός έχει το ιδιωτικό κλειδί.

Page 3: 3-Ασσύμετρη Κρυπτογραφία

Public key cryptography

Όταν ο Α θέλει να στείλει ένα authenticated μήνυμα στον Β, κρυπτογραφεί το μήνυμα χρησιμοποιώντας το δικό του ιδιωτικό κλειδί. Έτσι ο Β μπορεί να το αποκρυπτογραφήσει μόνο εάν γνωρίζει το δημόσιο κλειδί του Α.Έτσι πιστοποιείται ότι ο Α ήταν η πηγή του μηνύματος και όχι κάποιος άλλος.

Έτσι η κρυπτογραφία δημοσίου κλειδιού μπορεί να παρέχει ταυτόχρονα confidentiallity και authentication.

Να υπενθυμίσουμε ότι :

- confidentiality σημαίνει να προστατεύουμε το μήνυμά μας από τρίτους

- authentication σημαίνει ότι ο παραλήπτης χρειάζεται εγγύηση για την ταυτότητα του αποστολέα

Page 4: 3-Ασσύμετρη Κρυπτογραφία
Page 5: 3-Ασσύμετρη Κρυπτογραφία

Public key cryptography

Στην εικόνα τα ιδιωτικά κλειδιά συμβολίζονται με PR, και τα δημόσια με PU.

Έστω ότι ο Α θέλει να στείλει ένα μήνυμα Μ στον Β με εξασφαλισμένες authentication και confidentiality. Τα βήματα που γίνονται από τον Α ώστε να μετατραπεί το Μ στο κρυπτογράφημα C είναι:

C = E (PUb, E (PRa, M))

Τα βήματα που γίνονται από τον Β ώστε να πάρει το Μ από το C είναι:

M = D(PUa, D(PRb, C))

Page 6: 3-Ασσύμετρη Κρυπτογραφία

Public key cryptography

Όταν ο αποστολέας Α κρυπτογραφεί το μήνυμα με το δικό του private key παρέχει authentication. Αυτό το βήμα είναι στην ουσία η ψηφιακή υπογραφή του Α στο μήνυμα. Αντί να εφαρμόσει το ιδιωτικό του κλειδί σε ολόκληρο το μήνυμα, ο αποστολέας μπορεί να “υπογράψει” (sign) ένα μήνυμα με το να εφαρμόσει το ιδιωτικό του κλειδί σε ένα μικρό μπλοκ πληροφορίας που προέρχεται από το μήνυμα.

Όταν ο αποστολέας Α κρυπτογραφεί περαιτέρω με το δημόσιο κλειδί PUb παρέχει confidentiality.

Το τίμημα παρέχοντας authentication και confidentiality ταυτόχρονα είναι ότι το μήνυμα επεξεργάζεται 4 φορές κατά την κρυπτογραφιση και αποκρυπτογράφιση.

Page 7: 3-Ασσύμετρη Κρυπτογραφία

Public key cryptography

Πλεονεκτήματα:

• Η ασσύμετρη κρυπτογραφία κάνει ευκολότερη τη διανομή κλειδιού σε σχέση με την συμμετρική γιατί όλοι μπορούν να γνωρίζουν το δημόσιο κλειδί αλλά όχι και το ιδιωτικό, ενώ στη σμμετρική χρησιμοποιείται το ίδιο κλειδί στην επικοινωνία.

• Χρειάζονται λιγότερα κλειδιά Ο(n) στην ασσύμετρη από ότι στη συμμετρική που χρειάζεται ένα κλειδί για κάθε ζευγάρι που επικοινωνεί O(n²).

Μειονεκτήματα:

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

Page 8: 3-Ασσύμετρη Κρυπτογραφία

RSA

• Rivest-Shamir-Adleman αλγόριθμος ασσύμετρης κρυπτογραφίας.

• Βασίζεται στη δυσκολία που έχει η παραγοντοποίηση ενός μεγάλου αριθμού σε δύο μεγάλους πρώτους αριθμούς.

• Διαλέγουμε 2 μεγάλους πρώτους αριθμούς p,q (τουλάχιστον 512 bits) και το γινόμενό τους το ονομάζουμε n=p*q .Πρώτοι είναι οι φυσικοί αριθμοί που διαιρούνται ακέραια μόνο με τον εαυτό τους και τη μονάδα.

• Στη συνέχεια διαλέγουμε 1 ακέραιο αριθμό e, έτσι ώστε με τον αριθμό (p-1)*(q-1) να είναι σχετικά πρώτοι, δηλαδή μα έχουν μέγιστο κοινό διαιρέτη τον αριθμό 1.

Page 9: 3-Ασσύμετρη Κρυπτογραφία

RSA

• Στη συνέχεια διαλέγουμε έναν αριθμό d τέτοιον ώστε να ισχύει η σχέση

e*d = 1mod(p-1)*(q-1)

• Συχνά χρησιμοποιείται ο πρώτος αριθμός e=65537 γιατί απλοποιεί τους υπολογισμούς κατά την κρυπτογράφιση.

• Το δημόσιο κλειδί είναι το (e,n)

• Το ιδιωτικό κλειδί είναι το (d,n)

Page 10: 3-Ασσύμετρη Κρυπτογραφία

RSA

• H κρυπτογράφιση του μηνύματος P γίνεται με το δημόσιο κλειδί που είναι γνωστό σε όλους και έχουμε

C = Pe mod n

• Η αποκρυπτογράφιση του C γίνεται με το ιδιωτικό κλειδί και έχουμε

P = Cd mod n

• Η ασφάλεια του συστήματος βασίζεται στη δυσκολία παραγοντοποίησης του μεγάλου αριθμού n σε δύο μεγάλους πρώτους .

• Όλοι γνωρίζουν τα (e,n) , αλλά κανείς τα d,q,p και για την έυρεση του d ώστε να γίνει η αποκρυπτογράφιση χρειάζεται η παραγοντοποίηση του n.

Page 11: 3-Ασσύμετρη Κρυπτογραφία

RSA-Παράδειγμα

Step 1: Let p = 47 and q = 59. Thus n = 47 x 59 = 2773Step 2: Select e = 17Step 3: Publish (n,e) = (2773, 17)Step 4: (p-1) x (q-1) = 46 x 58 = 2668Use the Euclidean Algorithm to compute the modular inverse of 17 modulo 2668. The result is d = 157<< Check: 17 x 157 = 2669 = 1(mod 2668) >>

Public key is (2773,17)Private key is 157

Plaintext block represented as a number: M = 31Encryption using Public Key: C = 3117 (mod 2773)=587Decryption using Private Key: M = 587157 (mod 2773)= 31

Page 12: 3-Ασσύμετρη Κρυπτογραφία

RSA

• O RSA χρησιμοποιείται ευρέως σε κάθε ασφαλή συναλλαγή στο internet.

• To n αρχικά ήταν 512 bits (RSA-512) αλλά σήμερα σπάει από έναν υπολογιστή στο σπίτι μας σε λιγότερο από 1 χρόνο.

• Τα περισσότερα σημερινά site στο internet χρησιμοποιούν RSA-1024 με το n να είναι1024 bits και να είναι σχεδόν ακατόρθωτο με την σημερινή επεξεργαστικη ισχύ να σπάσει.

• Τα σημερινά στάνταρ όμως προτείνουν τον RSA-2048.

• Συγριτικά ο RSA-512 είναι τόσο δύσκολος να σπάσει (να βρεθούν τα κλειδιά) όσο ο DES, ενώ ο RSA-2048 όσο ο AES-128.

Page 13: 3-Ασσύμετρη Κρυπτογραφία

RSA υλοποιηση σε javaimport java.math.BigInteger;

import java.security.SecureRandom;

public class RSA {

private final static BigInteger one = new BigInteger("1");

private final static SecureRandom random = new SecureRandom();

private BigInteger privateKey;

private BigInteger publicKey;

private BigInteger modulus;

// generate an N-bit (roughly) public and private key

RSA(int N) {

BigInteger p = BigInteger.probablePrime(N/2, random);

BigInteger q = BigInteger.probablePrime(N/2, random);

BigInteger phi = (p.subtract(one)).multiply(q.subtract(one));

modulus = p.multiply(q);

publicKey = new BigInteger("65537"); // common value in practice = 2^16 + 1

privateKey = publicKey.modInverse(phi);}

BigInteger encrypt(BigInteger message) {

return message.modPow(publicKey, modulus);}

BigInteger decrypt(BigInteger encrypted) {

return encrypted.modPow(privateKey, modulus);}

public static void main(String[] args) {

int N = Integer.parseInt(args[0]);

RSA key = new RSA(N);

System.out.println(key);

// create random message, encrypt and decrypt BigInteger message = new BigInteger(N-1, random);

// alternative: create message by converting string to integer

// String s = "test";

// byte[] bytes = s.getBytes();

// BigInteger message = new BigInteger(s);

BigInteger encrypt = key.encrypt(message);

BigInteger decrypt = key.decrypt(encrypt);

System.out.println("message = " + message);

System.out.println("encrpyted = " + encrypt);

System.out.println("decrypted = " + decrypt); } }

Page 14: 3-Ασσύμετρη Κρυπτογραφία

El Gamal

• Έστω ότι p είναι “μεγάλος” πρώτος

• Επέλεξε έναν ειδικό αριθμό g

• O g πρέπει να είναι πρωτεύουσα ρίζα (primitive element) modulo p.

• O g είναι πρωτεύουσα ρίζα mod p όταν για κάθε αριθμό a σχετικά πρώτο με το p (δηλ. ΜΚΔ(a, p)=1), υπάρχει ένας ακέραιος k ώστε gk ≡ a (mod p).

Π.χ o αριθμός 3 είναι primitive element του mod 7.

Page 15: 3-Ασσύμετρη Κρυπτογραφία

El Gamal

• Ύστερα επιλέγουμε έναν ακέραιο αριθμό 1<x<p-1.

• Στη συνέχεια υπολογίζουμε το y με βάση τα x,g,p ώς εξής

y=gx mod p

• To ιδιωτικό κλειδί είναι το x

• To δημόσιο κλειδί είναι το y

Page 16: 3-Ασσύμετρη Κρυπτογραφία

El Gamal

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

Αναπαριστούμε το μήνυμα Μ ως μια σειρά αριθμών modulo p. Έπειτα:

1.Παράγουμε με τυχαίο τρόπο το k

2.Υπολογίζουμε C1 και C2, όπου

C1 = gk mod p

C2 = M yk mod p

3.Στέλνουμε το κρυπτογράφημα C, το οποίο αποτελείται από τις δύο διακριτές τιμές C1 και C2.

Page 17: 3-Ασσύμετρη Κρυπτογραφία

El Gamal

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

Ο παραλήπτης χρησιμοποιεί το ιδιωτικό κλειδί x για να μετατρέψει το C1:

C1x = (gk)x mod p= (gx)k mod p= yk mod p

Έπειτα διαιρούμε το C2 με το C1x και έχουμε το Μ:

C2/C1x = M mod p

Page 18: 3-Ασσύμετρη Κρυπτογραφία

El Gamal-Παράδειγμα

To encrypt M = 10 using Public key 91 - Generate a random number k = 32 - Compute C1= 113 mod 23 = 20C2= 10 x 93 mod 23= 10 x 16 = 160 mod 23 = 223 - Ciphertext C = (20 , 22)

Step 1: Let p = 23Step 2: Select a primitive element g = 11Step 3: Choose a private key x = 6Step 4: Compute y = 116 (mod 23)= 9Public key is 9Private key is 6

Page 19: 3-Ασσύμετρη Κρυπτογραφία

El Gamal-RSA Σύγκριση

1. Ο ElGamal δεν βασίζεται στην παραδοχή ότι η παραγοντοποίηση είναι δύσκολο πρόβλημα.

2. Απαιτείται η παραγωγή τυχαίου αριθμού (k).

3. Μεγαλώνει το μεταδιδόμενο μήνυμα (το κρυπτογράφημα αποτελείται από δύο τιμές C1 και C2 αντύ για μία).

Page 20: 3-Ασσύμετρη Κρυπτογραφία

Message Integrity

Ο επιτιθέμενος παρόλο που τα μηνύματα είναι κρυπτογραφημένα μπορεί να τα πάρει και να τα αλλάξει και να στείλει στον παραλήπτη αλλαγμένο μήνυμα C' ≠ C.

Χρειαζόμαστε έναν μηχανισμό που να μας διαβεβαιώνει ότι το μήνυμα κρυπτογραφημένο ή μη, δεν έχει αλλάξει κατά τη μεταφορά του, δηλαδή να μας διασφαλίζει ακεραιότητα.

Ο μηχανισμός αυτός είναι τα MIC Message Integrity Codes γνωστά και ώς ΜΑC Message Authentication Codes.

Τα MICs βασίζονται σε hash functions.

Page 21: 3-Ασσύμετρη Κρυπτογραφία

Hash Functions Μια συνάρτηση κατακερματισμού μειώνει ένα μήνυμα σε ένα

αποδεκτό μέγεθος h:{0,1}*→{0,1} με πλήθος n .Υπάρχουν έξι απαιτήσεις για μια συνάρτηση κατακερματισμού:

1. Πρέπει να δέχεται ως είσοδο οποιουδόποτε μήκους μήνυμα M.

2. Πρέπει να παράγει ένα μικρό, σταθερού μεγέθους αποτέλεσμα (~100 bits). Συχνά χρησιμοποιείται η mod συνάρτηση h(m)=m mod q.

3. Πρέπει να είναι εύκολη και γρήγορη η εξαγωγή αποτελέσματος για κάθε είσοδο.

4. Η συνάρτηση h πρέπει να είναι μονόδρομη, άρα δύσκολο ή αδύνατο να αντιστραφεί. Δηλαδή δεδομένου του h(m) να είναι πολύ δύσκολο να ανακτηθεί το m.

5. Πρέπει να είναι ανθεκτικό σε ασθενείς συγκρούσεις h(m1)≠h(m2)→m1≠m2. Μια σύγκρουση προκύπτει όταν δύο διαφορετικές είσοδοι παράγουν το ίδιο αποτέλεσμα.

6. Πρέπει να είναι ανθεκτικό σε ισχυρές συγκρούσεις, δηλαδή να είναι σχεδόν αδύνατο να βρεθούν δύο μηνύματα m1 και m2, που έχουν κάποιο νόημα και h(m1) = h(m2).

Page 22: 3-Ασσύμετρη Κρυπτογραφία

Hash Functions

Page 23: 3-Ασσύμετρη Κρυπτογραφία

Hash Functions

Μια απλή συνάρτηση κατακερματισμού μπορεί να είναι η τμηματοποίηση ενός μηνύματος σε σταθερού μεγέθους μπλοκ και στη συνέχεια κάνοντας XOR σε κάθε τμήμα.

Ασφαλείς συναρτήσεις κατακερματισμού είναι:

O αλγόριθμος MD5 (Message Digest 5)

Οι αλγόριθμοι SHA-1,SHA-2 (Secure Hash Algorithm)

Page 24: 3-Ασσύμετρη Κρυπτογραφία

Hash FunctionsMD5

Ανακαλύφθηκε από τον Ron Rivest το 1992.

Το μήνυμα σπάει σε μπλοκ των 512 bits όσο και αν είναι το μήκος του.

Κάθε μπλοκ των 512 bits περνάει από 4 παρόμοια στάδια των 16 γύρων επεξεργασίας (16 γύροι επεξεργασίας για κάθε ένα από τα sub-block των 128-bits).

Οι γύροι επεξεργασίας βασίζονται σε μια μη γραμμική συνάρτηση διαφορετική σε κάθε γύρο,σε πρόσθεση υπολοίπου και σε left rotation.

Τα Outputs προστίθενται μεταξύ τους και έτσι έχουμε μια τιμή hash value των 128 Bits για κάθε μήνυμα.

SHA-1

Παρόμοια λειτουργία με τον MD5, αλλά παράγει hash value 160 bits.

SHA-2

Γνωστός και ως SHA-256 αντικατέστησε τον SHA-1 to 2010 λόγω του ότι από το 2006 είναι ευάλωτος σε επιθέσεις.

Hash value 256,512 bits.

Page 25: 3-Ασσύμετρη Κρυπτογραφία

Message Integrity Checks

• Χρήση hash function μαζί με ένα κρυπτογραφικό κλειδί Κ.

- Έστω μήνυμα Μ, κλειδί Κ.

- Υπολογίζεται το MIC = hash(K || M) και αποστέλεται μαζί με το μήνυμα Μ.

- Ο παραλήπτης γνωρίζοντας το κλειδί, υπολογίζει το MIC, πιστοποιεί εάν το μήνυμα είναι ακέραιο συγκρίνοντας τα MIC.

Page 26: 3-Ασσύμετρη Κρυπτογραφία

Message Integrity Checks

HMAC είναι αλγόριθμος που δημιουργεί ένα MAC με χρήση μιας hash function και ένα κλειδί (authentication key).

HMAC (K,m) = H ((K   ⊕ opad)  ∥ H ((K   ⊕ ipad)  ∥ m))

- H is a cryptographic hash function, MD5,SHA-1

- K is a secret key 

-opad is the outer padding (0x5c5c5c…5c5c, one-block- long hexadecimal constant)

-ipad is the inner padding (0x363636…3636, one-block- long hexadecimal constant)