In crittografia la sigla RSA indica un algoritmo di crittografia asimmetrica, inventato nel 1977 da Ronald Rivest, Adi Shamir e Leonard Adleman utilizzabile per cifrare o firmare informazioni.Nel 1976 Whitfield Diffie e Martin Hellman, crittologi americani, furono i primi a pubblicare un sistema che si basasse sulla creazione di un cifrario "asimmetrico" composto da "chiavi pubbliche", anche se pochi anni prima ci avevano già pensato James H. Ellis, Clifford Cocks, e Malcolm J. Williamson dei servizi segreti inglesi, la notizia era coperta dal segreto militare e fu rivelata soltanto nel 1997 (!).Il sistema di crittografia si basa sull'esistenza di due chiavi distinte, che vengono usate per cifrare e decifrare. Se la prima chiave viene usata per la cifratura, la seconda deve necessariamente essere utilizzata per la decifratura e viceversa. La questione fondamentale è che nonostante le due chiavi siano fra loro dipendenti, non sia possibile risalire dall'una all'altra, in modo che se anche si è a conoscenza di una delle due chiavi, non si possa risalire all'altra, garantendo in questo modo l'integrità della crittografia.Per poter realizzare con il cifrario asimmetrico un sistema crittografico pubblico è importante che un utente si crei autonomamente entrambe le chiavi, denominate "diretta" ed "inversa", e ne renda pubblica una soltanto. Così facendo si viene a creare una sorta di "elenco telefonico" a disposizione di tutti gli utenti, che raggruppa tutte le chiavi dirette, mentre quelle inverse saranno tenute segrete dagli utenti che le hanno create e da questi utilizzate solo quando ricevono un messaggio cifrato con la rispettiva chiave pubblica dell'"elenco" da parte di un certo mittente, ottenendo in questo modo i presupposti necessari alla sicurezza del sistema.Per ottenere una discreta sicurezza è necessario utilizzare chiavi binarie di almeno 2048 bit. Quelle a 512 bit sono ricavabili in poche ore. Le chiavi a 1024 bit, ancora oggi largamente utilizzate, non sono più consigliabili in quanto potrebbe essere possibile ottenere la chiave in un solo anno di tempo, al costo di un milione di dollari (!): un costo sostenibile per qualunque grande organizzazione, agenzia o intelligence.Facendo un esempio pratico, se Alice vuole spedire un messaggio a Bob e non vuole che altri all'infuori di Bob possano leggerlo, Alice cercherà sull'elenco la chiave pubblica di Bob e con quella potrà cifrare il messaggio. Essendo Bob l'unico a possedere la chiave inversa, sarà anche l'unico a poter decifrare il messaggio, che rimarrà così segreto per tutti gli altri. Ovviamente il successo di questo sistema si basa sull'assoluta necessità che Bob sia l'unico ad essere in possesso della chiave inversa. In caso contrario, avendo entrambe le chiavi, chiunque potrebbe decifrare agevolmente il messaggio.Con questo metodo di cifratura è possibile anche garantire la provenienza di un messaggio. Riprendiamo l'esempio precedente: Alice questa volta, prima di cifrare il messaggio usando la chiave pubblica di Bob, lo cifrerà usando la propria chiave inversa e solo in un secondo momento lo ri-crittograferà utilizzando la chiave pubblica di Bob. Quando Bob riceverà il messaggio e lo decifrerà usando la propria chiave inversa, otterrà ancora un messaggio crittografato. Quel dato messaggio necessiterà poi della chiave pubblica di Alice per essere decifrato, garantendo in questo modo che il messaggio è stato spedito solo e soltanto da Alice, unica a possedere la chiave inversa con la quale era stato crittografato il messaggio.Più semplicemente, utilizzando questo metodo di cifratura, Alice può mandare messaggi a tutti, garantendo la provenienza. Infatti cifrando il messaggio con la propria chiave inversa, chiunque sarà in grado di leggere il messaggio, decifrandolo con la sua chiave pubblica, assicurandosi in tal modo che il mittente sia proprio Alice.È nel 1978 che questo sistema trova la sua applicazione reale. Infatti sono proprio i tre ricercatori del MIT (Ronald Rivest, Adi Shamir e Leonard Adleman) che hanno saputo implementare tale logica utilizzando particolari proprietà formali dei numeri primi con alcune centinaia di cifre. L'algoritmo da loro inventato, denominato RSA per via delle iniziali dei loro cognomi, non è sicuro da un punto di vista matematico teorico, in quanto esiste la possibilità che tramite la conoscenza della chiave pubblica si possa decifrare un messaggio, ma l'enorme mole di calcoli e l'enorme dispendio in termini di tempo necessario per trovare la soluzione, fa di questo algoritmo un sistema di affidabilità pressoché assoluta.Ronald Rivest, Adi Shamir e Leonard Adleman nel 1983 hanno brevettato l'algoritmo negli Stati Uniti dal MIT (scaduto il 21 settembre 2000); inoltre hanno dato vita alla società RSA Data Security, tutelando così i propri interessi commerciali. In seguito la Security Dynamics acquisì la società e vendette l'utilizzo degli algoritmi a società come Netscape, Microsoft ed altri. L'algoritmo RSA costituisce la base dei sistemi crittografici su cui si fondano i sistemi di sicurezza informatici utilizzati sulla rete Internet per autentificare gli utenti.Per aumentare ulteriormente la sicurezza, sono stati ideati i cosidetti token.
Un token per la sicurezza (chiamato anche token hardware, token per l'autenticazione, token crittografico, o semplicemente token) è un dispositivo fisico necessario per effettuare un'autenticazione.Un token si presenta spesso sotto forma di dispositivo elettronico portatile di piccole dimensioni, alimentato a batteria con autonomia nell'ordine di qualche anno, dotato di uno schermo e talvolta di una tastiera numerica. Alcuni token possono essere collegati ad un computer tramite una porta USB per facilitare lo scambio di dati.Un token può anche essere di tipo software, ove le informazioni necessarie risiedono direttamente nel computer dell'utente, e non in un oggetto esterno.A volte, il token è necessario non tanto per autenticarsi all'applicazione login quanto per effettuare le transazioni/operazioni ovvero le cosiddette disposizioni.Un token è tipicamente un generatore di numeri pseudocasuali ad intervalli regolari (nell'ordine di poche decine di secondi) secondo un algoritmo che, tra i vari fattori, tiene conto del trascorrere del tempo grazie ad un orologio interno. Altri fattori che influenzano l'algoritmo possono essere il numero di serie del token, o altri codici numerici associati al possessore all'atto della consegna del token.Lo stesso algoritmo è anche implementato su di un server di autenticazione, che è stato inizialmente sincronizzato con il token e che, quindi, genera la stessa sequenza di numeri pseudocasuali del token negli stessi momenti, pur non essendoci alcuna comunicazione tra i due oggetti.Tale numero, casuale e transitorio, viene combinato con un PIN noto all'utente ed al sistema di autenticazione per generare una password temporanea, o di sessione, che può essere usata per effettuare l'autenticazione entro la scadenza dell'intervallo temporale. La password di sessione è formata da PIN (fisso) + numero visualizzato dal token.Di conseguenza, la password temporanea per l'autenticazione sarà diversa in momenti diversi della stessa giornata.L'autenticazione a due fattori è data dal fatto che per generare la password temporanea corretta è necessario:possedere lo specifico token che, in un dato istante, genera lo stesso numero pseudocasuale generato dal server di autenticazione;conoscere il PIN con cui il numero va combinato.Considerato che la password temporanea scade dopo poche decine di secondi, chi volesse violare la sicurezza dovrebbe non solo indovinare quella valida per il particolare istante, ma dovrebbe anche usarla prima che essa scada. Per questo motivo, un token eleva notevolmente gli standard di sicurezza. Se il violatore volesse avere più tempo per violare la sicurezza dovrebbe scoprire l'algoritmo, che gli permetterebbe di poter continuamente rigenerare la password temporanea. Questi algoritmi però hanno un livello di complessità molto elevata da rendere difficile la decriptazione anche ai computer più potenti al mondo.