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

📋 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
📄
Slides
slide complete con diagrammi
🔬
Lab
Openssl – hash e certificati digitali
GitHub →

Il problema dell’identità digitale

Quando accediamo a un servizio online, il sistema deve rispondere a tre domande fondamentali e distinte — spesso confuse tra loro:

🪪
Identificazione

Chi sei?
Dichiarare la propria identità

Es: inserire username
🔑
Autenticazione

Sei davvero tu?
Dimostrare di essere chi si dice

Es: inserire password o OTP
🛂
Autorizzazione

Cosa puoi fare?
Definire i permessi concessi

Es: accesso a certe risorse
📌 Esempio concreto — registro elettronico scolastico
Identificazione: inserisco il mio username
Autenticazione: digito la password
Autorizzazione: posso inserire voti ma non modificare account

Password e autenticazione a fattori multipli

Il sistema più diffuso di autenticazione si basa sulla coppia UserID + Password — il modello “qualcosa che sai”. Ma la password da sola è sempre più insufficiente:

Tecniche di attacco alle password
Brute force

Prova tutte le combinazioni possibili. Password come mario123 → violata in secondi. M@r10!2026_ITIS# → anni.

Dictionary / Rainbow table

Prova parole comuni o hash precalcolati. Contromisura: salt — stringa casuale aggiunta alla password prima dell’hash.

Credential stuffing

Usa credenziali rubate da altri servizi. Funziona perché il 65% degli utenti riusa le stesse password.

Phishing

Inganna l’utente con siti/email falsi. La contromisura tecnica più efficace è FIDO2 — immune al phishing by design.

I tre fattori di autenticazione (MFA)

L’autenticazione forte richiede almeno due fattori appartenenti a categorie diverse. Combinare fattori diversi moltiplica esponenzialmente la difficoltà di un attacco:

🧠
Qualcosa che SAI

Password, PIN, risposta a domanda segreta

📱
Qualcosa che HAI

Smartphone con app OTP, token hardware, smart card

👁️
Qualcosa che SEI

Impronta digitale, riconoscimento facciale, iride

Le funzioni di Hash crittografiche

Una funzione di hash crittografica trasforma un dato di qualsiasi dimensione in una stringa di lunghezza fissa chiamata digest o impronta digitale. È uno dei mattoni fondamentali della sicurezza informatica moderna.

Esempio — effetto valanga (avalanche effect):
Password123
ef92b778bafe771e89245b89ecbc08a44a4e166c06659911881f383d4473e94f
password123
482c811da5d5b4bc6d497ffa98491e38b6129c1800f7a8cb9af8d38e82baef87

Una sola lettera maiuscola/minuscola produce un digest completamente diverso — nessuna correlazione visibile tra input simili.

Tre proprietà fondamentali

1 — Non invertibilità

Conoscendo solo il digest è computazionalmente impossibile risalire all’input originale. Funzione one-way.

hash(x) → digest ✓
digest → x ✗ impossibile
2 — Resistenza alle collisioni

Trovare due input diversi con lo stesso digest deve essere praticamente impossibile. Una collisione trovata invalida la funzione.

A ≠ B → hash(A) ≠ hash(B)
3 — Determinismo

Lo stesso input produce sempre lo stesso output. Proprietà essenziale per la verifica delle password al login.

hash(x) = hash(x) sempre

Algoritmi di hash — confronto

AlgoritmoDigestCaratteri hexStatoNote
MD5128 bit32❌ InsicuroCollisioni pratiche trovate nel 1996. Solo checksum non-critici.
SHA-1160 bit40⚠️ DeprecatoCollisione pratica dimostrata da Google nel 2017 (SHAttered).
SHA-256256 bit64✅ StandardUsato in TLS, certificati, Bitcoin, firma digitale.
SHA-512512 bit128✅ StandardPiù resistente, usato in ambienti ad alta sicurezza.

Come i server proteggono le password con l’hash

📝 Registrazione
1

Utente inserisce la password

2

Server genera un salt casuale

3

Calcola SHA-256(password + salt)

4

Salva solo hash + salt nel DB — mai la password in chiaro

🔐 Login
1

Utente inserisce la password

2

Server recupera il salt dal DB

3

Ricalcola SHA-256(password + salt)

4

Confronta con l’hash salvato. Coincide → accesso ✓

Il salt è fondamentale: due utenti con la stessa password producono hash diversi, rendendo inutili le rainbow table precalcolate.

La firma digitale

La firma digitale è il meccanismo che garantisce autenticità, integrità e non ripudiabilità di un documento digitale. Non va confusa con la scansione di una firma autografa — è uno strumento crittografico basato su RSA e hash.

Schema completo della firma digitale
✍️ FIRMA (mittente Ada)
1

Calcola H = SHA-256(documento)

2

Cifra H con la sua chiave privata RSA → firma S

3

Invia documento + firma S al destinatario

✅ VERIFICA (destinatario Brian)
1

Calcola H' = SHA-256(documento ricevuto)

2

Decifra S con la chiave pubblica di Ada → ottiene H

3

Se H = H' → documento autentico e integro ✓

Autenticità
Solo Ada ha la chiave privata
Integrità
Qualsiasi modifica cambia H
Non ripudio
Ada non può negare di aver firmato

Certificati digitali e PKI

La crittografia asimmetrica risolve il problema della distribuzione delle chiavi, ma ne crea uno nuovo: come faccio a sapere che una chiave pubblica appartiene davvero a quella persona? Senza risposta a questa domanda, gli attacchi MITM sono banali.

La soluzione è il certificato digitale: un documento informatico che associa in modo verificabile una chiave pubblica a un soggetto, firmato da un’autorità fidata.

Certification Authority (CA) e catena di fiducia

Root CA
Preinstallata in browser e OS
↓ firma il certificato di ↓
Intermediate CA
DigiCert, Let’s Encrypt, ecc.
↓ firma il certificato di ↓
Certificato del sito
es. profgiagnotti.it

Il browser si fida del certificato di profgiagnotti.it perché è firmato da una CA intermedia, il cui certificato è firmato dalla Root CA che il browser conosce.

Struttura del certificato X.509

Campi principali di un certificato X.509 v3
Versione
Versione del formato X.509 (v1, v2, v3)
Serial Number
Numero univoco assegnato dalla CA
Issuer
Nome della Certification Authority che ha emesso il certificato
Validity
Data inizio / data fine validità
Subject
Identità del titolare (persona, azienda, server)
Public Key
La chiave pubblica del titolare — il dato principale del certificato
CA Signature
Firma digitale della CA — garantisce autenticità e integrità del certificato

SSO, SAML e OAuth 2.0

Nei moderni ecosistemi digitali — cloud, PA, applicazioni enterprise — l’accesso non è più un semplice login con username e password. Esistono architetture distribuite che richiedono protocolli standardizzati per l’identità.

Single Sign-On (SSO)

Il SSO permette a un utente di autenticarsi una sola volta e accedere a più servizi senza reinserire le credenziali. Usato da Google Workspace, Microsoft 365, SPID.

⚠️ Criticità del SSO — Single Point of Failure

L’Identity Provider diventa il punto critico: se l’account Google o Microsoft viene compromesso, l’attaccante accede a tutti i servizi collegati. È fondamentale proteggere l’IdP con MFA forte.

SAML — Autenticazione federata

Standard XML per scambiare informazioni di autenticazione tra domini diversi. Usato in ambienti enterprise, PA, SPID.

Flusso SAML semplificato:
1. Utente → SP: richiesta accesso
2. SP → IdP: redirect + richiesta SAML
3. Utente si autentica presso IdP
4. IdP → SP: SAML Assertion firmata
5. SP verifica firma → accesso ✓
La SAML Assertion è un documento XML firmato digitalmente con identità, metodo di autenticazione e attributi dell’utente.
OAuth 2.0 — Autorizzazione delegata

Framework per autorizzare un’app ad accedere a risorse protette senza condividere la password. Base di “Accedi con Google/Facebook”.

Authorization Code Flow:
1. Client → Authorization Server
2. Utente si autentica e dà consenso
3. AS rilascia authorization code
4. Client scambia code con access token
5. Client usa token → accesso risorse ✓
OpenID Connect estende OAuth con un ID Token per l’autenticazione dell’identità. OAuth da solo fa solo autorizzazione.
SAML vs OAuth 2.0 — confronto
AspettoSAMLOAuth 2.0
Finalità primariaAutenticazione federataAutorizzazione delegata
FormatoXML (verboso)JSON (leggero)
Uso tipicoEnterprise, PA, SPIDWeb, mobile, API REST
IdentitàIntegrata nell’AssertionRichiede OpenID Connect

SPID — Sistema Pubblico di Identità Digitale

SPID è l’infrastruttura nazionale italiana di identità digitale, basata su SAML. Permette ai cittadini di accedere ai servizi della PA con un’unica identità digitale verificata. Dal punto di vista tecnico è un esempio concreto e reale di tutto ciò che abbiamo studiato.

Flusso SPID — uno studente scarica un certificato universitario
1

Accede al portale universitario → seleziona “Accedi con SPID”

2

Il portale (SP) genera una richiesta SAML e redirige verso l’IdP scelto

3

L’utente si autentica presso l’IdP: username + password + OTP (livello 2)

4

IdP genera la SAML Assertion firmata digitalmente con codice fiscale, nome, cognome

5

Il portale verifica la firma digitale dell’IdP → accesso consentito

L’università non ha mai conosciuto la password dello studente. Il Service Provider si fida solo della firma digitale dell’Identity Provider.

FIDO2 — autenticazione passwordless

FIDO2 è lo standard sviluppato dalla FIDO Alliance e W3C che elimina completamente la password, basandosi su crittografia a chiave pubblica e dispositivi fisici o biometrici. È supportato da tutti i browser moderni e sistemi operativi.

Fase 1 — Registrazione (enrollment)

L’utente registra un autenticatore (chiave USB/NFC, smartphone, sensore biometrico)

Il dispositivo genera una coppia di chiavi RSA/ECC

Chiave pubblica → inviata al server

Chiave privata → conservata nel Secure Element del dispositivo. Non lascia mai il dispositivo.

Fase 2 — Autenticazione (challenge-response)
1

Server invia una challenge — numero casuale univoco per quella sessione

2

Dispositivo firma la challenge con la chiave privata → firma digitale

3

Server verifica la firma con la chiave pubblica registrata

Se valida → utente autenticato senza password

Perché FIDO2 è immune al phishing

In FIDO2 la chiave privata è legata al dominio del servizio al momento della registrazione. Se un attaccante crea un sito phishing su google-fake.com, il dispositivo rifiuta di firmare la challenge perché il dominio non corrisponde a google.com — fisicamente impossibile da aggirare, a differenza delle password che possono essere digitate su qualsiasi sito.

✅ Vantaggi FIDO2
  • Zero password da ricordare o rubare
  • Immunità totale al phishing
  • Protezione contro credential stuffing
  • Esperienza utente più fluida
⚠️ Considerazioni
  • Richiede un dispositivo fisico registrato
  • Perdita dispositivo → serve recovery
  • Adozione ancora parziale nei servizi
  • Protegge la chiave nel chip — non il chip stesso

Visione d’insieme — dalla password a FIDO2

I mattoni della sicurezza dell’identità digitale
TecnologiaGarantisceUsato in
Hash (SHA-256)Integrità dei datiPassword DB, firma digitale, blockchain
Firma digitale (RSA+SHA)Autenticità + integrità + non ripudioDocumenti, email, codice software
Certificato X.509Fiducia nell’identitàHTTPS, TLS, email cifrata, VPN
SAML / OAuth / OIDCAutenticazione/autorizzazione federataSPID, SSO aziendale, “Accedi con Google”
FIDO2Autenticazione passwordless sicuraPasskey, YubiKey, Windows Hello, Face ID
📌 Riepilogo — Punti chiave
  • Identificazione (chi sei) ≠ Autenticazione (dimostralo) ≠ Autorizzazione (cosa puoi fare)
  • Le funzioni di hash sono one-way, deterministe e collision-resistant — SHA-256 è lo standard; MD5 e SHA-1 sono compromessi
  • La firma digitale combina hash + RSA: garantisce autenticità, integrità e non ripudio ma non confidenzialità
  • I certificati X.509 risolvono il problema della fiducia nella chiave pubblica attraverso la catena CA → certificato
  • SAML = autenticazione federata (XML, enterprise, SPID); OAuth 2.0 = autorizzazione (JSON, API, mobile); OIDC = identità su OAuth
  • FIDO2 elimina la password usando crittografia a chiave pubblica legata al dominio — immune al phishing by design

Lascia un commento