Lezione 8 - Autenticazione, hash, firma digitale, certificati, SAML OAuth SPID FIDO2 | Prof. Giagnotti
Anno 5 · Modulo 2 · Lezione 8 · Sistemi e Reti
✍ Autore: Prof. Giagnotti · Materia: Sistemi e Reti · Accent #3DE8A0

Autenticazione, hash, firma digitale, certificati, SAML OAuth SPID FIDO2

Dal triangolo identificazione-autenticazione-autorizzazione alle passkey: come si protegge l'identità digitale nel 2026, con hash, firma, certificati X.509 e protocolli federati.

⏱ 70 min 📚 Anno 5 Modulo 2 🧠 Autenticazione MFA 💻 Hash & Firma & FIDO2 🧪 Lab GitHub → 📄 FIPS 180-4
// Obiettivi di apprendimento
✓Distinguere identificazione, autenticazione e autorizzazione, e descrivere i tre fattori di autenticazione (MFA)
✓Spiegare le proprietà delle funzioni di hash crittografiche e descrivere MD5, SHA-1, SHA-256 e SHA-512
✓Descrivere il funzionamento della firma digitale e del certificato X.509, spiegando il ruolo della Certification Authority
✓Illustrare SSO, SAML, OAuth 2.0, SPID e FIDO2 spiegando il loro ruolo nell'autenticazione moderna

1. Il triangolo dell'identità digitale

📌 Definizione - AAA dell'identità

Identificazione = dichiarare chi sei (username). Autenticazione = provarlo (password, impronta). Autorizzazione = cosa puoi fare dopo esserti autenticato (permessi, ruoli). Tre domande: Chi sei? Sei davvero tu? Cosa puoi fare?

Quando accediamo a un servizio online il sistema deve rispondere a tre domande distinte, spesso confuse tra loro. Confonderle è il primo errore di sicurezza: dire chi sei non significa provarlo.

🪪 IDENTIFICAZIONE Chi sei? Dichiaro username es. mario.rossi Claim → 🔑 AUTENTICAZIONE Sei davvero tu? Prova: password, OTP, FaceID verifica credenziali Verify → 🛂 AUTORIZZAZIONE Cosa puoi fare? Permessi, ACL, RBAC es. studente, docente Grant
01 · IDENTIFICAZIONE

Chi sei?

Dichiarazione di identità. Non verificata. Username, email, codice fiscale.

02 · AUTENTICAZIONE

Sei davvero tu?

Dimostrazione. Password, token, biometria. Può essere MFA.

03 · AUTORIZZAZIONE

Cosa puoi fare?

Controllo accessi. Avviene dopo. Basata su ruoli, policy, ACL.

🎯 Esempio in classe - Registro elettronico

Identificazione: inserisco giagnotti.doc.
Autenticazione: digito password + OTP da app.
Autorizzazione: il sistema verifica che sono docente di 5A → posso inserire voti, ma non creare nuovi utenti (permesso solo admin). Se fossi studente, vedrei solo i miei voti.

2. Password, attacchi e i tre fattori MFA

📌 Definizione - Fattore MFA

Un fattore di autenticazione è una categoria distinta di prova: qualcosa che SAI, qualcosa che HAI, qualcosa che SEI. MFA forte richiede 2+ categorie diverse, non due password.

La coppia UserID + Password è il modello qualcosa che sai. Da sola è insufficiente: 65% degli utenti riusa password e il phishing le intercetta. Servono contromisure tecniche.

Tecnica di attaccoCome funzionaContromisura efficace
Brute forceProva tutte le combinazioni. mario123 → secondi, M@r10!2026_ITIS# → anni.Password lunghe, rate limiting, CAPTCHA, MFA
Dictionary / Rainbow tableProva parole comuni o hash precalcolatiSalt casuale unico per utente + algoritmi lenti tipo bcrypt/Argon2
Credential stuffingUsa credenziali rubate da altri breach su servizi diversiPassword uniche, monitoraggio HaveIBeenPwned, MFA obbligatoria
Phishing / MitMSito/email fake che ruba credenziali in tempo realeFIDO2 - immune by design perché chiave legata al dominio reale

I tre fattori - MFA forte

🧠 QUALCOSA CHE SAI

Knowledge factor

Password, PIN, risposte a domande segrete. Vulnerabile a furto, phishing, reuse.

📱 QUALCOSA CHE HAI

Possession factor

Smartphone OTP (TOTP), token hardware YubiKey, smart card, SMS (debole).

👁️ QUALCOSA CHE SEI

Inherence factor

Impronta, Face ID, iride, voce. Biometria locale, template mai su server.

🎯 Esempio - SPID L2 vs Google 2-Step

SPID Livello 2 = password (SAI) + OTP da app PosteID (HAI) → MFA vera. Google con password + SMS è MFA ma SMS è intercettabile (SIM swap). Meglio app Authenticator o chiave FIDO2. Due fattori della stessa categoria (es. password + PIN) NON è MFA, è solo 2-step nella stessa categoria.

PYTHON · HASH + SALT SICURO
import os, hashlib, hmac # Registrazione utente password = b"SuperPassword!2026" salt = os.urandom(16) # 128 bit casuali - unico per utente pepper = b"secret-server-pepper" # opzionale, su config server # bcrypt/Argon2 preferibile, qui SHA-256 per didattica + iterazioni dk = hashlib.pbkdf2_hmac('sha256', password + pepper, salt, 310_000) print(f"salt={salt.hex()}") print(f"hash={dk.hex()}") # Salva solo salt + hash, MAI password in chiaro # Login: ricalcola con salt salvato e confronta in tempo costante def verify(input_pwd, stored_salt_hex, stored_hash_hex): salt = bytes.fromhex(stored_salt_hex) expected = bytes.fromhex(stored_hash_hex) test = hashlib.pbkdf2_hmac('sha256', input_pwd.encode()+pepper, salt, 310_000) return hmac.compare_digest(test, expected) # anti timing-attack # Perché salt? Stessa password → hash diversi → rainbow table inutili
💬 Tip del docente - Come spiegarlo all'interrogazione

Ricorda AAA con frase: "Dico chi sono, provo che sono io, poi mi dite cosa posso fare". Per MFA, usa mano: 1 dito SAI (testa), 2 dito HAI (telefono in tasca), 3 dito SEI (impronta). Se all'esame ti chiedono perché 2 password non sono MFA, rispondi: stesso fattore, non moltiplica sicurezza.

3. Funzioni di hash crittografiche

📌 Definizione - Funzione hash crittografica

Funzione H: {0,1}* → {0,1}^n che trasforma input di qualsiasi lunghezza in digest di lunghezza fissa, deterministica, one-way, con effetto valanga e resistente alle collisioni.

L'hash è l'impronta digitale dei dati. Da password a blockchain, da firma digitale a integrità ISO: ovunque serva verificare che i dati non siano cambiati, c'è un hash.

01 · ONE-WAY

Non invertibilità

Da digest impossibile risalire a input. hash(x) → digest ✓, digest → x ✗. Fondamentale per password.

02 · COLLISION-RESISTANT

Resistenza collisioni

Trovare A≠B con hash(A)=hash(B) deve essere impraticabile. Se accade, algoritmo compromesso (MD5, SHA-1).

03 · DETERMINISTICO + VALANGA

Avalanche effect

Stesso input = stesso output sempre. Cambio 1 bit → 50% bit output cambiano. Password123 vs password123 → hash totalmente diversi.

Input qualsiasi file, pwd, doc → Funzione Hash SHA-256 / SHA-512 + salt opzionale → Digest fisso 64 char hex (256bit) ef92b7...3d44 Effetto valanga: Password123 → ef92b778bafe771e...4473e94f password123 → 482c811da5d5b4bc...38e82baef87
AlgoritmoDigestHexStato sicurezzaUso / Note
MD5128 bit32❌ Insicuro - collisioni dal 1996Solo checksum non crittografico, es. verifica download ISO vecchi
SHA-1160 bit40⚠️ Deprecato - SHAttered Google 2017Rimosso da TLS, Git usa ancora ma in migrazione
SHA-256256 bit64✅ Standard attualeTLS, certificati, Bitcoin, firma digitale, HMAC
SHA-512 / SHA3512 bit128✅ Alta sicurezza / futuroAmbienti militari, SHA-3 vincitore NIST 2015
BASH · OPENSSL E SHA256SUM
# Calcola hash di file per verifica integrità echo -n "Password123" | openssl dgst -sha256 # SHA2-256(Password123)= ef92b778bafe771e89245b89ecbc08a44a4e166c06659911881f383d4473e94f # Effetto valanga echo -n "password123" | openssl dgst -sha256 # 482c811da5d5b4bc6d497ffa98491e38b6129c1800f7a8cb9af8d38e82baef87 → completamente diverso! # Verifica ISO / file scaricato sha256sum ubuntu.iso echo "ef92b7... ubuntu.iso" | sha256sum --check # HMAC - hash autenticato con chiave segreta (integrità + autenticità) echo -n "messaggio" | openssl dgst -sha256 -hmac "chiave-segreta"
💬 Tip - Non confondere hashing con cifratura

Hash non è cifratura: non ha chiave per decifrare e non è reversibile. Cifratura protegge confidenzialità, hash protegge integrità. Domanda trabocchetto esame: "Perché non cifriamo password con AES?" Perché se rubano chiave AES leggono tutte le password. Con hash+Salt+pepper, anche con DB leaked l'attaccante deve brute-force ogni hash singolarmente.

4. Firma digitale - hash + RSA

📌 Definizione - Firma digitale (CADES / PADES)

Firma = Cifra con chiave PRIVATA del mittente l'hash del documento. Garantisce autenticità (solo tu hai privata), integrità (se doc cambia hash diverso), non ripudio (non puoi negare). Non garantisce confidenzialità.

Una firma autografa scansionata si copia. Una firma digitale no: è crittografia. Basata su RSA o ECDSA: firmo il digest, non tutto il documento, per efficienza.

✍️ FIRMA - Mittente Ada Documento → SHA-256 → H=hash → RSA priv → Firma S Invia: documento in chiaro + firma S (allegata) Garzie: autenticità (solo Ada ha priv), integrità, non ripudio NON confidenziale! Documento leggibile! ✅ VERIFICA - Destinatario Brian Doc ricevuto → hash → H' H' calc Firma S → RSA pub Ada → H H decifr Se H == H' → ✓ autentico e integro Se H != H' → ✗ manomesso o chiave errata
OPENSSL · FIRMA E VERIFICA RSA+SHA256
# Genera chiavi RSA 2048 (Ada) openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out ada_priv.pem openssl pkey -in ada_priv.pem -pubout -out ada_pub.pem # Firma documento (hash + cifra con privata) openssl dgst -sha256 -sign ada_priv.pem -out documento.sig documento.pdf # Verifica firma con pubblica openssl dgst -sha256 -verify ada_pub.pem -signature documento.sig documento.pdf # Verified OK → se modifica 1 byte: Verification Failure # Firma staccata vs incorporata: per PDF usa PAdES, per generico CAdES # In Node.js / verifica programmatica: usa crypto.verify()
🎯 Esempio - Firma tesina maturità

La scuola ti chiede tesina firmata digitalmente. Calcoli SHA-256 del PDF, cifri hash con tua chiave privata SPID (su CIE o token). Il prof verifica con tua chiave pubblica del certificato. Se modifichi la tesina dopo firma, hash cambia → verifica fallisce. Se firmi, non puoi dire "non l'ho mai inviata" (non ripudio).

⚠️ Errore comune - Firma ≠ cifratura

Firma digitale NON cifra il documento: resta leggibile. Se vuoi confidenzialità + autenticità, devi fare: firma con tua privata + cifra con pubblica destinatario (S/MIME, PGP). In esame: firma garantisce A+I+NR (autenticità, integrità, non ripudio), ma NON C (confidenzialità). Cifratura garantisce solo C.

5. Certificati X.509 e catena di fiducia PKI

Problema: se ti invio la mia chiave pubblica via email, come sai che è mia e non di un attaccante MITM? Risposta: certificato digitale firmato da CA fidata.

🏛️ Root CAISRG / DigiCert / GlobalSignPreinstallata in OS/browser - self-signed ↓ firma Intermediate CALet's Encrypt R3, E6Firma certificati finali, revocabile ↓ firma 📄 Certificato foglia - profgiagnotti.itSubject: CN=profgiagnotti.altervista.orgPublic Key: 2048 bit RSA + Validity + Signature CA
📌 Definizione - PKI e trust store

PKI = infrastruttura a chiave pubblica con CA che certifica legame identità-chiave pubblica. Trust store del browser contiene 100+ Root CA fidate. Catena: Root → Intermediate → Leaf. Revoca via CRL o OCSP.

Campo X.509 v3ContenutoPerché importante
Versionv1/v2/v3 (oggi v3)Definisce estensioni supportate
Serial NumberUnivoco per CAUsato per revoca CRL/OCSP
IssuerNome CA emittenteChi ha firmato questo certificato
ValidityNotBefore / NotAfter (90gg Let's Encrypt)Finestra temporale, previene uso infinito
SubjectCN, O, OU (es. CN=profgiagnotti...)Identità titolare, verificata da CA
Public KeyChiave pubblica titolare (RSA/ECC)Dato principale: serve a cifrare/verificare
ExtensionsSAN, Key Usage, Basic ConstraintsSAN = domini validi, KeyUsage = cosa può fare
CA SignatureFirma digitale della CA su tutto il certGarantisce autenticità e integrità del cert stesso
OPENSSL · ISPEZIONE CERTIFICATO E CATENA
# Visualizza certificato sito (chain completa) openssl s_client -showcerts -connect profgiagnotti.altervista.org:443 -servername profgiagnotti.altervista.org < /dev/null # Decodifica certificato X.509 openssl x509 -in server.crt -noout -text | head -n 80 # Subject: CN = profgiagnotti.altervista.org # Issuer: C=US, O=Let's Encrypt, CN=R3 # Validity: Not Before / Not After # X509v3 Subject Alternative Name: DNS:profgiagnotti.altervista.org, DNS:*.altervista.org # Verifica catena con CA locali openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt server.crt # Genera self-signed per lab (non fidato da browser) openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=lab.local"
🎯 Esempio - Perché il lucchetto è verde?

Quando visiti https://didattica.scuola.it il browser riceve leaf cert + intermediate. Verifica: firma intermediate valida? Firma root valida? Root è nel trust store? Validity ok? SAN contiene dominio? Se sì → lucchetto verde, TLS ok. Se certificato scaduto, self-signed, o CN mismatch → warning rosso MITM potenziale.

6. SSO, SAML, OAuth 2.0 e OpenID Connect

In azienda/cloud/PA l'utente non vuole 50 password. Vuole Single Sign-On: una login → accesso a tutto. Ma federare identità tra domini diversi richiede standard.

01 · SSO

Single Sign-On

Una autenticazione, molte risorse. Comodo ma IdP = single point of failure → proteggilo con MFA forte.

02 · SAML 2.0

Autenticazione federata

XML firmato, Assertion. Enterprise, PA, SPID. Verboso ma robusto, nato 2005.

03 · OAUTH 2.0 + OIDC

Autorizzazione delegata

JSON, token, API REST, mobile. OAuth = autorizzazione, OIDC = identità su OAuth. Access token + ID token JWT.

SAML - SPID Flow 1. Utente → SP: voglio servizio 2. SP → IdP: redirect + AuthnRequest SAML 3. IdP: login utente (pwd+OTP) 4. IdP → SP: SAML Assertion firmata XML <Assertion ID> <Subject CF> <Conditions> <Signature> 5. SP verifica firma IdP → accesso ✓ → SP non conosce MAI password utente. Si fida solo firma IdP. OAuth 2.0 Authorization Code + OIDC 1. Client App → Authorization Server 2. Utente autentica e consente 3. AS → code → scambio → access_token + id_token JWT ID Token: header.payload.signature (Base64) 4. Client usa access_token su Resource Server 5. RS verifica token (JWT signature / introspection) → OAuth solo autorizzazione. OIDC aggiunge autenticazione (ID Token).
AspettoSAML 2.0OAuth 2.0 / OIDC
FinalitàAutenticazione federataAutorizzazione delegata (+ identità con OIDC)
FormatoXML verboso firmatoJSON leggero, JWT (JWS)
Uso tipicoEnterprise, PA, università, SPIDWeb, mobile, API, "Accedi con Google/Apple"
TokenSAML Assertion (XML)Access Token opaco / JWT + ID Token JWT
IdentitàIntegrata in AssertionRichiede OIDC per identità (ID Token)
Mobile friendly❌ pesante per mobile✅ nato per mobile/SPA
JWT · OIDC ID TOKEN DECODIFICA
# ID Token OIDC = JWT = header.payload.signature (Base64URL) # Esempio decodifica offline (NON verifica firma!) import base64, json jwt="eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ik1hcmlvIFJvc3NpIiwiY2YiOiJSU1NNUk84MFEyMkg1MDJaIiwiYXVkIjoiY2xpZW50X2lkIiwiaXNzIjoiaHR0cHM6Ly9pZHAuc3BpZC5nb3YuaXQifQ.signature" header, payload, sig = jwt.split('.') def b64url_decode(s): s += '=' * (-len(s) % 4) return base64.urlsafe_b64decode(s) print(json.loads(b64url_decode(header))) # alg: RS256, typ: JWT print(json.loads(b64url_decode(payload))) # sub, name, cf, aud, iss, exp # Verifica reale: serve chiave pubblica IdP (JWKS) e controllare iss, aud, exp, signature # openssl: openssl dgst -sha256 -verify idp_pub.pem -signature sig.bin data.bin # Access Token OAuth: Bearer token per API # curl -H "Authorization: Bearer " https://api.scuola.it/voti
⚠️ Attacco - Confondere autenticazione con autorizzazione

OAuth da solo NON autentica! Un access_token dice "puoi accedere a risorsa X", non "sei Mario Rossi". Per identità serve OIDC con ID Token. Errore comune in verifica: dire che OAuth è per login. Risposta corretta: OAuth = autorizzazione, OIDC = autenticazione sopra OAuth, SAML = autenticazione federata enterprise.

7. SPID - Sistema Pubblico di Identità Digitale

📌 Definizione - SPID

SPID è infrastruttura nazionale SAML 2.0: IdP accreditati AgID (Poste, Aruba, TIM...), SP = servizi PA, cittadino con identità verificata L1/L2/L3. L2 = pwd + OTP, L3 = CIE + PIN + dispositivo fisico.

SPID è l'esempio concreto che unisce tutto: SAML + firma digitale + certificati X.509 + MFA + autorizzazione. Dal punto di vista tecnico è SAML federato nazionale.

🎯 Esempio - Studente scarica certificato universitario con SPID

1. Accede a Esse3 → clicca "Entra con SPID" → selezione IdP PosteID.
2. Esse3 (SP) genera AuthnRequest SAML firmata con suo certificato → redirect a Poste IDP.
3. Studente inserisce username/pwd + OTP PosteID (MFA L2) su dominio posteid.poste.it (anti-phishing).
4. PosteID crea SAML Assertion firmata con codice fiscale RSSMRA... , nome, cognome, livello L2, expiry 5 min.
5. Browser POSTa Assertion a Esse3. Esse3 verifica firma PosteID con certificato IdP (catena AgID), controlla condizioni, estrae CF.
Università non ha mai visto password dello studente. Fiducia solo nella firma digitale della CA AgID → IdP.

Livello SPIDFattoriFlussoUso
L11 fattore: passwordUsername + pwdServizi a basso rischio, quasi dismesso
L22 fattori: pwd + OTPPwd + OTP app/SMSStandard: INPS, Agenzia Entrate, università
L32 fattori + dispositivo fisicoPwd + CIE/spid L3 + hardwareServizi critici, firma documenti sanitari

8. FIDO2, WebAuthn e Passkey - il futuro passwordless

📌 Definizione - FIDO2 / Passkey

FIDO2 = standard W3C WebAuthn + CTAP2 che elimina password usando coppia chiavi RSA/ECC: privata resta in Secure Element dispositivo e legata al dominio, pubblica sul server. Firma challenge → autenticazione phishing-immune. Passkey = credenziale FIDO2 sincronizzabile (iCloud, Google).

FIDO2 risolve il problema alla radice: niente password da rubare, niente phishing, niente credential stuffing. Supportato da Chrome, Safari, Edge, Android, iOS, Windows Hello, Face ID, YubiKey.

Fase 1 - Registrazione (enrollment) • Utente registra autenticatore: YubiKey / Face ID / Touch ID • Dispositivo genera coppia chiavi: pub + priv in Secure Enclave Chiave pubblica → inviata al server (es. google.com) Chiave privata → MAI lascia dispositivo, legata a google.com • Passkey salvata: se sincronizzabile → iCloud Keychain / Google Password Manager Fase 2 - Login challenge-response (no pwd) 1. Server invia challenge random + origin google.com 2. Browser verifica origin, chiede gesto utente (touch/face) 3. Authenticator firma challenge con chiave privata → Firma legata a dominio: se phishing google-fake.com → rifiuta 4. Server verifica firma con chiave pubblica registrata ✓ Autenticato senza password, immune phishing by design
JAVASCRIPT · WEBAUTHN PASSKEY - REGISTRAZIONE E LOGIN
// Registrazione passkey - Client-side WebAuthn API (browser moderno) async function registerPasskey() { const challenge = new Uint8Array(32); crypto.getRandomValues(challenge); const publicKey = { challenge, rp: { name: "Scuola ITIS", id: "scuola.edu" }, user: { id: new TextEncoder().encode("mario.rossi"), name: "mario.rossi@scuola.edu", displayName: "Mario Rossi" }, pubKeyCredParams: [{alg: -7, type: "public-key"}, {alg: -257, type: "public-key"}], // ES256, RS256 authenticatorSelection: { authenticatorAttachment: "platform", userVerification: "required" }, timeout: 60000, attestation: "none" }; const cred = await navigator.credentials.create({ publicKey }); // Invia cred.id + cred.response clientDataJSON + attestation al server // Server salva public key per future verifiche } // Login passkey async function loginPasskey() { const challenge = new Uint8Array(32); crypto.getRandomValues(challenge); // in realtà dal server const cred = await navigator.credentials.get({ publicKey: { challenge, rpId: "scuola.edu", userVerification: "required", timeout: 60000 } }); // cred.response signature = firma challenge con chiave privata legata a scuola.edu // Server verifica con chiave pubblica salvata } // Nota phishing-immune: se utente su scuola-fake.edu, rpId mismatch → WebAuthn rifiuta
✅ VANTAGGI FIDO2

Zero password, zero phishing

Niente da rubare, niente da riutilizzare, niente da digitare su sito fake. UX fluida con FaceID/TouchID. Protegge anche da MitM real-time.

⚠️ CONSIDERAZIONI

Recovery e adozione

Perdita dispositivo → serve recovery (passkey sincronizzate aiutano). Adozione ancora parziale, fallback password spesso presente. Serve educazione utenti.

TecnologiaGarantisceUsato in
Hash SHA-256IntegritàPassword DB, firma, blockchain
Firma RSA+SHAAutenticità + Integrità + Non ripudioDocumenti, email S/MIME, codice firmato, certificati
Certificato X.509Fiducia nella chiave pubblicaHTTPS/TLS, VPN, client cert
SAML / OAuth / OIDCAuthN/AuthZ federataSPID, SSO aziendale, Accedi con Google
FIDO2 / PasskeyAuthN passwordless anti-phishingYubiKey, Windows Hello, FaceID, passkey Google/Apple

9. Verifica e laboratorio

🔬 Attività pratica + domande

Svolgi il lab lab-hash-certificati.md su GitHub poi rispondi:

  1. Distingui con esempio scolastico identificazione, autenticazione e autorizzazione. Perché 2 password non sono MFA?
  2. Calcola SHA-256 di "ciao" e "Ciao" con openssl dgst -sha256. Spiega effetto valanga e perché MD5 è insicuro.
  3. Un server ha hash senza salt. Spiega cosa può fare attaccante con rainbow table e come salt + pepper + Argon2 risolve.
  4. Descrivi firma digitale passo-passo: cosa firma Ada? Cosa verifica Brian? Perché non garantisce confidenzialità?
  5. Disegna catena CA: Root → Intermediate → Leaf. Cosa succede se leaf scade? E se Root compromessa? Cosa sono CRL e OCSP?
  6. Confronta SAML vs OAuth: quando useresti SPID (SAML) e quando "Accedi con Google" (OIDC)? Cosa fa FIDO2 contro phishing che TOTP non fa?
✅ Soluzione ragionata

1) Registro: username = identificazione (claim), password+OTP = autenticazione (verify), permessi docente=autorizzazione (grant). 2 password = stesso fattore "qualcosa che sai" → non MFA, non moltiplica, entrambe rubabili con stesso phishing.

2) echo -n "ciao" | openssl dgst -sha256 → b199a... diverso da Ciao → efb3bd... 1 bit cambia → 50% digest cambia (valanga). MD5 insicuro perché trovata collisione pratica 2004, due file diversi stesso hash → firma falsificabile.

3) Senza salt, hash("password123") uguale per tutti → precomputo rainbow table 1 volta e cracco tutti. Con salt casuale 16 byte per utente, hash diversi anche con stessa pwd → tabella inutile. Pepper = segreto server non in DB, Argon2 = lento + memory-hard anti-GPU.

4) Ada: H=SHA256(doc), S=RSA_priv(H). Invia doc+S. Brian: H'=SHA256(doc ricevuto), H= RSA_pub_Ada(S). Se H==H' ok. Non confidenziale perché doc in chiaro; serve cifrare con chiave pubblica destinatario per C.

5) Leaf expiry (90gg) → browser mostra warning, TLS KO, serve renew via ACME. Root compromessa → catastrofe: tutti i leaf firmati da quella Root non fidati più, rimozione da trust store, mass revocation. CRL = lista revocati, OCSP = check online stapled.

6) SPID usa SAML perché PA, enterprise, attributi firmati, XML, identity provider accreditati. "Accedi con Google" usa OIDC perché mobile, JSON/JWT, API REST leggere. TOTP è codice che utente può digitare su sito fake → phishing possibile con proxy real-time. FIDO2 chiave legata a origin (rpId) → browser rifiuta firma su dominio fake → fisicamente immune.

✓AAA: Identificazione (chi sei) ≠ Autenticazione (dimostralo) ≠ Autorizzazione (cosa puoi fare) - base RBAC
✓MFA forte: 3 fattori SAI/H AI/SEI, 2 categorie diverse. Salt+pepper+Argon2 >> MD5/SHA1
✓Hash: one-way, deterministico, valanga, collision-resistant. SHA-256 standard, MD5/SHA-1 compromessi
✓Firma: hash+RSA_priv = autenticità+integrità+non ripudio, NON confidenzialità. Verifica con pub key
✓X.509 PKI: cert = identità+pub key firmata da CA. Catena Root→Intermediate→Leaf, trust store, CRL/OCSP, SAN
✓SAML = auth federata XML enterprise/SPID, OAuth=autorizzazione JSON, OIDC=identità su OAuth (JWT), FIDO2=passwordless anti-phishing by design

🎓 Fine Modulo 2 - Sicurezza, crittografia e identità digitale

Hai chiuso il percorso: da CIA triad e kill chain a AES/RSA, da hash e firma a PKI, SAML/OAuth, SPID e FIDO2. Prossimo modulo: livello trasporto, TCP/UDP, TLS handshake nel dettaglio e VPN. Porta con te questa domanda: se la password è morta, come sarà l'autenticazione nel 2030?