This commit is contained in:
17
backend/src/main/resources/get/documentazione/AES.md
Normal file
17
backend/src/main/resources/get/documentazione/AES.md
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# L'Algoritmo AES - Advanced Encryption Standard
|
||||||
|
|
||||||
|
Attualmente l'AES rappresenta lo standard globale per la crittografia simmetrica.
|
||||||
|
|
||||||
|
* **Funzionamento a blocchi:** Lavora su blocchi fissi di **128 bit** (circa 16 caratteri alla volta).
|
||||||
|
* **Lunghezza delle chiavi:** Può utilizzare chiavi a **128, 192 o 256 bit**. Più la chiave è lunga, più aumentano le combinazioni matematiche.
|
||||||
|
|
||||||
|
A differenza dei cifrari storici, l'AES processa il blocco di dati ripetutamente attraverso diversi cicli, chiamati **Round** (10, 12 o 14 round a seconda della chiave). In ogni singolo round avvengono 4 trasformazioni geometrico-matematiche:
|
||||||
|
|
||||||
|
1. **SubBytes:** Sostituisce i byte seguendo una tabella fissa (*S-Box*).
|
||||||
|
2. **ShiftRows:** Sposta le righe dei dati facendole scivolare di lato.
|
||||||
|
3. **MixColumns:** Mescola le colonne tra loro tramite formule algebriche.
|
||||||
|
4. **AddRoundKey:** Fonde i dati temporanei con una porzione della chiave segreta tramite un'operazione logica XOR.
|
||||||
|
|
||||||
|
> **Sicurezza dell'AES:** Ad oggi **non esistono attacchi noti** capaci di violare l'AES se la chiave è robusta. Per indovinare una chiave AES a 256 bit tramite attacco a forza bruta (*brute-force*), tutti i supercomputer del pianeta dovrebbero lavorare per miliardi di anni (un tempo superiore all'età dell'universo stesso).
|
||||||
|
|
||||||
|
---
|
||||||
77
backend/src/main/resources/get/documentazione/DF.md
Normal file
77
backend/src/main/resources/get/documentazione/DF.md
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
# L'Algoritmo Diffie And Hellman
|
||||||
|
|
||||||
|
La crittografia simmetrica come sappiamo aveva un enorme problema: lo scambio sicuro della chiave simmetrica
|
||||||
|
|
||||||
|
Questo problema, apparentemente impossibile, è stato risolto nel 1976 da Whitfield Diffie e Martin Hellman grazie al loro rivoluzionario **Protocollo di scambio delle chiavi Diffie-Hellman**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## La Base del Funzionamento: il Logaritmo Discreto
|
||||||
|
|
||||||
|
Nel caso di Diffie-Hellman come funzione si usa l'**elevamento a potenza in aritmetica modulare**.
|
||||||
|
|
||||||
|
L'operazione matematica unidirezionale alla base di Diffie-Hellman è la seguente: dati un numero base $g$, un esponente $x$ e un modulo primo $p$, è molto facile calcolare:
|
||||||
|
|
||||||
|
$$Y = g^x \pmod p$$
|
||||||
|
|
||||||
|
Tuttavia, se conosciamo solo $Y$, $g$ e $p$, trovare l'esponente $x$ è un problema computazionalmente complesso quando i numeri sono molto elevati. Questo problema prende il nome di **Problema del Logaritmo Discreto**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Il Funzionamento dell'Algoritmo
|
||||||
|
Vediamo come si svolge lo scambio numerico tra Alice e Bob.
|
||||||
|
|
||||||
|
### 1 - Scelta di p e r
|
||||||
|
Vengono scelti due numeri noti a entrambi gli utenti:
|
||||||
|
* $p$: Un numero primo elevato e crittograficamente sicuro.
|
||||||
|
* $g$: Un intero chiamato *generatore* (o base), che è una radice primitiva di $p$.
|
||||||
|
|
||||||
|
### 2 - Calcolo della chiavi dell'utente 1 (Alice)
|
||||||
|
* L'utente **Alice** sceglie un numero intero segreto $a$ (la sua chiave privata) e poi calcola la sua chiave pubblica $kpbA$ e la invia a Bob:
|
||||||
|
$$kpb = g^a \pmod p$$
|
||||||
|
|
||||||
|
* L'utente **Bob** riceve i dati e sceglie un numero intero segreto $b$ (la sua chiave privata). Poi calcola la sua chiave pubblica $kpbB$ e la invia ad Alice:
|
||||||
|
$$kpb = g^b \pmod p$$
|
||||||
|
|
||||||
|
### Calcolo della chiave condivisa
|
||||||
|
Ciascuno dei due unisce la chiave pubblica ricevuta con la propria chiave privata.
|
||||||
|
|
||||||
|
* Alice riceve $kpbB$ e calcola la chiave segreta $K$:
|
||||||
|
$$K = B^a \pmod p$$
|
||||||
|
|
||||||
|
* Bob riceve $kpbA$ e calcola la chiave segreta $K$:
|
||||||
|
$$K = A^b \pmod p$$
|
||||||
|
|
||||||
|
### Dimostrazione dell'uguaglianza delle chiavi
|
||||||
|
|
||||||
|
Sostituiamo le definizioni di $A$ e $B$ nelle formule del segreto condiviso:
|
||||||
|
* Per Alice: $K = B^a \pmod p = (g^b)^a \pmod p = g^{ba} \pmod p$
|
||||||
|
* Per Bob: $K = A^b \pmod p = (g^a)^b \pmod p = g^{ab} \pmod p$
|
||||||
|
|
||||||
|
Poiché nell'esponente la proprietà commutativa della moltiplicazione è valida ($ab = ba$), ne consegue che:
|
||||||
|
$$g^{ab} \pmod p = g^{ba} \pmod p$$
|
||||||
|
|
||||||
|
Alice e Bob hanno calcolato lo stesso identico numero $K$. Questo numero verrà ora utilizzato come chiave simmetrica per cifrare il resto della loro sessione di comunicazione.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Esempio Didattico con Valori Ristretti
|
||||||
|
|
||||||
|
Proviamo il protocollo con cifre contenute:
|
||||||
|
|
||||||
|
1. **Parametri Pubblici:** Scegliamo il numero primo $p = 23$ e il generatore $g = 5$.
|
||||||
|
2. **Alice:**
|
||||||
|
* Sceglie il segreto privato $a = 6$.
|
||||||
|
* Calcola la chiave pubblica: $A = 5^6 \pmod{23} = 15625 \pmod{23} = 8$.
|
||||||
|
* Invia $A = 8$ a Bob.
|
||||||
|
3. **Bob:**
|
||||||
|
* Sceglie il segreto privato $b = 15$.
|
||||||
|
* Calcola la chiave pubblica: $B = 5^{15} \pmod{23} = 19$.
|
||||||
|
* Invia $B = 19$ ad Alice.
|
||||||
|
4. **Calcolo della chiave comune $K$:**
|
||||||
|
* **Alice** calcola: $K = B^a \pmod{23} = 19^6 \pmod{23} = 2$.
|
||||||
|
* **Bob** calcola: $K = A^b \pmod{23} = 8^{15} \pmod{23} = 2$.
|
||||||
|
|
||||||
|
Entrambi hanno ottenuto autonomamente il numero **2**. Un malintenzionato che ha ascoltato la conversazione conosce solo $p=23, g=5, A=8, B=19$, ma senza risolvere il logaritmo discreto non può risalire al valore 2.
|
||||||
|
|
||||||
|
---
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
|
|
||||||
## 4. Politiche e Strategie di Sicurezza
|
|
||||||
|
|
||||||
* **Difesa in profondità (Defense in Depth):** Approccio basato su livelli multipli di sicurezza (come gli strati di una cipolla). Se un attaccante supera una barriera, ne troverà subito un'altra.
|
|
||||||
* **Zero Trust (Fiducia Zero):** Modello di sicurezza basato sul principio "mai fidarsi, verificare sempre". Non viene concessa fiducia predefinita a nessun utente o dispositivo, anche se si trova all'interno della rete aziendale.
|
|
||||||
---
|
|
||||||
### Metriche per il ripristino
|
|
||||||
* **RPO (Recovery Point Objective):** La quantità massima di dati (in termini di tempo) che l'azienda può permettersi di perdere in caso di disastro (indica la frequenza con cui fare i backup).
|
|
||||||
* **RTO (Recovery Time Objective):** Il tempo massimo tollerato per ripristinare i sistemi ed essere nuovamente operativi.
|
|
||||||
|
|
||||||
### Pianificazione delle emergenze
|
|
||||||
* **DRP (Disaster Recovery Plan):** Documento tecnico che definisce le procedure passo-passo per ripristinare l'infrastruttura IT e i dati dopo un evento catastrofico.
|
|
||||||
* **BCP (Business Continuity Plan):** Piano strategico più ampio che definisce come l'intera organizzazione continuerà a erogare i propri servizi e mantenere la propria operatività durante e dopo una crisi.
|
|
||||||
101
backend/src/main/resources/get/documentazione/RSA.md
Normal file
101
backend/src/main/resources/get/documentazione/RSA.md
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
# L'Algoritmo RSA
|
||||||
|
|
||||||
|
L'algoritmo RSA è Il primo algoritmo che soddisfa i requisiti della chiave pubblica è stato messo a punto solo nel 1977 da Ron Rivest, Adli Shamir e Leonard Adlemann, ed è noto, dalle iniziali degli autori, come algoritmo RSA.
|
||||||
|
Ancora oggi è uno dei più utilizzati in tutto il mondo
|
||||||
|
|
||||||
|
## La Base dell'Algoritmo: La Fattorizzazione di Interi
|
||||||
|
|
||||||
|
La sicurezza di RSA poggia su un concetto matematico noto come **funzione unidirezionale a botola (trapdoor function)**.
|
||||||
|
Si tratta di un'operazione estremamente facile da eseguire in un senso, ma quasi impossibile da invertire, a meno che non si possieda un'informazione aggiuntiva (la "botola").
|
||||||
|
|
||||||
|
* La funzione di complessità “polinomiale” è la **moltiplicazione di due numeri primi p e q molto grandi**;
|
||||||
|
Poichè noti p e q, il prodotto n = pq si calcola immediatamente.
|
||||||
|
|
||||||
|
|
||||||
|
* La funzione inversa, di complessità "esponenziale", è la **fattorizzazione**;
|
||||||
|
Se un numero n è il prodotto di due numeri primi “grandi”, la sua fattorizzazione richiede di norma tempi superiori all’età dell’universo. Infatti non si conoscono a tutt’oggi (e c’è ragione di ritenere che non si conosceranno mai), algoritmi efficienti di fattorizzazione.
|
||||||
|
|
||||||
|
### Esempio pratico
|
||||||
|
Dati due numeri primi:
|
||||||
|
$$p = 61 \quad \text{e} \quad q = 53$$
|
||||||
|
Calcolare il loro prodotto $n$ è un gioco da ragazzi:
|
||||||
|
$$n = p \times q = 61 \times 53 = 3233$$
|
||||||
|
|
||||||
|
Ma se ti dessi direttamente $n = 3233$ e ti chiedessi di trovare i due fattori primi originali $p$ e $q$, ci vorrebbe molto più tempo.
|
||||||
|
Nella realtà, RSA utilizza numeri primi lunghi migliaia di cifre: un supercomputer impiegherebbe miliardi di anni per trovare i fattori primi partendo da $n$.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Generazione delle Chiavi
|
||||||
|
|
||||||
|
Vediamo come un utente (per convenzione Alice) genera la sua coppia di chiavi.
|
||||||
|
|
||||||
|
### 1 - Scelta dei numeri primi p e q
|
||||||
|
Vengono scelti due numeri primi casuali, crittograficamente sicuri e particolarmente grandi, $p$ e $q$.
|
||||||
|
|
||||||
|
### 2 - Calcolo del modulo n
|
||||||
|
Viene calcolato il loro prodotto:
|
||||||
|
$$n = p \times q$$
|
||||||
|
Il numero $n$ sarà la lunghezza del nostro "orologio" nell'aritmetica modulare e farà parte della chiave pubblica.
|
||||||
|
|
||||||
|
### 3 - Calcolo della funzione Toziente di Eulero phi
|
||||||
|
Si calcola la funzione $\phi(n)$ (phi di Eulero), che indica quanti numeri interi minori di $n$ sono coprimi con $n$:
|
||||||
|
$$\phi(n) = (p - 1) \times (q - 1)$$
|
||||||
|
|
||||||
|
### 4 - Scelta dell'esponente pubblico e
|
||||||
|
Viene scelto un intero $e$ (esponente di cifratura) tale che:
|
||||||
|
* $1 < e < \phi(n)$
|
||||||
|
* $e$ e $\phi(n)$ siano coprimi (cioè il loro Massimo Comune Divisore sia 1).
|
||||||
|
|
||||||
|
*Nota: Nella pratica comune si usa spesso il numero $e = 65537$ perché rende i calcoli veloci.*
|
||||||
|
|
||||||
|
### 5 - Calcolo dell'esponente privato d
|
||||||
|
Alice calcola l'esponente di decifratura $d$ (la chiave privata). Questo numero è l'inverso moltiplicativo di $e$ modulo $\phi(n)$. Significa che deve soddisfare la seguente formula:
|
||||||
|
$$d \times e \equiv 1 \pmod{\phi(n)}$$
|
||||||
|
|
||||||
|
### 6 - Il Mazzo di Chiavi
|
||||||
|
A questo punto è stato generato un mazzo di chiavi composto da due coppie di numeri:
|
||||||
|
|
||||||
|
* **Chiave Pubblica:** Coppia $(e, n)$
|
||||||
|
* **Chiave Privata:** Coppia $(d, n)$ (mentre $p$, $q$ e $\phi(n)$ devono essere distrutti o nascosti!).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Cifratura e Decifratura
|
||||||
|
|
||||||
|
Supponiamo che Bob voglia inviare un messaggio segreto ad Alice.
|
||||||
|
|
||||||
|
### Cifratura (Bob)
|
||||||
|
1. Bob prende la chiave pubblica di Alice: $(e, n)$.
|
||||||
|
3. Calcola il messaggio cifrato $C$ usando la formula di cifratura:
|
||||||
|
$$C \equiv M^e \pmod n$$
|
||||||
|
4. Bob invia il messaggio cifrato $C$ ad Alice.
|
||||||
|
|
||||||
|
### Decifratura (Alice)
|
||||||
|
1. Alice riceve $C$.
|
||||||
|
2. Usa la sua chiave privata $(d, n)$ per ripristinare il messaggio originale $M$ tramite la formula di decifratura:
|
||||||
|
$$M \equiv C^d \pmod n$$
|
||||||
|
|
||||||
|
Grazie ai teoremi di Eulero e Fermat, l'aritmetica modulare garantisce che l'operazione $(M^e)^d \pmod n$ restituisca esattamente $M$. Un eventuale spia che intercettasse $C$, $e$ ed $n$ non potrebbe calcolare $M$ perché non conosce $d$, e calcolare $d$ richiederebbe la fattorizzazione di $n$ in $p$ e $q$.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Esempio Pratico con Valori Ridotti
|
||||||
|
|
||||||
|
1. **Scelta:** Scegliamo $p = 3$ e $q = 11$.
|
||||||
|
2. **Modulo:** $n = 3 \times 11 = 33$.
|
||||||
|
3. **Toziente:** $\phi(n) = (3 - 1) \times (11 - 1) = 2 \times 10 = 20$.
|
||||||
|
4. **Esponente Pubblico:** Scegliamo $e = 3$ (notiamo che $3$ e $20$ non hanno fattori in comune, quindi sono coprimi).
|
||||||
|
* *Chiave Pubblica: $(e=3, n=33)$*
|
||||||
|
5. **Esponente Privato:** Cerchiamo un numero $d$ tale che $d \times 3 \equiv 1 \pmod{20}$. Il numero è $d = 7$, infatti $7 \times 3 = 21$, e $21 \div 20$ dà resto $1$.
|
||||||
|
* *Chiave Privata: $(d=7, n=33)$*
|
||||||
|
|
||||||
|
### Il messaggio da cifrare è $M = 9$:
|
||||||
|
$$C \equiv 9^3 \pmod{33} = 729 \pmod{33}$$
|
||||||
|
Se dividiamo $729$ per $33$, otteniamo $22$ con il resto di **3**. Quindi $C = 3$.
|
||||||
|
|
||||||
|
### Il messaggio da decifrare è $C = 3$:
|
||||||
|
$$M \equiv 3^7 \pmod{33} = 2187 \pmod{33}$$
|
||||||
|
Se dividiamo $2187$ per $33$, otteniamo $66$ con il resto di **9**. Abbiamo recuperato il messaggio originale $M = 9$!
|
||||||
|
|
||||||
|
---
|
||||||
1
backend/src/main/resources/get/documentazione/SHA512.md
Normal file
1
backend/src/main/resources/get/documentazione/SHA512.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
# La Funzione SHA-512
|
||||||
@@ -184,6 +184,7 @@ Utilizzo di strumenti, app o servizi cloud **non approvati dall'IT aziendale**,
|
|||||||
Con il passare degli anni e l'avvento delle nuove tecnologie il modo per sferrare gli attacchi è mutato ed è diventato pìiù sofisticato, e così sono nate le gli **attacchi APT**.
|
Con il passare degli anni e l'avvento delle nuove tecnologie il modo per sferrare gli attacchi è mutato ed è diventato pìiù sofisticato, e così sono nate le gli **attacchi APT**.
|
||||||
Gli attacchi APT vengono definiti come tecniche di hacking mirate e sofisticate, usate per **sabotaggio o spionaggio a lungo termine** e sono solitamente basati sul **Social Engineering**.
|
Gli attacchi APT vengono definiti come tecniche di hacking mirate e sofisticate, usate per **sabotaggio o spionaggio a lungo termine** e sono solitamente basati sul **Social Engineering**.
|
||||||
Prevedono 7 fasi precise:
|
Prevedono 7 fasi precise:
|
||||||
|
|
||||||
* Ricognizione
|
* Ricognizione
|
||||||
Vengono raccolte una serie di informazioni aggiornate e pubbliche riguardanti il target tramite **social engineering** per capire al meglio la struttura e il funzionamento del sistema che si vuole attaccare e le sue debolezze (spesso è proprio il lato umano la maggiore debolezza).
|
Vengono raccolte una serie di informazioni aggiornate e pubbliche riguardanti il target tramite **social engineering** per capire al meglio la struttura e il funzionamento del sistema che si vuole attaccare e le sue debolezze (spesso è proprio il lato umano la maggiore debolezza).
|
||||||
* Armamento
|
* Armamento
|
||||||
|
|||||||
@@ -1,29 +1,48 @@
|
|||||||
# La Crittografia Asimmetrica
|
# La Crittografia Asimmetrica
|
||||||
|
|
||||||
La crittografia **asimmetrica** nasce con il problema dello scambio delle chiavi
|
La crittografia **asimmetrica** nasce per risolvere il problema dello scambio delle chiavi, una delle criticità legata alla crittografia simmetrica, tramite i principi aritmetica modulare e le proprietà dei numeri primi.
|
||||||
|
|
||||||
* **Crittografia Asimmetrica (a chiave pubblica):** Ogni utente possiede una *coppia di chiavi*:
|
La differenza fondamentale tra quest'ultima e la crittografia simmetrica è proprio la chiave: questa volta ogni utente ne possiederà due:
|
||||||
1. **Chiave Pubblica:** Conosciuta da tutti, usata per cifrare i messaggi rivolti al proprietario.
|
|
||||||
2. **Chiave Privata:** Segreta e nota solo al proprietario, usata per decifrare.
|
|
||||||
* *Pro:* Risolve il problema dello scambio delle chiavi.
|
|
||||||
* *Contro:* Molto lenta, richiede molta potenza di calcolo.
|
|
||||||
* *Esempi:* RSA, Curve Ellittiche.
|
|
||||||
|
|
||||||
### Integrità e Firma Digitale
|
* La**chiave pubblica**: una chiave che è utilizzabile a tutti e utilizzata per comunicare con l'utente, nella cifratura dei dati
|
||||||
* **Funzioni Hash:** Algoritmi matematici che prendono in input un file e restituiscono una stringa di lunghezza fissa chiamata *digest* (l'impronta digitale del file). È un processo unidirezionale (non si può tornare al file originale) e serve a garantire l'integrità dei dati.
|
|
||||||
* **Firma Digitale:** Garantisce *Autenticità, Integrità e Non Ripudio*. Si ottiene cifrando l'hash del messaggio con la **chiave privata** del mittente. Il destinatario userà la **chiave pubblica** del mittente per decifrare l'hash e verificarlo.
|
|
||||||
* **Certificati Digitali:** Documenti elettronici rilasciati da una **CA (Certification Authority)** che garantiscono l'identità del proprietario di una chiave pubblica.
|
|
||||||
|
|
||||||
## Autenticazione e Controllo degli Accessi
|
* La**chiave privata**: una chiave che è accessibile solamente all'utente che la possiede e viene usata nella decifratura
|
||||||
|
|
||||||
* **Identificazione:** Dichiarare chi si è (es. inserire l'username).
|
Queste due chiavi sono legate da relazioni matematiche dette **"unidirezionali con trappola"** (*trapdoor one-way functions*):
|
||||||
* **Autenticazione:** Dimostrare chi si è (es. inserire la password).
|
operazioni facili da eseguire in un senso, ma computazionalmente impossibili da invertire, a meno che non si conosca un'informazione specifica chiamata "trappola" (la chiave privata).
|
||||||
* **Autorizzazione:** Stabilire a quali risorse l'utente autenticato ha diritto di accedere.
|
|
||||||
|
|
||||||
### Fattori di Autenticazione
|
* Ricavare la **chiave pubblica** partendo dalla privata risulti di **complessità polinomiale**
|
||||||
L'autenticazione si basa su tre paradigmi:
|
|
||||||
1. **Something you know** (Qualcosa che sai): Password, PIN.
|
|
||||||
2. **Something you have** (Qualcosa che hai): Token hardware, Smartcard, Smartphone.
|
|
||||||
3. **Something you are** (Qualcosa che sei): Biometria (impronta digitale, riconoscimento facciale).
|
|
||||||
|
|
||||||
* **MFA (Multi-Factor Authentication):** L'utilizzo combinato di due o più di questi fattori per aumentare drasticamente il livello di sicurezza.
|
* Ricavare la **chiave privata** partendo dalla pubblica risulti di **complessità esponenziale**
|
||||||
|
|
||||||
|
### Cifratura
|
||||||
|
Chiunque può cifrare un messaggio per il destinatario usando la chiave pubblica di quest'ultimo:
|
||||||
|
$$C = E(K_{pub}, M)$$
|
||||||
|
|
||||||
|
### Decifratura
|
||||||
|
Solo il legittimo proprietario può decifrare il testo usando la propria chiave privata:
|
||||||
|
$$M = D(K_{priv}, C)$$
|
||||||
|
|
||||||
|
### Proprietà di Correttezza
|
||||||
|
Il sistema garantisce che solo la chiave privata corrispondente possa invertire il processo:
|
||||||
|
$$D(K_{priv}, E(K_{pub}, M)) = M$$
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Comunicazione Standard con Crittografia Asimmetrica
|
||||||
|
|
||||||
|
1. Entrambi gli utenti calcolano il loro mazzo di chiavi adoperando un determinato algoritmo
|
||||||
|
2. Il mittente M cifra il messaggio che vuole inviare con la chiave pubblica del destinatario T e lo invia
|
||||||
|
3. Il destinatario D riceve il messaggio e lo decifra con la sua chiave privata, è l'unico a poterlo fare
|
||||||
|
|
||||||
|
|
||||||
|
> La riservatezza del messaggio è garantita ma la sua identità no, per quella serve una CA - Certification Authority, il procedimento adeguato per arrivare a garantire il triangolo della sicurezza informatica verrà descritto in un articolo a parte
|
||||||
|
|
||||||
|
## Comunicazione Standard con Crittografia Asimmetrica
|
||||||
|
|
||||||
|
Gli algoritmi di crittografia asimmetrica più rinomati sono:
|
||||||
|
|
||||||
|
* **RSA - Rivest,Shamir,Adleman**
|
||||||
|
* **Diffie and Hellman**
|
||||||
|
|
||||||
|
Essi verrano analizzati in maniera approfondita negli articoli seguenti
|
||||||
@@ -1,21 +1,77 @@
|
|||||||
# La Crittografia Simmetrica
|
# La Crittografia Simmetrica
|
||||||
|
|
||||||
La crittografia **simmetrica**, affonda le sue radici nell'antichità come prova che l'uomo ha sempre cercato
|
La crittografia **simmetrica** affonda le sue radici nell'antichità, a testimonianza del fatto che l'uomo ha sempre cercato un modo per **rendere incomprensibili** le proprie informazioni riservate agli occhi degli estranei.
|
||||||
in qualche modo di **rendere incomprensibili** dall'esterno alcune delle sue informazioni.
|
|
||||||
|
|
||||||
Il suo funzionamento è molto intuitivo, prevede due funzioni una di encrypt e una di decrypt (dette spesso cifrario
|
|
||||||
)che adoperano la medesima **chiave** nell'algoritmo, ciò significa quindi che l'intera sicurezza dei dati si fonda sulla
|
|
||||||
segretezza della chiave.
|
|
||||||
|
|
||||||
Distinguiamo prima di addentrarci due tipi di cifrari:
|
Il suo funzionamento è molto intuitivo e prevede due funzioni (dette complessivamente **cifrario**): una di *encrypt* (cifratura) e una di *decrypt* (decifratura). Entrambe adoperano la **medesima chiave** all'interno dell'algoritmo; ciò significa che l'intera sicurezza dei dati si fonda esclusivamente sulla segretezza della chiave stessa.
|
||||||
|
|
||||||
|
### Cifratura
|
||||||
|
Per ottenere il testo cifrato si applica la funzione $E$ al messaggio usando la chiave $K$:
|
||||||
|
$$C = E(K, M)$$
|
||||||
|
|
||||||
|
### Decifratura
|
||||||
|
Per riottenere il messaggio originale si applica la funzione $D$ al testo cifrato usando la medesima chiave $K$:
|
||||||
|
$$M = D(K, C)$$
|
||||||
|
|
||||||
|
### Proprietà di Correttezza
|
||||||
|
L'algoritmo è valido se e solo se la decifratura annulla esattamente la cifratura:
|
||||||
|
$$D(K, E(K, M)) = M$$
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Classificazione dei Cifrari Classici
|
||||||
|
|
||||||
|
Prima di addentrarci nella storia, è fondamentale distinguere due macro-categorie di cifrari:
|
||||||
|
|
||||||
|
* **Cifrari a Sostituzione:** Consistono nel sostituire ogni carattere del testo in chiaro (*plaintext*) con un altro carattere di un determinato alfabeto, basandosi su un criterio stabilito dall'algoritmo.
|
||||||
|
* **Cifrari a Trasposizione:** Consistono nel creare un **anagramma** del testo in chiaro seguendo uno schema geometrico, senza modificare i caratteri originali o la loro frequenza, ma cambiandone solo la posizione.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## L'Evoluzione Storica
|
||||||
|
|
||||||
|
### 1. La Scitale Spartana (V secolo a.C.)
|
||||||
|
La prima nota storica di crittografia (in questo caso per trasposizione) risale alla **Scitale Spartana**.
|
||||||
|
|
||||||
|
Il suo funzionamento era molto semplice: prima di scrivere il messaggio, gli efori avvolgevano a spirale una striscia di pergamena lunga e stretta attorno a una bacchetta (*scitale*). Questa bacchetta era identica, per lunghezza e diametro, a quella fornita in precedenza al destinatario.
|
||||||
|
|
||||||
|
Dopo aver fatto aderire la pergamena alla bacchetta senza lasciare spazi vuoti o sovrapposizioni, vi scrivevano il messaggio in senso longitudinale. Una volta srotolata, la striscia mostrava solo lettere sparse e scollegate, risultando incomprensibile a eventuali intercettatori. Solo il destinatario, riavvolgendo la pergamena sulla bacchetta gemella, poteva ricostruire l'ordine originario delle lettere.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### 2. Il Cifrario di Cesare (Antica Roma)
|
||||||
|
Il **Cifrario di Cesare** è uno dei più antichi algoritmi di tipo sostitutivo (*sostituzione monoalfabetica*). Ogni lettera del testo in chiaro viene sostituita dalla lettera che si trova un certo numero di posizioni dopo nell'alfabeto (cifrario a scorrimento). In particolare, Giulio Cesare utilizzava uno spostamento fisso di **3 posizioni**.
|
||||||
|
|
||||||
|
#### La vulnerabilità dei sistemi monoalfabetici
|
||||||
|
Dall'XI secolo, con la scoperta dell'**analisi delle frequenze** da parte del matematico arabo *Al-Kindi*, tutti i cifrari a sostituzione monoalfabetica sono diventati facili da violare. Le loro vulnerabilità principali sono:
|
||||||
|
1. **Numero di chiavi limitato:** Facilmente attaccabile tramite *brute-force* (tentando tutte le combinazioni).
|
||||||
|
2. **Invarianza delle frequenze:** Le lettere cifrate mantengono la stessa frequenza statistica delle lettere della lingua originale (es. in italiano la 'E' e la 'A' compaiono più spesso), permettendo di indovinare la chiave.
|
||||||
|
|
||||||
|
### 3. Il Cifrario di Alberti (1467)
|
||||||
|
Per superare i limiti dell'analisi delle frequenze si è giunti al **cifrario polialfabetico** di Leon Battista Alberti. A differenza dei metodi precedenti, non usava lo stesso alfabeto segreto per tutto il messaggio, ma lo cambiava continuamente.
|
||||||
|
|
||||||
|
Lo strumento si basava su **due dischi concentrici** ruotabili:
|
||||||
|
* **Disco Esterno (Fisso):** Conteneva l'alfabeto in chiaro e alcuni numeri.
|
||||||
|
* **Disco Interno (Mobile):** Conteneva un alfabeto disordinato per il testo segreto.
|
||||||
|
|
||||||
|
Il funzionamento prevedeva tre passi:
|
||||||
|
1. **Allineamento iniziale:** Si decideva una chiave di partenza (es. allineare la `A` esterna con la `k` interna).
|
||||||
|
2. **Scrittura:** Si cercava la lettera in chiaro sul disco esterno e si scriveva la corrispondente sul disco mobile.
|
||||||
|
3. **Il colpo di genio:** Ogni tanto il mittente inseriva una lettera maiuscola nel testo. Questa indicava al ricevente di **ruotare il disco interno** su una nuova combinazione, cambiando completamente l'alfabeto da quel punto in poi.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### 4. Il Cifrario di Vigenère
|
||||||
|
Formulato successivamente, nacque come una variante semplificata del concetto di Alberti. Può essere considerato una generalizzazione del cifrario di Cesare: invece di spostare le lettere di un numero fisso di posti, lo spostamento varia carattere per carattere in base a una **parola chiave** (detta anche *verme*). La chiave viene scritta ripetutamente sotto il messaggio per determinare lo scorrimento di ogni singola lettera.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## La Crittografia Simmetrica Moderna: DES e AES
|
||||||
|
|
||||||
|
Oggi i cifrari storici sono obsoleti. La crittografia moderna si affida ad algoritmi matematici complessi tali:
|
||||||
|
|
||||||
|
* **DES**
|
||||||
|
* **Triple DES**
|
||||||
|
* **AES**.
|
||||||
|
|
||||||
* Cifrari a **Sostituizione**: consistono nel sostituire ogni carattere del plaintext con un altro carattere di un determinato alfabeto, basandosi su un criterio dettato dall'algoritmo
|
|
||||||
* Cifrari a **Trasposizione**: consistono nel creare un **anagramma** del plaintext seguendo uno schema geometrico, senza modificare quindi i caratteri
|
|
||||||
|
|
||||||
La prima nota di crittografia simmetrica risale al V secolo a.C, la **Scitale Spartana**
|
|
||||||
|
|
||||||
* **Crittografia Simmetrica (a chiave segreta):** Mittente e destinatario usano la *stessa chiave* sia per cifrare che per decifrare.
|
|
||||||
* *Pro:* Molto veloce.
|
|
||||||
* *Contro:* Il problema dello scambio sicuro della chiave (come farla avere al destinatario senza che venga intercettata).
|
|
||||||
* *Esempi:* DES, AES.
|
|
||||||
|
|
||||||
|
|||||||
21
backend/src/main/resources/get/documentazione/fingerprint.md
Normal file
21
backend/src/main/resources/get/documentazione/fingerprint.md
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# La Firma Digitale e le Certification Authority
|
||||||
|
|
||||||
|
|
||||||
|
### Integrità e Firma Digitale
|
||||||
|
* **Funzioni Hash:** Algoritmi matematici che prendono in input un file e restituiscono una stringa di lunghezza fissa chiamata *digest* (l'impronta digitale del file). È un processo unidirezionale (non si può tornare al file originale) e serve a garantire l'integrità dei dati.
|
||||||
|
* **Firma Digitale:** Garantisce *Autenticità, Integrità e Non Ripudio*. Si ottiene cifrando l'hash del messaggio con la **chiave privata** del mittente. Il destinatario userà la **chiave pubblica** del mittente per decifrare l'hash e verificarlo.
|
||||||
|
* **Certificati Digitali:** Documenti elettronici rilasciati da una **CA (Certification Authority)** che garantiscono l'identità del proprietario di una chiave pubblica.
|
||||||
|
|
||||||
|
## Autenticazione e Controllo degli Accessi
|
||||||
|
|
||||||
|
* **Identificazione:** Dichiarare chi si è (es. inserire l'username).
|
||||||
|
* **Autenticazione:** Dimostrare chi si è (es. inserire la password).
|
||||||
|
* **Autorizzazione:** Stabilire a quali risorse l'utente autenticato ha diritto di accedere.
|
||||||
|
|
||||||
|
### Fattori di Autenticazione
|
||||||
|
L'autenticazione si basa su tre paradigmi:
|
||||||
|
1. **Something you know** (Qualcosa che sai): Password, PIN.
|
||||||
|
2. **Something you have** (Qualcosa che hai): Token hardware, Smartcard, Smartphone.
|
||||||
|
3. **Something you are** (Qualcosa che sei): Biometria (impronta digitale, riconoscimento facciale).
|
||||||
|
|
||||||
|
* **MFA (Multi-Factor Authentication):** L'utilizzo combinato di due o più di questi fattori per aumentare drasticamente il livello di sicurezza.
|
||||||
@@ -4,6 +4,24 @@ La **crittologia** è la scienza che studia le scritture segrete e si divide in:
|
|||||||
1. **Crittografia:** Studio degli algoritmi per offuscare (cifrare) le informazioni.
|
1. **Crittografia:** Studio degli algoritmi per offuscare (cifrare) le informazioni.
|
||||||
2. **Crittoanalisi:** Tecniche usate per violare i sistemi crittografici.
|
2. **Crittoanalisi:** Tecniche usate per violare i sistemi crittografici.
|
||||||
|
|
||||||
*I concetti base:* Il **Testo in chiaro** (leggibile) viene trasformato in **Testo cifrato** tramite un **Algoritmo di cifratura** e una **Chiave** (una stringa di bit).
|
*La procedura base:* Il **Testo in chiaro** (leggibile) viene trasformato in **Testo cifrato** tramite un **Algoritmo di cifratura** e una **Chiave** (una stringa di bit).
|
||||||
|
|
||||||
> **Principio di Kerckhoffs:** La sicurezza di un sistema crittografico non deve dipendere dalla segretezza dell'algoritmo (che deve poter essere pubblico), ma esclusivamente dalla segretezza della chiave.
|
> **Principio di Kerckhoffs:** La sicurezza di un sistema crittografico non deve dipendere dalla segretezza dell'algoritmo (che deve poter essere pubblico), ma esclusivamente dalla segretezza della chiave.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Crittografia Simmetrica vs Asimmetrica
|
||||||
|
|
||||||
|
I sistemi crittografici si dividono principalmente in due grandi categorie:
|
||||||
|
|
||||||
|
### 1. Crittografia Simmetrica (a chiave privata)
|
||||||
|
Utilizza la **stessa identica chiave** sia per cifrare che per decifrare il messaggio. Un esempio moderno è l'AES.
|
||||||
|
|
||||||
|
* **Pro:** È estremamente veloce ed efficiente, ideale per cifrare grandi quantità di dati.
|
||||||
|
* **Contro:** Il problema dello scambio delle chiavi. Mittente e destinatario devono condividere la chiave in modo sicuro prima di comunicare; se un estraneo la intercetta, il sistema fallisce.
|
||||||
|
|
||||||
|
### 2. Crittografia Asimmetrica (a chiave pubblica)
|
||||||
|
Utilizza una **coppia di chiavi matematicamente collegate**: una *Chiave Pubblica* (che chiunque può conoscere e serve per cifrare) e una *Chiave Privata* (segreta, posseduta solo dal destinatario e serve per decifrare).
|
||||||
|
|
||||||
|
* **Pro:** Risolve il problema dello scambio delle chiavi. Non serve condividere segreti in anticipo: chiunque può usare la chiave pubblica per inviarti un messaggio che solo tu potrai aprire.
|
||||||
|
* **Contro:** È molto più lenta e complessa dal punto di vista matematico rispetto alla crittografia simmetrica. Per questo motivo viene spesso usata solo per scambiare in modo sicuro la chiave simmetrica all'inizio di una sessione.
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
# Standard di Riferimento per la Sicurezza Informatica
|
# Standard di Riferimento per la Sicurezza Informatica
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Introduzione
|
## Introduzione
|
||||||
|
|
||||||
Gli **standard di sicurezza informatica** sono insiemi di linee guida, best practice e requisiti tecnici definiti da organismi internazionali, nazionali o settoriali. Il loro scopo è fornire un **linguaggio comune** e un **framework condiviso** per progettare, implementare, gestire e migliorare la sicurezza delle informazioni e dei sistemi digitali.
|
Gli **standard di sicurezza informatica** sono insiemi di linee guida, best practice e requisiti tecnici definiti da organismi internazionali, nazionali o settoriali. Il loro scopo è fornire un **linguaggio comune** e un **framework condiviso** per progettare, implementare, gestire e migliorare la sicurezza delle informazioni e dei sistemi digitali.
|
||||||
|
|||||||
@@ -284,6 +284,15 @@ footer a {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* --- Sezione Divulgativa --- */
|
/* --- Sezione Divulgativa --- */
|
||||||
|
ul {
|
||||||
|
padding-left: 1.5em;
|
||||||
|
margin-top: 1.5em;
|
||||||
|
margin-bottom: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
padding-bottom: 1.5em;
|
||||||
|
}
|
||||||
.appunti-style {
|
.appunti-style {
|
||||||
background: rgba(255, 255, 255, 0.05); /* Un leggero sfondo chiaro per staccare */
|
background: rgba(255, 255, 255, 0.05); /* Un leggero sfondo chiaro per staccare */
|
||||||
padding: 30px;
|
padding: 30px;
|
||||||
|
|||||||
Reference in New Issue
Block a user