# Crittografia

La crittografia è una tecnica fondamentale per proteggere le informazioni, consentendo di mascherarle in modo che solo il destinatario autorizzato possa leggerle e decodificarle. Questo processo aumenta significativamente la confidenzialità e la riservatezza dei dati, impedendo a terzi non autorizzati di accedere a informazioni sensibili.

La crittografia si divide principalmente in due categorie: `simmetrica` e `asimmetrica`.

![symmetric-asymmetric-cryptography](asset/img/symmetric-asymmetric-cryptography.png)

## Crittografia Simmetrica

La crittografia simmetrica utilizza una singola chiave per cifrare e decifrare le informazioni. Questa chiave è generata attraverso algoritmi di cifratura specifici e consiste in una sequenza di bit usati per cifrare e decifrare l'informazione.

Nella crittografia simmetrica, viene generata una chiave che deve essere condivisa in modo sicuro tra le parti coinvolte, ad esempio A e B. Questa chiave è fondamentale, poiché entrambe le parti la utilizzano per cifrare e decifrare le informazioni.

La sicurezza della crittografia simmetrica dipende fortemente dalla segretezza di questa chiave. Se un attaccante riesce a intercettare o ottenere la chiave durante il processo di scambio, può facilmente accedere alle informazioni protette, compromettendo la riservatezza dei dati.

Per garantire uno scambio sicuro della chiave, è essenziale utilizzare metodi di trasmissione sicuri.

## Crittografia Asimmetrica

La crittografia asimmetrica si basa sull'uso di *due chiavi* distinte: una `chiave pubblica`, utilizzata per *cifrare i messaggi*, e una `chiave privata`, utilizzata per *decifrarli*. Questo sistema elimina il problema dello scambio sicuro delle chiavi, poiché ogni entità, come Alice e Bob, genera una coppia di chiavi: una chiave privata, che deve rimanere segreta, e una chiave pubblica, che può essere condivisa liberamente.

Quando Alice desidera inviare un messaggio cifrato a Bob, utilizza la chiave pubblica di Bob per cifrare il messaggio. Una volta cifrato, il messaggio può essere decifrato solo con la chiave privata corrispondente di Bob. Questo significa che, anche se il messaggio cifrato viene intercettato da un attaccante, non potrà essere decifrato senza la chiave privata di Bob.

## Firma Digitale

La firma digitale consente di autenticare l'identità del mittente in una comunicazione, prevenendo così le impersonificazioni. Questo processo garantisce che il messaggio provenga effettivamente dalla persona che afferma di averlo inviato.

Quando un mittente, ad esempio Alice, desidera firmare digitalmente un messaggio, utilizza la sua chiave privata per cifrare un hash del messaggio stesso. La firma digitale risultante viene quindi allegata al messaggio.

Il destinatario, Bob, può verificare l'autenticità del messaggio utilizzando la chiave pubblica di Alice. Decifrando la firma digitale con la chiave pubblica, Bob può confrontare l'hash ottenuto con l'hash del messaggio ricevuto. Se i due hash corrispondono, Bob può essere certo che il messaggio è autentico e che proviene realmente da Alice, poiché solo lei possiede la sua chiave privata.

Grazie alla firma digitale, non è più possibile per un attaccante impersonare Alice, poiché non ha accesso alla sua chiave privata.

![digital-signature](asset/img/digital-signature.png)

## Certification Authority (CA)

La `Certification Authority` (`CA`) è un'entità fondamentale nel contesto della crittografia asimmetrica, poiché affronta il problema della *verifica dell'identità associata a una chiave pubblica*. Quando un attaccante tenta di impersonare un mittente, ad esempio dichiarando di essere Alice e fornendo una chiave pubblica falsa, il destinatario, Bob, potrebbe erroneamente credere di avere la chiave pubblica corretta di Alice, mentre in realtà sta utilizzando quella di un'altra persona, come Charlie.

Per prevenire questo tipo di attacco, la Certification Authority verifica l'identità di un'entità e associa la sua chiave pubblica a questa identità in modo sicuro. Quando Alice richiede un certificato, la CA esegue una serie di controlli per confermare che lei sia effettivamente chi afferma di essere. Una volta completata questa verifica, la CA emette un certificato digitale che include la chiave pubblica di Alice e altre informazioni identificative, firmato digitalmente dalla CA stessa.

Quando Bob riceve la chiave pubblica di Alice, può anche ricevere il certificato digitale emesso dalla CA. Verificando la firma della CA sul certificato, Bob può essere certo che la chiave pubblica appartiene realmente ad Alice e non a un attaccante.
