Corso di Algebra Avanzata Teoria dei Codici e Crittografia: 4 Crittografia
Crittografia
1) Nozioni di base
Terminologia
- Plaintext (testo in chiaro), ciphertext (testo cifrato), chiave (segreto usato da algoritmo), algoritmo di cifratura.
- Modalità: simmetrica (stessa chiave per cifrare/decifrare) vs asimmetrica (coppia chiavi pubblica/privata).
- Obiettivi di sicurezza: confidenzialità, integrità, autenticazione, non-ripudio.
Proprietà matematiche utili
- Operazioni modulo , inversi modulari, esponenziazione modulare — base per RSA.
- Nozioni su funzioni unidirezionali e trapdoor functions (funzione facile da calcolare ma difficile da invertire senza informazione segreta).
2) Cifrari classici (teoria + esempi)
Cesare (shift cipher)
Regola: per ogni lettera su alfabeto :
E(P) = (P + k) \bmod 26
Esempio: plaintext CRITTOGRAFIA, .
- C→F, R→U, I→L, T→W, T→W, O→R, G→J, R→U, A→D, F→I, I→L, A→D
- ciphertext: FULWWRJUDILD
Debolezze: spazio chiave piccolo (26) → brute force e analisi di frequenza.
Attività rapida: cifrare SICUREZZA con e decifrare QNUUXJXX.
Vigenère
Regola: chiave ripetuta; per lettera
E_i = (P_i + K_{i}) \bmod 26
Esempio: plaintext ATTACCOALLABARCA, chiave LEONE.
Risultato: LXHNGNSOYPLFOEGL (passaggi: A+L, T+E, ...).
Debolezze/attacco: Kasiski, analisi delle distanze, analisi di frequenza su sotto-sequenze.
Attività: cripta PROVASEGRETA con chiave MELA; prova a rompere una Vigenère con chiave di lunghezza 3 usando conteggi di frequenza.
Sostituzione monoalfabetica
Regola: permutazione dell’alfabeto (es. A→Q, B→W, ...).
Esempio: mappa QWERTYUIOPASDFGHJKLZXCVBNM; plaintext SEMPRE SICURO → LTDHKT LOEXKG.
Debolezze: analisi di frequenza, pattern (bigrammi/trigrammi).
Attività: crea una chiave casuale e cifra un paragrafo; poi scambia con un compagno per tentare il criptoanalisi.
Trasposizione (es. trasposizione a colonne)
Idea: permutare la posizione delle lettere (non sostituirle).
Algoritmo comune (colonnare): scrivi il testo per righe in un numero di colonne e leggi per colonne secondo un ordine dato.
Esempio rapido: plaintext BENVENUTI, 3 colonne →
B E N
V E N
U T I
Leggi colonna 1,2,3 → BVU EET NNI (dipende dall’implementazione).
Attività: implementa la trasposizione colonnare con chiave numerica 3 1 4 2.
3) Crittografia asimmetrica — principi
- Chiave pubblica/p privata: chiunque può cifrare con la chiave pubblica; solo il possessore della chiave privata può decifrare.
- Basata su funzioni difficili da invertire (fattorizzazione di grandi interi per RSA; logaritmo discreto per Diffie-Hellman/ECC).
- Vantaggi: scambio sicuro di chiavi, firme digitali. Svantaggi: più lenta, usata spesso per cifrare chiavi sessione (ibrido).
4) RSA — spiegazione passo-passo e esempio numerico
Algoritmo (alto livello)
- Scegli due grandi primi e .
- Calcola . è il modulo.
- Calcola .
- Scegli tale che e .
- Calcola inverso modulare di modulo : .
- Chiave pubblica: . Chiave privata: (e se vuoi ottimizzare).
Cifratura: .
Decifratura: .
Nota pratica: nella realtà si applicano padding (es. RSA-OAEP) prima di cifrare, altrimenti ci sono vulnerabilità.
5) Funzioni hash: proprietà e uso
Definizione: funzione che mappa inputs di lunghezza arbitraria a digest di lunghezza fissa. Proprietà desiderate:
- Preimage resistance: dato è difficile trovare tale che .
- Second preimage resistance: dato , è difficile trovare con .
- Collision resistance: è difficile trovare qualsiasi coppia con .
Esempi storici: MD5 e SHA-1
- MD5 produce digest a 128 bit; SHA-1 produce digest a 160 bit.
- Vulnerabilità: sono stati trovati attacchi pratici che generano collisioni (MD5 già rotto; SHA-1 vulnerabile a collisioni pratiche). Non usare MD5/SHA-1 per firme o per nuovi sistemi di integrità crittografica; sono usabili solo come checksum non-sicuri o per compatibilità.
Esempi noti (valori standard)
- MD5("abc") =
900150983cd24fb0d6963f7d28e17f72 - SHA-1("abc") =
a9993e364706816aba3e25717850c26c9cd0d89d - MD5("hello") =
5d41402abc4b2a76b9719d911017c592 - SHA-1("hello") =
aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
Uso corretto degli hash
- Per memorizzare password: non solo hash semplice — usare salt ed algoritmi adatti a password hashing (PBKDF2, bcrypt, scrypt, Argon2).
- Per integrità di file: preferire SHA-256 o SHA-3.
- Per firme digitali: usare hash sicuri (SHA-256/384/512) + algoritmo di firma.
Esempio Python (hashlib):
import hashlib
text = b"hello"
md5_digest = hashlib.md5(text).hexdigest()
sha1_digest = hashlib.sha1(text).hexdigest()

Commenti
Posta un commento