RSA: cos’è, algoritmo e applicazione della crittografia

Autore: IT Sectr Pubblicato: 2026-04-02 Tempo di lettura: 9 min

RSA è un crittosistema a chiave pubblica che fornisce crittografia e firme digitali basato sulla complessità computazionale della fattorizzazione di grandi numeri. Secondo NIST Special Publication 800-56B Rev. 2 (2023), RSA con una lunghezza di chiave di 2048 bit rimane lo standard di sicurezza per i sistemi governativi e commerciali. L’algoritmo è ampiamente utilizzato nei protocolli TLS, nelle firme digitali e nella crittografia dei dati nelle applicazioni mobili.

Punti chiave

  • RSA è un algoritmo di crittografia asimmetrica che utilizza una coppia di chiavi: pubblica e privata.
  • La sicurezza dell’algoritmo si basa sulla difficoltà matematica di scomporre un numero grande nei suoi fattori primi.
  • La dimensione della chiave di 2048 bit è considerata lo standard minimo affidabile dal 2023 secondo NIST.
  • RSA viene utilizzato nei certificati TLS, nelle firme digitali e nei protocolli di autenticazione.
  • Lo sviluppo mobile utilizza RSA attraverso librerie crittografiche integrate: Android Keystore e iOS Security Framework.

Cos’è RSA?

RSA è un algoritmo crittografico a chiave pubblica sviluppato nel 1977 da Ron Rivest, Adi Shamir e Leonard Adleman. Il nome è formato dalle prime lettere dei cognomi degli autori. L’algoritmo è diventato il primo crittosistema asimmetrico praticamente applicabile in cui le chiavi di crittografia e decrittografia differiscono.

Storia della creazione

L’algoritmo RSA è stato pubblicato nel 1977 sulla rivista Scientific American e si basa sui precedenti lavori di Whitfield Diffie e Martin Hellman sulla crittografia a chiave pubblica. Il Massachusetts Institute of Technology ha ottenuto un brevetto per RSA nel 1983, che è durato fino al 2000. Secondo il rapporto di RSA Laboratories (2023), l’algoritmo rimane uno degli standard crittografici più diffusi al mondo — viene utilizzato in miliardi di dispositivi ogni giorno.

Il principio di asimmetria

A differenza dei cifrari simmetrici in cui la stessa chiave viene utilizzata sia per la crittografia che per la decrittografia, RSA opera con una coppia di chiavi matematicamente legate. La chiave pubblica può essere pubblicata per chiunque senza rischi di compromettere il sistema. La chiave privata è nota solo al proprietario e non viene mai trasmessa in rete. Secondo lo studio IBM Security X-Force Threat Intelligence Index (2024), la crittografia asimmetrica viene utilizzata nel 96% dei moderni protocolli di trasmissione dati sicura.

Fondamenti matematici

La sicurezza di RSA si basa sul problema della fattorizzazione — scomporre il prodotto di due grandi numeri primi in fattori. Se si scelgono numeri primi p e q di 1024 bit ciascuno, il loro prodotto n sarà di 2048 bit. Calcolare p e q conoscendo solo n con metodi moderni è praticamente impossibile: secondo la valutazione degli esperti del CNRS (2024), decifrare RSA-2048 richiederebbe più di 300 miliardi di anni di calcolo su un computer classico.

Come funziona l’algoritmo RSA

Consideriamo il ciclo completo di lavoro di RSA dalla generazione delle chiavi alla crittografia e decrittografia dei messaggi. Comprendere queste fasi è necessario per una corretta implementazione dell’algoritmo nelle applicazioni mobili.

Generazione delle chiavi

Il processo inizia con la selezione di due grandi numeri primi p e q. Viene calcolato il modulo n = p x q, che determina la lunghezza della chiave. Quindi viene calcolata la funzione toziente di Eulero phi(n) = (p-1)(q-1). Viene scelto un esponente pubblico e che sia coprimo con phi(n). L’esponente privato d viene calcolato come l’inverso moltiplicativo modulare di e modulo phi(n). Secondo NIST SP 800-56B Rev. 2, la lunghezza minima di n deve essere di 2048 bit per garantire una protezione adeguata.

java
import java.security.KeyPairGenerator;
import java.security.KeyPair;
import java.security.SecureRandom;

public class RSAKeyGenerator {
    public static KeyPair generateKeyPair() throws Exception {
        KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
        generator.initialize(2048, new SecureRandom());
        return generator.generateKeyPair();
    }
}

Crittografia e decrittografia

Per crittografare un messaggio m, il mittente lo converte in un intero minore di n e calcola il testo cifrato c = m^e mod n. Il destinatario utilizza la chiave privata d per recuperare il messaggio originale: m = c^d mod n. È importante notare che RSA non è progettato per crittografare grandi volumi di dati a causa delle scarse prestazioni — la dimensione massima del messaggio è uguale alla lunghezza della chiave meno i byte di overhead (circa 190 byte per RSA-2048 con OAEP).

java
import javax.crypto.Cipher;
import java.security.PublicKey;
import java.util.Base64;

public class RSAEncryptor {
    public static String encrypt(String data, PublicKey publicKey) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] encrypted = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encrypted);
    }
}

Firma digitale con RSA

RSA viene anche utilizzato per creare firme digitali — un meccanismo per verificare l’autenticità e l’integrità dei dati. Il proprietario firma l’hash del messaggio con la propria chiave privata e chiunque può verificare la firma utilizzando la chiave pubblica. Secondo il rapporto Sectigo Certificate Transparency (2025), oltre l’85% dei certificati TLS su Internet utilizza RSA per le firme digitali, rendendo l’algoritmo il fondamento della fiducia per le comunicazioni web.

kotlin
import java.security.Signature

fun signData(data: ByteArray, privateKey: java.security.PrivateKey): ByteArray {
    val signature = Signature.getInstance("SHA256withRSA")
    signature.initSign(privateKey)
    signature.update(data)
    return signature.sign()
}

fun verifySignature(
    data: ByteArray, signedData: ByteArray, publicKey: java.security.PublicKey
): Boolean {
    val signature = Signature.getInstance("SHA256withRSA")
    signature.initVerify(publicKey)
    signature.update(data)
    return signature.verify(signedData)
}

Dimensioni delle chiavi e livello di sicurezza

La lunghezza della chiave influisce direttamente sulla forza crittografica di RSA. Con l’aumento della potenza di calcolo, la dimensione minima accettabile della chiave viene regolarmente rivista dagli organismi internazionali di normazione. Esaminiamo le raccomandazioni attuali di NIST e di altri enti regolatori.

Lunghezza chiaveEquivalente simmetricoStato
1024 bit80 bitVietato dal 2023
2048 bit112 bitStandard minimo
3072 bit128 bitRaccomandato per nuovi sistemi
4096 bit256 bitPer dati riservati

Impatto sulle prestazioni

L’aumento della lunghezza della chiave RSA influisce significativamente sul tempo di esecuzione delle operazioni. Generare una chiave di 4096 bit richiede circa 10 volte più tempo rispetto a una chiave di 2048 bit. Le operazioni di crittografia e decrittografia con una chiave più lunga richiedono più risorse computazionali, il che è critico per i dispositivi mobili con consumo energetico limitato.

Minaccia quantistica

Con lo sviluppo del calcolo quantistico, RSA può essere violato utilizzando l’algoritmo di Shor in tempo polinomiale. Questo algoritmo, proposto da Peter Shor nel 1994, può fattorizzare grandi numeri in O((log n)^3) operazioni. Secondo la IBM Quantum Roadmap (2025), la violazione pratica di RSA-2048 non è prevista prima del 2035, tuttavia NIST raccomanda già una transizione graduale agli algoritmi post-quantistici CRYSTALS-Kyber e CRYSTALS-Dilithium.

Applicazione di RSA nello sviluppo mobile

RSA viene attivamente utilizzato nelle applicazioni mobili per garantire la trasmissione sicura dei dati, l’autenticazione dei server e la protezione delle transazioni digitali. L’integrazione avviene attraverso le API crittografiche standard di entrambe le piattaforme principali.

Android Keystore

La piattaforma Android fornisce Android Keystore — un archivio sistemico di chiavi crittografiche protetto dal livello hardware Trusted Execution Environment. Le chiavi RSA generate in KeyStore non possono essere estratte dal dispositivo anche se l’applicazione viene compromessa. Ciò fornisce protezione contro un’ampia gamma di attacchi, inclusi i malware con accesso root.

kotlin
import android.security.keystore.KeyGenParameterSpec
import android.security.keystore.KeyProperties
import java.security.KeyPairGenerator

fun generateKeyInAndroidKeystore() {
    val generator = KeyPairGenerator.getInstance(
        KeyProperties.KEY_ALGORITHM_RSA,
        "AndroidKeyStore"
    )
    val spec = KeyGenParameterSpec.Builder(
        "rsa_key_pair",
        KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
    )
        .setKeySize(2048)
        .setBlockModes(KeyProperties.BLOCK_MODE_ECB)
        .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_OAEP)
        .build()
    generator.initialize(spec)
    val keyPair = generator.generateKeyPair()
}

iOS Security Framework

Su iOS, RSA viene gestito tramite Security Framework con accesso a Secure Enclave sui dispositivi con chip A7 e successivi. Secure Enclave è un coprocessore dedicato isolato dal processore principale che esegue operazioni crittografiche e archivia le chiavi in un vault hardware. Le chiavi RSA possono essere generate sia all’interno di Secure Enclave che nel Keychain software con vari livelli di accesso.

Crittografia ibrida nella pratica

Nelle applicazioni mobili reali, RSA viene raramente utilizzato per la crittografia diretta di grandi dati. La pratica standard è uno schema ibrido: l’applicazione genera una chiave di sessione AES, la crittografa con la chiave pubblica RSA del server e la invia al server. Tutto il traffico successivo viene crittografato con AES, che è 100-1000 volte più veloce della trasmissione diretta dei dati tramite RSA.

Vantaggi e limitazioni di RSA

Come qualsiasi algoritmo crittografico, RSA ha punti di forza e debolezze che devono essere considerati quando si progettano sistemi sicuri. Una valutazione obiettiva aiuta a scegliere lo strumento giusto per un compito specifico.

Vantaggi principali

Il principale vantaggio di RSA è risolvere il problema fondamentale della distribuzione delle chiavi — la chiave pubblica può essere pubblicata liberamente senza rischi di compromettere l’intero sistema. La versatilità dell’algoritmo si manifesta nel supporto sia della crittografia che delle firme digitali con un’unica coppia di chiavi. Inoltre, RSA dispone di un vasto ecosistema di supporto: le librerie sono disponibili per tutti i linguaggi e le piattaforme.

Limitazioni principali

Lo svantaggio principale di RSA è le scarse prestazioni rispetto agli algoritmi simmetrici. La decrittografia di RSA-2048 su un processore mobile moderno richiede circa 5-15 millisecondi, mentre AES-256 elabora gigabyte di dati nello stesso tempo. Inoltre, RSA è vulnerabile agli attacchi quantistici tramite l’algoritmo di Shor, il che ne limita l’uso in sistemi che richiedono protezione dei dati a lungo termine.

Raccomandazioni d’uso

Per i progetti mobili, gli esperti NIST raccomandano: utilizzare RSA solo per la crittografia delle chiavi e le firme digitali, scegliere una lunghezza della chiave di almeno 3072 bit per i nuovi progetti, combinare RSA con AES in uno schema ibrido e monitorare lo sviluppo degli standard post-quantistici per una migrazione pianificata a lungo termine.

Domande frequenti

Qual è la differenza tra RSA e AES?

RSA è un algoritmo asimmetrico con una coppia di chiavi utilizzato per crittografare piccoli volumi di dati e firme digitali. AES è un algoritmo simmetrico con un’unica chiave condivisa, che funziona 100-1000 volte più velocemente di RSA. Nei sistemi moderni vengono combinati: RSA protegge la trasmissione della chiave di sessione AES, mentre AES crittografa il traffico principale.

Quale dimensione della chiave RSA è considerata sicura oggi?

La dimensione minima sicura dal 2023 è RSA-2048 secondo NIST SP 800-131A Rev. 2. Le chiavi da 1024 bit sono ufficialmente vietate per i sistemi governativi statunitensi. Per i nuovi progetti si raccomandano 3072 bit, che offrono un margine di sicurezza e una forza equivalente alla crittografia simmetrica 128 bit.

Si può utilizzare RSA nelle applicazioni mobili?

Sì, RSA è ampiamente utilizzato nelle applicazioni mobili. Android fornisce Android KeyStore per la generazione hardware e l’archiviazione sicura delle chiavi RSA. iOS fornisce Security Framework con supporto Secure Enclave. Per la crittografia di grandi dati, si raccomanda uno schema ibrido RSA + AES, in cui RSA crittografa solo la chiave di sessione.

Si può violare RSA-2048?

Sui computer classici, violare RSA-2048 è praticamente impossibile — secondo le stime attuali, richiederebbe oltre 300 miliardi di anni di calcolo continuo. Tuttavia, un computer quantistico con un numero sufficiente di qubit potrebbe violare RSA-2048 in pochi minuti utilizzando l’algoritmo di Shor. Secondo le stime di IBM, un computer del genere non apparirà prima del 2035.

Quali alternative a RSA esistono?

Tra gli algoritmi asimmetrici, ECC (Crittografia a Curva Ellittica) è popolare, offrendo una sicurezza equivalente con una lunghezza della chiave inferiore — ECC a 256 bit equivale a RSA-3072. Per l’era post-quantistica, NIST ha selezionato CRYSTALS-Kyber per la crittografia e CRYSTALS-Dilithium per le firme digitali nel 2024.

Riepilogo

  • RSA è un algoritmo di crittografia asimmetrica basato sulla difficoltà di fattorizzare grandi numeri.
  • Coppia di chiavi — pubblica per la crittografia e privata per la decrittografia, risolve il problema della distribuzione delle chiavi.
  • Dimensione 2048 bit è lo standard di sicurezza minimo dal 2023.
  • Prestazioni di RSA sono 2-3 ordini di grandezza inferiori rispetto ai cifrari simmetrici, quindi viene utilizzato in schemi ibridi.
  • Firme digitali con RSA vengono utilizzate nell’85% dei certificati TLS di Internet.
  • Piattaforme mobili Android e iOS forniscono API integrate per lavorare con RSA.
  • Migrazione post-quantistica — fino al 2035, RSA rimarrà lo standard principale, poi inizierà la transizione verso nuovi algoritmi.

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche