Chiave pubblica, chiave privata e crittografia asimmetrica
In questo articolo, abbiamo introdotto i concetti di chiavi pubbliche, chiavi private e i principi della crittografia asimmetrica. Abbiamo confrontato i loro pro e contro con la crittografia simmetrica, nonché le differenze nei loro scenari di utilizzo.
Potresti aver sentito parlare di chiavi private e chiavi pubbliche in molti contesti, ma sai davvero cosa sono?
Crittografia asimmetrica vs crittografia simmetrica
Le chiavi private e le chiavi pubbliche sono concetti della crittografia asimmetrica (nota anche come crittografia a chiave pubblica, PKC).
La crittografia asimmetrica si riferisce a un metodo di crittografia o firma dei dati utilizzando due chiavi diverse (chiave privata + chiave pubblica), le quali corrispondono alla necessità di decrittazione o verifica delle firme. La chiave pubblica è visibile a chiunque, mentre la chiave privata è disponibile solo al proprietario della chiave. Puoi facilmente intuire dal nome delle chiavi.
Allo stesso modo, puoi probabilmente immaginare che la crittografia simmetrica si riferisce al metodo di crittografia e decrittazione dei dati utilizzando la stessa chiave.
Usiamo quindi una semplice annotazione per mostrare il processo di crittografia/decrittazione sia della crittografia simmetrica che asimmetrica.
È importante notare che le funzioni di crittografia/decrittazione negli algoritmi di crittografia simmetrica e asimmetrica sono diverse e spesso utilizzano algoritmi diversi. Gli algoritmi di crittografia simmetrica comuni includono DES, AES, RC2, RC4 e altri, mentre gli algoritmi di crittografia asimmetrica comuni includono RSA e EC.
Logto utilizza l'algoritmo EC per la crittografia e decrittazione dei dati poiché è più efficiente e sicuro di RSA, puoi leggere questo post per maggiori dettagli. Logto supporterà anche RSA nel prossimo rilascio per una migliore compatibilità con alcuni sistemi legacy.
Perché usare la crittografia asimmetrica?
La crittografia asimmetrica affronta il problema della distribuzione delle chiavi nella crittografia simmetrica.
Poiché la crittografia simmetrica utilizza la stessa chiave, distribuire la chiave su una connessione di rete non sicura potrebbe rischiare di esporre la chiave a terze parti malintenzionate. Una terza parte malintenzionata potrebbe utilizzare la chiave rubata per accedere a qualsiasi informazione crittografata con quella chiave, rappresentando un rischio significativo per la sicurezza.
Due casi d'uso comuni della crittografia asimmetrica
Invio di dati crittografati
Il mittente può utilizzare la chiave pubblica del destinatario per crittografare le informazioni, e il destinatario usa la propria chiave privata per decrittare le informazioni.
Poiché le chiavi pubbliche sono teoricamente disponibili a molte persone, in uno scenario ideale, il destinatario può ricevere informazioni crittografate da molti mittenti. Inoltre, più mittenti non possono conoscere che tipo di informazioni altri mittenti hanno inviato al destinatario, poiché solo il destinatario (il titolare della chiave privata) può decrittare e recuperare le informazioni.
Le chiavi pubbliche e private vengono spesso generate contemporaneamente. Quanto menzionato sopra riguarda la generazione di chiavi private e chiavi pubbliche su una parte, e poi la distribuzione della chiave pubblica ai suoi utenti. Se devi garantire una comunicazione sicura tra entrambe le parti, allora entrambe le parti devono generare le proprie chiavi private e chiavi pubbliche, e poi scambiare le rispettive chiavi pubbliche. In questo modo, entrambe le parti hanno le chiavi pubbliche l'una dell'altra, e possono utilizzare le proprie chiavi private e la chiave pubblica dell'altra parte per crittografare e decrittare.
Utilizzo di una firma per garantire la fedeltà dei dati
Nella crittografia asimmetrica, la parte che detiene la chiave privata può firmare i dati che invia. Successivamente, il destinatario con la chiave pubblica può verificare la coerenza dei dati e della firma al ricevimento dei dati, assicurandosi che i dati non siano stati manomessi durante la trasmissione.
Usando l'annotazione che abbiamo definito nella sezione precedente, il processo di firma e verifica delle firme può essere rappresentato come segue:
La verifica della firma digitale prova che la parte che genera la firma conosce la chiave privata corrispondente.
Probabilmente trovi questi due casi d'uso menzionati molto familiari. Nella nostra vita quotidiana, quasi tutti i servizi con architettura client-server utilizzano la crittografia asimmetrica per garantire la sicurezza dei dati.
Come un framework per l'identità degli utenti in rapida crescita, Logto utilizza ampiamente PKC per garantire la sicurezza dei dati degli utenti. Dopo che gli utenti completano il processo di accesso, Logto emette un token di accesso agli utenti per concedere loro permessi specifici per accedere alle risorse richieste. La chiave pubblica pubblicata da Logto viene utilizzata per verificare che il token di accesso sia effettivamente emesso da Logto e non sia stato manomesso da attaccanti malintenzionati.
Criticità della crittografia asimmetrica
In generale, la lunghezza della chiave per la crittografia simmetrica è di 128 o 256 bit, mentre la lunghezza della chiave per la crittografia asimmetrica può raggiungere i 4096 bit. Questo perché la chiave privata e pubblica sono matematicamente correlate e uniche coppie di chiavi. In teoria, conoscendo la chiave pubblica, è possibile calcolare il valore della chiave privata, ma a causa della complessità degli algoritmi coinvolti, spesso ci vuole un notevole periodo di tempo. Per rendere il compito di "rompere" la chiave privata "impossibile", utilizzare lunghezze di chiave più lunghe è un approccio semplice.
Conclusioni
La crittografia asimmetrica consuma più risorse computazionali e tempo rispetto alla crittografia simmetrica durante i calcoli come discusso nella sezione precedente. Nelle applicazioni in cui la comunicazione è frequente, l'uso diffuso della crittografia asimmetrica potrebbe influenzare le prestazioni e l'esperienza utente.
Nei contesti aziendali, la crittografia simmetrica e asimmetrica vengono spesso utilizzate insieme per bilanciare le prestazioni e la sicurezza dei dati. Quando costruisci il tuo servizio, puoi considerare i requisiti di sicurezza dei dati in ogni fase e scegliere di conseguenza gli algoritmi di crittografia appropriati.