La crittografia basata su attributi o più semplicemente ABE (dall'inglese attribute-based encryption) è un tipo di crittografia a chiave pubblica in cui la chiave segreta di un utente e il testo cifrato dipendono dagli attributi (ad es. il paese in cui vivono). In un tale sistema, è possibile decifrare il crittotesto se e solo se c'è corrispondenza tra l'insieme degli attributi della chiave dell'utente e gli attributi del testo cifrato[1].
Un aspetto cruciale della sicurezza della crittografia basata sugli attributi è la resistenza alla collusione: un avversario che detiene più chiavi, infatti, non deve essere in grado di decifrare il crittotesto se non può farlo con almeno una delle singole chiavi in suo possesso; si utilizza il termine collusione per modellare un attaccante capace di corrompere alcuni utenti per ottenere le loro chiavi.
Il concetto di crittografia basata sugli attributi è stato inizialmente proposto da Amit Sahai e Brent Waters come generalizzazione della crittografia su base identità[2], e successivamente da Vipul Goyal, Omkant Pandey, Amit Sahai e Brent Waters[3]. Di recente, diversi ricercatori hanno studiato possibili estensioni della crittografia basata su attributi, in particolare considerando più autorità che generano congiuntamente le chiavi private degli utenti[4][5][6].
Esistono essenzialmente due tipi di schemi di crittografia basati su attributi: la crittografia basata su attributi con politica di chiave (key-policy o KP-ABE)[3] e la crittografia basata su attributi con politica di crittotesto (cipertext-policy o CP-ABE)[7]. I due schemi sono speculari nella gestione delle due operazioni fondamentali: la cifratura dei dati e la generazione delle chiavi segrete; infatti, nello schema KP-ABE le chiavi segrete degli utenti vengono generate in base a un albero di accesso che definisce l'ambito dei privilegi dell'utente interessato, mentre i dati vengono cifrati su un insieme di attributi. Di contro, CP-ABE utilizza gli alberi di accesso per crittografare i dati e le chiavi segrete degli utenti vengono generate su un insieme di attributi.