Compare commits
45 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2552d25980 | |||
| 6e4a4839d3 | |||
| 5171a1e925 | |||
| 40e18daf2b | |||
| 9506765838 | |||
| 3680f36105 | |||
| d101b22ac1 | |||
| fe6d5901a2 | |||
| 860e5e70e3 | |||
| 6779697607 | |||
| 6068319033 | |||
| 6477512940 | |||
| 8c23a08e2a | |||
| 5086cdf6b8 | |||
| d7cca0099b | |||
| 93ade8c460 | |||
| 532ecd47b6 | |||
| 080c067f27 | |||
| e242ea28b5 | |||
| 48f0c35039 | |||
| be33e66d5c | |||
| db001a6729 | |||
| de24786cea | |||
| 4685f6fb4d | |||
| b80a2094a9 | |||
| d63b91e975 | |||
| a1da3aa955 | |||
| 948480c8f2 | |||
| fc544c6cf0 | |||
| aaaef86e5d | |||
| 8a9dc99496 | |||
| d271d7939c | |||
| 6453c26d25 | |||
| 0e8218ade3 | |||
| 7cf660825e | |||
| 4bd4fd0070 | |||
| 59f4cd0777 | |||
| 3e5d359282 | |||
| cc326efd03 | |||
| d9220c011c | |||
| 9ee4b94040 | |||
| 3627db7318 | |||
| 46de742130 | |||
| b8f0ba86e1 | |||
| d371b504f5 |
@@ -1,18 +1,42 @@
|
||||
package com.crypto;
|
||||
import java.util.Scanner;
|
||||
public class Caesar {
|
||||
|
||||
public static void encode(Scanner sc){
|
||||
public static String encode(String plaintext, int key){
|
||||
String alphabet = "abcdefghijklmnopqrstuvwxyz";
|
||||
System.out.println("Digita il testo in chiaro da cifrare:");
|
||||
String base = sc.nextLine();
|
||||
System.out.println("Digita il valore della chiave:");
|
||||
int key = sc.nextInt();
|
||||
char encoded[] = base.toCharArray();
|
||||
char encoded[] = plaintext.toCharArray();
|
||||
|
||||
for(int i = 0; i < base.length(); i++){
|
||||
encoded[i] = alphabet.charAt(alphabet.indexOf(encoded[i]) + key % 26);
|
||||
for(int i = 0; i < plaintext.length(); i++){
|
||||
if (alphabet.indexOf(encoded[i]) == -1) continue;
|
||||
encoded[i] = alphabet.charAt((alphabet.indexOf(encoded[i]) + key) % 26);
|
||||
}
|
||||
System.out.println(encoded);
|
||||
return String.valueOf(encoded);
|
||||
}
|
||||
|
||||
public static String[] decode(String ciphertext){
|
||||
String alphabet = "abcdefghijklmnopqrstuvwxyz";
|
||||
char encoded[] = ciphertext.strip().toCharArray();
|
||||
|
||||
char decoded[] = new char[ciphertext.length()];
|
||||
String bruteforce[] = new String[26];
|
||||
|
||||
for(int key = 0; key < alphabet.length(); key++){
|
||||
|
||||
for(int i = 0; i < ciphertext.length(); i++){
|
||||
if (alphabet.indexOf(encoded[i]) == -1) {
|
||||
decoded[i] = encoded[i];
|
||||
continue;
|
||||
}
|
||||
char current = encoded[i];
|
||||
int pos = alphabet.indexOf(current);
|
||||
if(pos != -1) {
|
||||
int newpos = (pos + key) % 26;
|
||||
decoded[i] = alphabet.charAt(newpos);
|
||||
} else
|
||||
decoded[i] = current;
|
||||
}
|
||||
bruteforce[key] = String.valueOf(decoded);
|
||||
}
|
||||
return bruteforce;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,140 +0,0 @@
|
||||
package com.crypto;
|
||||
import java.math.BigInteger;
|
||||
import java.util.Scanner;
|
||||
|
||||
public class Main {
|
||||
|
||||
// ─────────────────────────────────────────────
|
||||
// Menu
|
||||
// ─────────────────────────────────────────────
|
||||
private static int scegliDimensioneChiave(Scanner scanner) {
|
||||
int bits = 0;
|
||||
|
||||
while (bits == 0) {
|
||||
System.out.println("\nSeleziona la dimensione della chiave:");
|
||||
System.out.println(" [1] 512 bit (Solo uso didattico)");
|
||||
System.out.println(" [2] 1024 bit (Deprecata, solo test)");
|
||||
System.out.println(" [3] 2048 bit (Standard attuale)");
|
||||
System.out.println(" [4] 3072 bit (Ottimo compromesso)");
|
||||
System.out.println(" [5] 4096 bit (Alta sicurezza)");
|
||||
System.out.print("Scelta (1-5): ");
|
||||
|
||||
try {
|
||||
int scelta = Integer.parseInt(scanner.nextLine().trim());
|
||||
|
||||
// Assegniamo i bit in base alla scelta
|
||||
switch (scelta) {
|
||||
case 1 -> bits = 512;
|
||||
case 2 -> bits = 1024;
|
||||
case 3 -> bits = 2048;
|
||||
case 4 -> bits = 3072;
|
||||
case 5 -> bits = 4096;
|
||||
default -> System.out.println("❌ Scelta non valida. Inserisci un numero da 1 a 5.");
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
System.out.println("❌ Errore: Inserisci un numero valido.");
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("Selezionata chiave da " + bits + " bit.");
|
||||
return bits;
|
||||
}
|
||||
|
||||
// Main
|
||||
public static void main(String[] args) {
|
||||
Scanner scanner = new Scanner(System.in);
|
||||
|
||||
System.out.println("==========================================");
|
||||
System.out.println(" RSA CRYPTO ENGINE ");
|
||||
System.out.println("==========================================");
|
||||
|
||||
// --- 1. SETUP DELLE CHIAVI ---
|
||||
int dimChiave = scegliDimensioneChiave(scanner);
|
||||
|
||||
System.out.println("\n⏳ Generazione delle chiavi in corso...");
|
||||
// Passiamo dimChiave / 2 come facevi prima per p e q
|
||||
RSA.RSAkeys chiavi = RSA.defkeys(dimChiave / 2);
|
||||
System.out.println("> Chiavi generate con successo!");
|
||||
|
||||
boolean continua = true;
|
||||
|
||||
// --- CICLO PRINCIPALE ---
|
||||
while (continua) {
|
||||
|
||||
System.out.println("\n------------------------------------------");
|
||||
System.out.println("Cosa vuoi fare?");
|
||||
System.out.println(" [1] Cifra un numero");
|
||||
System.out.println(" [2] Cifra una stringa");
|
||||
System.out.println(" [3] Rigenera le chiavi");
|
||||
System.out.println(" [0] Esci");
|
||||
System.out.println("------------------------------------------");
|
||||
System.out.print("Scelta: ");
|
||||
|
||||
int scelta = -1;
|
||||
try {
|
||||
scelta = Integer.parseInt(scanner.nextLine().trim());
|
||||
} catch (NumberFormatException ignored) {
|
||||
}
|
||||
|
||||
System.out.println();
|
||||
|
||||
switch (scelta) {
|
||||
|
||||
case 1 -> {
|
||||
// MODALITÀ NUMERO
|
||||
System.out.print("Inserisci il numero da cifrare: ");
|
||||
try {
|
||||
BigInteger m = new BigInteger(scanner.nextLine().trim());
|
||||
|
||||
System.out.println("> Cifratura in corso...");
|
||||
BigInteger c = RSA.encrypt(m, chiavi.e(), chiavi.n());
|
||||
System.out.println("Cifrato:\n" + c);
|
||||
|
||||
System.out.println("\n> Decifratura in corso...");
|
||||
BigInteger dec = RSA.decrypt(c, chiavi.d(), chiavi.n());
|
||||
System.out.println("Decifrato:\n" + dec);
|
||||
|
||||
} catch (IllegalArgumentException ex) {
|
||||
System.out.println("> Errore: Assicurati di inserire un numero valido.");
|
||||
}
|
||||
}
|
||||
|
||||
case 2 -> {
|
||||
// MODALITÀ STRINGA
|
||||
System.out.print("Inserisci il testo da cifrare: ");
|
||||
String input = scanner.nextLine();
|
||||
|
||||
System.out.println("> Cifratura in corso...");
|
||||
String cifrato = RSA.encrypt(input, chiavi.e(), chiavi.n());
|
||||
if (cifrato != null && !cifrato.isEmpty()) {
|
||||
// 2. SOLO PER LA STAMPA: nascondiamo il binario convertendolo in Base64
|
||||
String base64 = java.util.Base64.getEncoder().encodeToString(cifrato.getBytes());
|
||||
System.out.println("Cifrato (Base64):\n" + base64);
|
||||
}
|
||||
|
||||
System.out.println("\n> Decifratura in corso...");
|
||||
String dec = RSA.decrypt(cifrato, chiavi.d(), chiavi.n());
|
||||
System.out.println("Decifrato:\n" + dec);
|
||||
}
|
||||
|
||||
case 3 -> {
|
||||
// RIGENERA CHIAVI
|
||||
dimChiave = scegliDimensioneChiave(scanner);
|
||||
System.out.println("\n> Generazione delle chiavi in corso...");
|
||||
chiavi = RSA.defkeys(dimChiave / 2);
|
||||
System.out.println("> Chiavi rigenerate con successo!");
|
||||
}
|
||||
|
||||
case 0 -> {
|
||||
continua = false;
|
||||
System.out.println("Chiusura del motore RSA. Alla prossima!");
|
||||
}
|
||||
|
||||
default -> System.out.println("> Scelta non valida, riprova.");
|
||||
}
|
||||
}
|
||||
|
||||
scanner.close();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
package com.crypto;
|
||||
import java.math.BigInteger;
|
||||
|
||||
import io.javalin.Javalin;
|
||||
|
||||
public class Seal {
|
||||
|
||||
// Il mazzo di chiavi !!
|
||||
public static RSA.RSAkeys keys;
|
||||
public static void main(String[] args) {
|
||||
|
||||
// Avvio del server web
|
||||
@@ -15,48 +14,70 @@ public class Seal {
|
||||
|
||||
System.out.println("Generazione chiavi RSA per il server web in corso...");
|
||||
|
||||
// Cifratura con Cifrario di Cesare
|
||||
app.post("/seal/caesar/encrypt", ctx -> {
|
||||
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
// Decifratura con Cifrario di Vigenere
|
||||
// Cifratura con Cifrario di Vigenere (TODO)
|
||||
app.post("/seal/vigenere/encrypt", ctx -> {
|
||||
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
// Cifratura con Cifrario di Cesare
|
||||
app.post("/seal/caesar/encrypt", ctx -> {
|
||||
RichiestaCesare req = ctx.bodyAsClass(RichiestaCesare.class);
|
||||
String ciphertext = Caesar.encode(req.plaintext,req.key);
|
||||
ctx.result(ciphertext);
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
// Decifratura con Cifrario di Cesare (Attacco Bruteforce !!)
|
||||
app.post("/seal/caesar/decrypt", ctx -> {
|
||||
RichiestaCesare req = ctx.bodyAsClass(RichiestaCesare.class);
|
||||
String[] ciphertext = Caesar.decode(req.ciphertext);
|
||||
ctx.json(ciphertext);
|
||||
}
|
||||
);
|
||||
|
||||
// Cifratura con RSA
|
||||
app.post("/seal/rsa/encrypt", ctx -> {
|
||||
// Legge i dati nel body dalla richiesta
|
||||
Richiesta req = ctx.bodyAsClass(Richiesta.class);
|
||||
keys = RSA.defkeys(req.keysize / 2);
|
||||
RichiestaRSA req = ctx.bodyAsClass(RichiestaRSA.class);
|
||||
RSA.RSAkeys keys = RSA.defkeys(req.keysize / 2);
|
||||
String ciphertext = RSA.encrypt(req.text,keys.e(), keys.n());
|
||||
ctx.result(ciphertext);
|
||||
ctx.result("{\"ciphertext\":\""+ciphertext+"\",\"keys\":{\"d\":\"" + keys.d().toString() + "\",\"n\":\"" + keys.n().toString() + "\"}}");
|
||||
});
|
||||
|
||||
// Decifratura con RSA
|
||||
app.post("/seal/rsa/decrypt", ctx -> {
|
||||
// Legge i dati nel body dalla richiesta
|
||||
Richiesta req = ctx.bodyAsClass(Richiesta.class);
|
||||
|
||||
RichiestaRSA req = ctx.bodyAsClass(RichiestaRSA.class);
|
||||
|
||||
BigInteger d = new BigInteger(req.d);
|
||||
BigInteger n = new BigInteger(req.n);
|
||||
|
||||
// Usa il metodo RSA per cifrare
|
||||
String plaintext = RSA.decrypt(req.text, keys.d(), keys.n());
|
||||
String plaintext = RSA.decrypt(req.text, d, n);
|
||||
|
||||
// Restituisce il risultato della cifratura
|
||||
ctx.result(plaintext.replaceAll("\\\\u0000", ""));
|
||||
ctx.result(plaintext.replace("\u0000", "").trim());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Classe utilizzata per tradurre il JSON - Rappresenta l'oggetto richiesta
|
||||
class Richiesta {
|
||||
// Classi utilizzate per tradurre il JSON - Rappresenta l'oggetto richiesta
|
||||
class RichiestaCesare {
|
||||
public int key;
|
||||
public String plaintext;
|
||||
public String ciphertext;
|
||||
public RichiestaCesare() {}
|
||||
}
|
||||
|
||||
class RichiestaRSA {
|
||||
public int keysize;
|
||||
public String text;
|
||||
public String d;
|
||||
public String n;
|
||||
|
||||
// Costruttore della richiesta
|
||||
public Richiesta() {}
|
||||
public RichiestaRSA() {}
|
||||
}
|
||||
@@ -1,77 +1,60 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="it">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>CryptoSeals - Cesare</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<script src="cesare.js" defer></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<body>
|
||||
<nav class="navbar">
|
||||
<a href="index.html" class="nav-brand">
|
||||
<img src="logo.png" alt="🦭" onerror="this.style.display='none'; this.nextElementSibling.style.display='inline';">
|
||||
<span style="display:none;">🦭</span> CryptoSeals
|
||||
<img src="seal1.png" height="80" alt="🦭">
|
||||
CryptoSeals
|
||||
</a>
|
||||
<ul class="nav-links">
|
||||
<li><a href="rsa.html">Algoritmo RSA</a></li>
|
||||
<li><a href="cesare.html" style="color: #3498db;">Cesare</a></li> <li><a href="vigenere.html">Vigenère</a></li>
|
||||
<li><a href="storia.html">La Storia</a></li>
|
||||
<li><a href="team.html">Il Team</a></li>
|
||||
<div class="menu-toggle" onclick="toggleMenu()">
|
||||
<i class="fa-solid fa-bars"></i>
|
||||
</div>
|
||||
<ul class="nav-links" id="nav-links">
|
||||
<li><a href="rsa.html"><i class="fa-solid fa-key"></i>RSA</a></li>
|
||||
<li><a href="cesare.html"><i class="fa-solid fa-arrow-right-arrow-left"></i> Cesare</a></li>
|
||||
<li><a href="materiale.html"><i class="fa-regular fa-clipboard"></i></i>Materiale</a></li>
|
||||
<li><a href="team.html"><i class="fa-solid fa-users"></i> Il Team</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<div class="container">
|
||||
<h1>Cifrario di Cesare</h1>
|
||||
<p class="descrizione">Sposta le lettere dell'alfabeto di un numero fisso di posizioni. Semplice, storico, ma efficace per messaggi veloci.</p>
|
||||
|
||||
<p class="descrizione">Sposta le lettere dell'alfabeto di un numero fisso di posizioni. Semplice, storico, ma
|
||||
efficace per messaggi veloci.</p>
|
||||
|
||||
<div class="crypto-box">
|
||||
|
||||
<label>Chiave (Numero di spostamento):</label>
|
||||
<input type="number" id="chiaveCesare" value="3" placeholder="Es. 3" style="width: 100%; padding: 12px; margin-top: 5px; margin-bottom: 15px; border-radius: 5px; border: 1px solid #ccc;">
|
||||
<input type="number" id="key" value="3" placeholder="Es. 3"
|
||||
style="width: 100%; padding: 12px; margin-top: 5px; margin-bottom: 15px; border-radius: 5px; border: 1px solid #ccc;">
|
||||
|
||||
<label>Testo in chiaro:</label>
|
||||
<textarea id="testoInput" placeholder="Scrivi qui il messaggio da cifrare..."></textarea>
|
||||
<button onclick="cifraCesare()">🔒 Cifra con Cesare</button>
|
||||
|
||||
<textarea id="plaintext" placeholder="Scrivi qui il messaggio da cifrare..."></textarea>
|
||||
<button onclick="encrypt()">🔒 Cifra con Cesare</button>
|
||||
|
||||
<label style="display:block; margin-top: 25px;">Testo Cifrato:</label>
|
||||
<textarea id="testoOutput" placeholder="Il risultato cifrato apparirà qui..."></textarea>
|
||||
<button class="btn-green" onclick="decifraCesare()">🔓 Decifra in chiaro</button>
|
||||
|
||||
<label style="display:block; margin-top: 25px;">Risultato decifrato:</label>
|
||||
<textarea id="testoDecifrato" readonly placeholder="Il messaggio originale tornerà qui..."></textarea>
|
||||
<textarea id="ciphertext" placeholder="Il risultato cifrato apparirà qui..."></textarea>
|
||||
<button class="btn-green" onclick="decrypt()">🔓 Attacca</button>
|
||||
|
||||
<label style="display:block; margin-top: 25px;">Simulazione attacco Bruteforce:</label>
|
||||
<textarea id="decodedtext" readonly placeholder="Qui compariranno tutte le combinazioni possibili, riconoscerai subito quella corretta !!"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
async function cifraCesare() {
|
||||
const input = document.getElementById("testoInput").value;
|
||||
const chiave = document.getElementById("chiaveCesare").value;
|
||||
|
||||
if(!input) return alert("Inserisci del testo!");
|
||||
|
||||
try {
|
||||
const risposta = await fetch("/seal/cesare/encrypt", {
|
||||
method: "POST", headers: { "Content-Type": "application/json" },
|
||||
// Invia il testo e la CHIAVE (convertita in numero) al server
|
||||
body: JSON.stringify({ testo: input, chiave: parseInt(chiave) })
|
||||
});
|
||||
document.getElementById("testoOutput").value = await risposta.text();
|
||||
} catch (e) { alert("Errore di connessione con le API di Cesare!"); }
|
||||
}
|
||||
|
||||
async function decifraCesare() {
|
||||
const inputCifrato = document.getElementById("testoOutput").value;
|
||||
const chiave = document.getElementById("chiaveCesare").value;
|
||||
|
||||
if(!inputCifrato) return alert("Nessun testo da decifrare!");
|
||||
try {
|
||||
const risposta = await fetch("/seal/cesare/decrypt", {
|
||||
method: "POST", headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ testo: inputCifrato, chiave: parseInt(chiave) })
|
||||
});
|
||||
document.getElementById("testoDecifrato").value = await risposta.text();
|
||||
} catch (e) { alert("Errore di connessione!"); }
|
||||
}
|
||||
</script>
|
||||
<footer>
|
||||
<div class="copyright">
|
||||
<a href="/privacy-policy/">Privacy Policy</a> |
|
||||
<a href="https://git.vps.francescomancuso.it/elisabetta/cryptoseals"><i class="fa-solid fa-mug-saucer"></i> Gitea</a> <br><br>
|
||||
© <span id="year"></span> CryptoSeals Team
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
35
backend/src/main/resources/get/cesare.js
Normal file
35
backend/src/main/resources/get/cesare.js
Normal file
@@ -0,0 +1,35 @@
|
||||
async function encrypt() {
|
||||
const plaintext = document.getElementById("plaintext").value;
|
||||
const key = document.getElementById("key").value;
|
||||
|
||||
if (!plaintext) return alert("Inserisci del testo!");
|
||||
|
||||
try {
|
||||
const risposta = await fetch("/seal/caesar/encrypt", {
|
||||
method: "POST", headers: { "Content-Type": "application/json" },
|
||||
// Invia il testo e la chiave (convertita in numero) al server
|
||||
body: JSON.stringify({ plaintext: plaintext, key: parseInt(key) })
|
||||
});
|
||||
document.getElementById("ciphertext").value = await risposta.text();
|
||||
} catch (e) { alert("Errore di connessione con le API di caesar!"); }
|
||||
}
|
||||
|
||||
async function decrypt() {
|
||||
const c = document.getElementById("ciphertext").value;
|
||||
if (!c) return alert("Nessun testo da decifrare!");
|
||||
try {
|
||||
const res = await fetch("/seal/caesar/decrypt", {
|
||||
method: "POST", headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ ciphertext: c })
|
||||
});
|
||||
const data = await res.json();
|
||||
document.getElementById("decodedtext").value = JSON.stringify(data, null, 2);
|
||||
} catch (e) { alert("Errore di connessione!"); }
|
||||
}
|
||||
|
||||
// Gestione Menu Mobile
|
||||
function toggleMenu() {
|
||||
document.getElementById("nav-links").classList.toggle("active");
|
||||
}
|
||||
// Anno dinamico Footer
|
||||
document.getElementById("year").innerText = new Date().getFullYear();
|
||||
@@ -0,0 +1,13 @@
|
||||
|
||||
## 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.
|
||||
216
backend/src/main/resources/get/documentazione/attacchi.md
Normal file
216
backend/src/main/resources/get/documentazione/attacchi.md
Normal file
@@ -0,0 +1,216 @@
|
||||
# Gli Attacchi Informatici
|
||||
|
||||
Gli **attacchi informatici**, nell’ultimo decennio, hanno registrato, a livello globale, un incremento significativo, sia sotto il profilo della frequenza che dell’impatto e delle dimensioni. Al punto che risulta **estremamente complesso** riuscire a identificare chi c’è dietro tali azioni e distinguere immediatamente le sorgenti di un attacco informatico.
|
||||
|
||||
L’attacco informatico viene definito dal **National Initiative For Cybersecurity Careers And Studies (NICCS)** come “il tentativo di ottenere un accesso non autorizzato a servizi, risorse o informazioni di sistema e/o di comprometterne l’integrità e, in generale, consiste nell’atto intenzionale di tentare di eludere uno o più servizi di sicurezza o i controlli di un sistema informativo digitale per alterare la riservatezza, l’integrità e la disponibilità dei dati”.
|
||||
|
||||
## Le Figure Nascoste dietro agli attacchi: gli Hackers
|
||||
|
||||
Questi attacchi vengono condotti da figure dette hackers che sfruttano le loro conoscenze per divincolarsi nei sistemi informatici.
|
||||
Vengono classificati in base alle loro intenzioni in
|
||||
* **White Hat Hackers** : Sono hacker "etici" che mettono le loro competenze al servizio del miglioramento della sicurezza, il loro scopo è quindi scovare le vulnerabilità nei sistemi in modo da estirparle
|
||||
* **Grey Hat Hackers**: Sono figure ambigue che oscillano tra legalità e illegalità
|
||||
* **Black Hat Hackers**: sono figure che sfruttano le loro competenze informatiche per compiere azioni illecite e trarne un vantaggio personale
|
||||
|
||||
Caso a parte sono poi gli **Hacktivists** che promuovono cause sociali e politiche attraverso attacchi informatici e gli **Hacker sponsorizzati** che agiscono per via di supporto di organizzazioni o del governo.
|
||||
|
||||
La classificazione degli attacchi informatici dipende da quelle che sono le motivazioni che vi sono alla base. Motivazioni che, a loro volta, determinano le modalità stesse dell’azione malevola e le sue caratteristiche.
|
||||
|
||||
## Classificazione degli Attacchi Informatici
|
||||
|
||||
Come già specificato prima gli attacchi informatici sfruttano delle minacce tramite exploits per causare un impatto su un sistema.
|
||||
Distinguiamo tre macro-tipologie di attacchi, derivanti da specifiche minacce:
|
||||
|
||||
* **Malware**
|
||||
* **Keylogger**
|
||||
* **TCP/IP**
|
||||
* **Errori Umani**
|
||||
|
||||
Entriamo ora nello specifico di ognuno di questi
|
||||
## I Malware
|
||||
|
||||
Il termine deriva da *malicious software*. È un codice malevolo progettato per penetrare illecitamente in un sistema per rubare, alterare dati, spiare o assumere il controllo del dispositivo. Spesso l'infezione richiede l'inconsapevole complicità dell'utente (social engineering).
|
||||
|
||||
**Struttura di un malware:**
|
||||
In generale, un malware è composto da due parti funzionali (assimilabili a un missile):
|
||||
1. **Vettore (Carrier):** Il mezzo attraverso cui il malware si diffonde (un file allegato, un link, una chiavetta USB) e che serve a superare le difese del sistema sfruttando una vulnerabilità.
|
||||
2. **Carico utile (Payload):** Le istruzioni specifiche (la "testata esplosiva") che il malware esegue una volta dentro il sistema bersaglio (es. cifrare i file, rubare password, attivare la fotocamera).
|
||||
|
||||
### Tipologie principali
|
||||
|
||||
| Tipo | Descrizione | Esempio |
|
||||
|---|---|---|
|
||||
| **Virus** | Frammento di codice che si inserisce in altri programmi (host). Ha bisogno dell'intervento umano (es. apertura di un file) per attivarsi e diffondersi | ILOVEYOU |
|
||||
| **Worm** | Programma autonomo in grado di autoreplicarsi e diffondersi rapidamente sfruttando le reti e le vulnerabilità dei sistemi, senza bisogno dell'azione umana | WannaCry |
|
||||
| **Trojan** | oftware apparentemente utile e innocuo che nasconde al suo interno funzionalità malevole. Spesso installa backdoor | RAT (Remote Access Trojan) |
|
||||
| **Ransomware** | Malware che cifra i dati della vittima, rendendoli inaccessibili, per poi richiedere il pagamento di un riscatto (ransom) per fornire la chiave di decifratura | Ryuk, LockBit |
|
||||
| **Spyware** | Software progettato per spiare le attività dell'utente e raccogliere informazioni (password, dati bancari, abitudini) senza il suo consenso | FinFisher |
|
||||
| **Adware** | Programma che mostra pubblicità indesiderata o pop-up in modo invasivo. | Fireball |
|
||||
| **Rootkit** | Insieme di software che permette di ottenere privilegi di amministratore (root) su un sistema, nascondendo la propria presenza e quella di altri malware | Necurs |
|
||||
| **Backdoor** | Metodo che consente di scavalcare le procedure di sicurezza standard per accedere illecitamente a un sistema | Mirai |
|
||||
| **Botnet** | Rete di dispositivi infetti controllati da remoto | Mirai |
|
||||
|
||||
### Vettori di infezione comuni
|
||||
- Allegati email malevoli (phishing)
|
||||
- Download da siti non affidabili
|
||||
- Dispositivi USB infetti
|
||||
- Vulnerabilità software non patchate
|
||||
|
||||
---
|
||||
## I Keylogger
|
||||
|
||||
Un **keylogger** è uno strumento — hardware o software — che **registra ogni tasto premuto** dall'utente a sua insaputa, con l'obiettivo di sottrarre credenziali, dati sensibili e informazioni riservate.
|
||||
|
||||
### Tipologie di keyloggers
|
||||
|
||||
I keylogger possono fare parte di due categorie:
|
||||
|
||||
**Software**
|
||||
- Si installa come processo di sistema nascosto
|
||||
- Può catturare screenshot, appunti, form web
|
||||
- Spesso distribuito come componente di trojan o spyware
|
||||
|
||||
**Hardware**
|
||||
- Dispositivo fisico inserito tra tastiera e PC (USB/PS2)
|
||||
- Invisibile a qualsiasi antivirus
|
||||
- Richiede accesso fisico alla macchina
|
||||
|
||||
Le info più comuni che un keylogger cerca di estrapolare sono:
|
||||
- Username e password
|
||||
- Numeri di carte di credito
|
||||
- Conversazioni private e messaggi
|
||||
- Ricerche e URL visitati
|
||||
- Codici OTP (se inseriti manualmente)
|
||||
|
||||
### Contromisure
|
||||
- Autenticazione a due fattori (2FA)
|
||||
- Tastiere virtuali per dati sensibili
|
||||
- Antimalware aggiornati con moduli anti-keylogger
|
||||
- Controllo periodico delle porte USB sui dispositivi aziendali
|
||||
## Minacce TCP/IP
|
||||
|
||||
Il protocollo **TCP/IP** è la base della comunicazione su Internet. Proprio per la sua natura aperta e universale, è soggetto a numerosi attacchi che sfruttano debolezze nel design dei protocolli di rete.
|
||||
|
||||
### Principali attacchi sul protocollo TCP/IP
|
||||
|
||||
#### IP Spoofing
|
||||
L'attaccante **falsifica l'indirizzo IP sorgente** dei pacchetti per impersonare un host fidato o nascondere la propria identità.
|
||||
|
||||
#### SYN Flood (DoS/DDoS)
|
||||
Sfrutta il meccanismo di **handshake a tre vie** di TCP:
|
||||
1. Il client invia SYN
|
||||
2. Il server risponde con SYN-ACK e alloca risorse
|
||||
3. L'attaccante **non risponde mai** con l'ACK finale
|
||||
|
||||
Il server accumula connessioni "semiaperte" fino all'esaurimento delle risorse.
|
||||
|
||||
#### Man-in-the-Middle (MitM)
|
||||
L'attaccante si **interpone nella comunicazione** tra due host, potendo intercettare, modificare o iniettare pacchetti in tempo reale.
|
||||
|
||||
#### Teardrop
|
||||
Invio di frammenti di pacchetti IP **corrotti** che il sistema non riesce a riassemblare, mandandolo in tilt.
|
||||
|
||||
#### Botnet e DDoS
|
||||
Una rete di **dispositivi infetti** (botnet) controllati all'insaputa dei proprietari, usati per lanciare attacchi **DDoS (Distributed Denial of Service)**, mirati a disattivare un servizio sovraccaricandolo di richieste.
|
||||
|
||||
#### Session Hijacking
|
||||
Furto del **token di sessione TCP** per impersonare un utente autenticato senza conoscerne le credenziali.
|
||||
|
||||
#### DNS Poisoning / Spoofing
|
||||
Corruzione della cache DNS per **reindirizzare l'utente** verso siti malevoli pur digitando un indirizzo legittimo.
|
||||
|
||||
#### Packet Sniffing
|
||||
Intercettazione passiva del traffico di rete. Particolarmente pericolosa su reti non cifrate (HTTP, FTP, Telnet).
|
||||
|
||||
### Contromisure
|
||||
- Utilizzo di **TLS/SSL** per cifrare le comunicazioni
|
||||
- **Firewall** e sistemi IDS/IPS
|
||||
- **IPSec** per autenticazione e cifratura a livello di rete
|
||||
- **DNSSEC** per l'integrità delle risposte DNS
|
||||
|
||||
---
|
||||
## Errori Umani
|
||||
|
||||
Gli errori umani rappresentano storicamente la **causa principale** delle violazioni di sicurezza. Non si tratta di attacchi tecnici, ma di comportamenti che aprono vulnerabilità sfruttabili da attori malevoli — o che causano danni diretti senza alcun intervento esterno ai quali purtroppo non c'è una soluzione immediata.
|
||||
|
||||
### Categorie di errori umani
|
||||
|
||||
#### 🎣 Vittime di Phishing e Social Engineering
|
||||
L'utente viene **manipolato psicologicamente** per rivelare credenziali, cliccare su link malevoli o eseguire azioni dannose. Include:
|
||||
- Phishing via email
|
||||
- Vishing (voice phishing)
|
||||
- Smishing (SMS phishing)
|
||||
- Pretexting e impersonificazione
|
||||
|
||||
#### 🔑 Gestione inadeguata delle credenziali
|
||||
- Password deboli o riutilizzate su più servizi
|
||||
- Condivisione di credenziali tra colleghi
|
||||
- Mancato aggiornamento delle password dopo una violazione
|
||||
- Post-it con password attaccati al monitor
|
||||
|
||||
#### ⚙️ Configurazioni errate (Misconfiguration)
|
||||
- Permessi troppo permissivi su file, cartelle o database
|
||||
- Servizi esposti su internet senza necessità
|
||||
- Bucket cloud (S3, Azure Blob) lasciati pubblici per errore
|
||||
- Default credentials non modificate
|
||||
|
||||
#### 📦 Installazione di software non autorizzato
|
||||
- Download di applicazioni da fonti non ufficiali
|
||||
- Uso di software craccato contenente malware
|
||||
- Estensioni browser malevole installate inconsapevolmente
|
||||
|
||||
#### 🗑️ Smaltimento non sicuro dei dati
|
||||
- Hard disk eliminati senza formattazione sicura
|
||||
- Documenti sensibili cestinati senza distruzione
|
||||
- Dispositivi aziendali venduti o donati senza sanificazione
|
||||
|
||||
#### 🏠 Shadow IT
|
||||
Utilizzo di strumenti, app o servizi cloud **non approvati dall'IT aziendale**, che sfuggono a qualsiasi controllo di sicurezza.
|
||||
|
||||
### Contromisure
|
||||
|
||||
| Errore | Contromisura |
|
||||
|---|---|
|
||||
| Phishing | Formazione continua, simulazioni di phishing |
|
||||
| Password deboli | Password manager, policy aziendali, MFA |
|
||||
| Misconfiguration | Audit periodici, principio del minimo privilegio |
|
||||
| Software non autorizzato | Whitelist applicazioni, MDM |
|
||||
| Smaltimento dati | Policy di data disposal, distruzione fisica |
|
||||
| Shadow IT | Inventario asset, sensibilizzazione, alternative approvate |
|
||||
|
||||
> 💡 **Il fattore umano** non si elimina con la tecnologia, ma con **formazione continua, cultura della sicurezza e processi chiari**. Il 95% delle violazioni di sicurezza ha una componente umana (fonte: IBM Cyber Security Intelligence Index).
|
||||
## Gli Attacchi APT (Advanced Persistent Threats)
|
||||
|
||||
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**.
|
||||
Prevedono 7 fasi precise:
|
||||
* 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).
|
||||
* Armamento
|
||||
L'attaccante pianifica l'attacco creando le cosiddette "armi" e identificando nello specifico i fronti di attacco
|
||||
* Distribuizione
|
||||
L'attaccante invia il malware al target tramite tecniche note di iniezione, quali sql injection, xss, allegati malevoli inviati via mail, phishing etc...
|
||||
* Sfruttamento
|
||||
Il payload dannoso apre un varco nel sistema sfruttando una specifica vulnerabilità
|
||||
* Installazione
|
||||
Vengono istanziate delle backdoor sulla macchina target infetta e ciò permette agli attaccanti di prendere le info sensibili necessarie al proseguimento dell'attacco quali credenziali, registri di sistema etc...
|
||||
* Comando e Controllo
|
||||
Tramite le credenziali rubate gli attaccanti accedono ai **dati riservati** del sistema e li esfiltrano, tutti i dati interessanti vengono inviati a server intermedi e crittografati prima di venire inviati al team esterno che usa questi dati per operazioni illecite
|
||||
* Azioni sull'obiettivo
|
||||
Tutti i precedenti processi vengono "occultati" ai membri del sistema perchè lo scopo è rimanere dentro il più possibile in modo da poter captare una grande mole di dati, **è l'esatto motivo per cui questi attacchi sono così complicati da gestire !!**
|
||||
|
||||
Questa catena viene anche detta **Cyber Kill Chain** e viene utilizzata per descrivere il ciclo di vita di un attacco informatico.
|
||||
|
||||
---
|
||||
|
||||
### Classificazione standard: CWE e CVE
|
||||
La MITRE Corporation gestisce database fondamentali per catalogare tutti questi problemi:
|
||||
* **CWE (Common Weakness Enumeration):** Un dizionario delle *debolezze* software/hardware (es. Buffer Overflow). Serve agli sviluppatori per non ripetere errori noti.
|
||||
* **CVE (Common Vulnerabilities and Exposures):** Un catalogo delle *vulnerabilità* specifiche già identificate, a cui viene assegnato un ID unico. Ad ogni CVE è associato un punteggio di gravità da 0 a 10 chiamato **CVSS (Common Vulnerability Scoring System)**.
|
||||
|
||||
|
||||
### Sicurezza Offensiva e Difensiva
|
||||
La sicurezza si avvale di team specializzati che simulano attacchi per migliorare le difese:
|
||||
* **Red Team:** Simula i criminali informatici effettuando attacchi mirati (Penetration Test) per scovare le vulnerabilità.
|
||||
* **Blue Team:** È il team di difesa interno. Monitora l'infrastruttura, rileva le intrusioni e risponde agli attacchi.
|
||||
* **Purple Team:** Coordina Red e Blue team per massimizzare l'apprendimento e migliorare l'efficacia complessiva della sicurezza.
|
||||
135
backend/src/main/resources/get/documentazione/ciclo_pdca.md
Normal file
135
backend/src/main/resources/get/documentazione/ciclo_pdca.md
Normal file
@@ -0,0 +1,135 @@
|
||||
# La Progettazione della Sicurezza e il ciclo PDCA
|
||||
|
||||
Per rendere sicuri i sistemi informatici c'è bisogno di un piano adeguato composto da politiche di sicurezza che coprano anche l'ambito organizzativo (includendo nel piano la formazione dei dipendenti dato che la maggior parte degli incidenti informatici parte da una falla umana e non tecnica) tramite modello PCDAA.
|
||||
|
||||
Il modello **PDCA** (noto anche come **Ciclo di Deming**) è un approccio iterativo alla gestione e al miglioramento continuo dei processi. Applicato alla sicurezza informatica e all'educazione alle TIC, consente di progettare interventi strutturati, misurabili e migliorabili nel tempo.
|
||||
|
||||
> 💡 Il ciclo PDCA non è lineare ma **circolare**: al termine di ogni ciclo, i risultati alimentano un nuovo ciclo di miglioramento.
|
||||
|
||||
---
|
||||
|
||||
## Il Ciclo PDCA applicato all'Educazione alla Sicurezza Informatica
|
||||
|
||||
## PLAN — Pianifica
|
||||
|
||||
La fase di **pianificazione** è il punto di partenza del ciclo. Si definiscono obiettivi, contesto, risorse e strategie prima di agire.
|
||||
|
||||
### Attività principali
|
||||
|
||||
- **Analisi del contesto**: identificare il target (studenti, dipendenti, cittadini), il livello di competenze digitali esistenti e i rischi specifici
|
||||
- **Definizione degli obiettivi**: stabilire cosa si vuole ottenere (es. ridurre gli incidenti di phishing, aumentare l'uso del 2FA, promuovere un uso consapevole dei social)
|
||||
- **Mappatura dei rischi**: individuare le minacce più rilevanti per il contesto (malware, errori umani, violazioni privacy)
|
||||
- **Progettazione del percorso formativo**: definire contenuti, metodologie didattiche, strumenti e tempistiche
|
||||
- **Allocazione delle risorse**: personale, budget, strumenti tecnologici, materiali didattici
|
||||
- **Definizione degli indicatori (KPI)**: stabilire metriche misurabili per valutare il successo
|
||||
|
||||
### Output della fase PLAN
|
||||
|
||||
| Output | Descrizione |
|
||||
|---|---|
|
||||
| Piano formativo | Struttura del percorso educativo |
|
||||
| Analisi dei rischi | Mappa delle minacce per il contesto |
|
||||
| KPI definiti | Indicatori misurabili di successo |
|
||||
| Calendario attività | Tempistica delle azioni previste |
|
||||
| Risorse assegnate | Budget, personale e strumenti |
|
||||
|
||||
---
|
||||
|
||||
## DO — Esegui
|
||||
|
||||
La fase **operativa**: si mettono in atto le azioni pianificate, si erogano i contenuti formativi e si implementano le misure di sicurezza.
|
||||
|
||||
### Attività principali
|
||||
|
||||
- **Erogazione della formazione**: lezioni frontali, e-learning, workshop, simulazioni (es. simulazioni di phishing)
|
||||
- **Implementazione delle misure tecniche**: installazione antivirus, configurazione firewall, attivazione 2FA
|
||||
- **Distribuzione di materiali**: guide, vademecum, infografiche, policy di sicurezza
|
||||
- **Sensibilizzazione continua**: campagne di awareness, newsletter, poster informativi
|
||||
- **Raccolta dati**: documentare le attività svolte per la fase di verifica
|
||||
|
||||
### Esempi di attività formative
|
||||
|
||||
| Tipologia | Esempio |
|
||||
|---|---|
|
||||
| **Simulazione** | Invio di email di phishing simulato per testare la reazione |
|
||||
| **Workshop pratico** | Configurazione sicura di account e dispositivi |
|
||||
| **Lezione teorica** | Normativa GDPR, reati informatici, triade CIA |
|
||||
| **Esercitazione** | Riconoscimento di fake news e contenuti manipolati |
|
||||
| **Role-playing** | Gestione di un incidente informatico simulato |
|
||||
|
||||
---
|
||||
|
||||
## CHECK — Verifica
|
||||
|
||||
La fase di **monitoraggio e valutazione**: si misurano i risultati ottenuti rispetto agli obiettivi pianificati, utilizzando i KPI definiti nella fase PLAN.
|
||||
|
||||
### Attività principali
|
||||
|
||||
- **Raccolta e analisi dei dati**: quanti utenti hanno completato la formazione? Quanti hanno superato i test?
|
||||
- **Valutazione dell'apprendimento**: test di verifica, quiz, prove pratiche
|
||||
- **Analisi degli incidenti**: si sono verificati incidenti di sicurezza durante il periodo? Di che tipo?
|
||||
- **Confronto con i KPI**: i risultati raggiunti sono in linea con gli obiettivi?
|
||||
- **Raccolta feedback**: questionari di gradimento, interviste, osservazioni
|
||||
|
||||
### Strumenti di verifica
|
||||
|
||||
| Strumento | Finalità |
|
||||
|---|---|
|
||||
| **Test e quiz** | Misurare l'apprendimento teorico |
|
||||
| **Simulazioni di attacco** | Valutare il comportamento pratico |
|
||||
| **Audit di sicurezza** | Verificare la corretta implementazione delle misure |
|
||||
| **Report sugli incidenti** | Monitorare l'andamento degli eventi critici |
|
||||
| **Questionari feedback** | Misurare efficacia percepita e soddisfazione |
|
||||
| **Analisi dei log** | Controllare comportamenti anomali sui sistemi |
|
||||
|
||||
### Domande chiave della fase CHECK
|
||||
|
||||
- Gli obiettivi sono stati raggiunti?
|
||||
- I KPI mostrano miglioramenti rispetto alla baseline?
|
||||
- Ci sono aree in cui i risultati sono sotto le aspettative?
|
||||
- Quali attività hanno funzionato meglio?
|
||||
- Cosa non ha funzionato e perché?
|
||||
|
||||
---
|
||||
|
||||
## ACT — Agisci (Migliora)
|
||||
|
||||
La fase di **miglioramento continuo**: sulla base dei risultati della verifica, si apportano correzioni, si standardizzano le pratiche efficaci e si pianifica il ciclo successivo.
|
||||
|
||||
### Attività principali
|
||||
|
||||
- **Standardizzazione delle best practice**: ciò che ha funzionato bene diventa procedura standard
|
||||
- **Correzione delle criticità**: modificare o eliminare le attività che non hanno prodotto i risultati attesi
|
||||
- **Aggiornamento del piano formativo**: integrare nuove minacce emergenti, nuove normative, nuovi strumenti
|
||||
- **Comunicazione dei risultati**: condividere i miglioramenti ottenuti con stakeholder e partecipanti
|
||||
- **Avvio del nuovo ciclo PDCA**: i risultati di ACT diventano l'input della nuova fase PLAN
|
||||
|
||||
### Tipi di azioni nella fase ACT
|
||||
|
||||
| Tipo | Descrizione |
|
||||
|---|---|
|
||||
| **Azione correttiva** | Risolve una non conformità già verificatasi |
|
||||
| **Azione preventiva** | Evita il ripetersi di problemi già identificati |
|
||||
| **Azione di miglioramento** | Ottimizza processi già funzionanti |
|
||||
| **Standardizzazione** | Formalizza le pratiche efficaci in procedure stabili |
|
||||
|
||||
---
|
||||
|
||||
## Il Piano Completo: Schema Integrato
|
||||
|
||||
| Fase | Domanda guida | Output |
|
||||
|---|---|---|
|
||||
| **PLAN** | Cosa vogliamo ottenere e come? | Piano formativo, KPI, analisi rischi |
|
||||
| **DO** | Come mettiamo in pratica il piano? | Formazione erogata, misure implementate |
|
||||
| **CHECK** | Abbiamo raggiunto gli obiettivi? | Report di valutazione, analisi scostamenti |
|
||||
| **ACT** | Come miglioriamo per il prossimo ciclo? | Azioni correttive, nuovo piano aggiornato |
|
||||
|
||||
---
|
||||
|
||||
## La Ciclicità del Modello
|
||||
|
||||
Il punto di forza del PDCA è la sua natura **iterativa e adattiva**:
|
||||
|
||||
> Ogni ciclo completato genera conoscenza, che alimenta il ciclo successivo rendendolo più efficace, più mirato e più rispondente ai cambiamenti del contesto digitale.
|
||||
|
||||
In un settore in continua evoluzione come la sicurezza informatica — dove nuove minacce emergono quotidianamente — il PDCA garantisce che il piano educativo non sia mai statico, ma sempre **aggiornato, verificato e migliorato**.
|
||||
@@ -0,0 +1,29 @@
|
||||
# La Crittografia Asimmetrica
|
||||
|
||||
La crittografia **asimmetrica** nasce con il problema dello scambio delle chiavi
|
||||
|
||||
* **Crittografia Asimmetrica (a chiave pubblica):** Ogni utente possiede una *coppia di chiavi*:
|
||||
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
|
||||
* **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.
|
||||
@@ -0,0 +1,21 @@
|
||||
# La Crittografia Simmetrica
|
||||
|
||||
La crittografia **simmetrica**, affonda le sue radici nell'antichità come prova che l'uomo ha sempre cercato
|
||||
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:
|
||||
|
||||
* 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.
|
||||
|
||||
31
backend/src/main/resources/get/documentazione/intro.md
Normal file
31
backend/src/main/resources/get/documentazione/intro.md
Normal file
@@ -0,0 +1,31 @@
|
||||
# Introduzione alla Cybersecurity
|
||||
|
||||
La **sicurezza informatica (cybersecurity)** è l'insieme di pratiche, tecnologie e processi utilizzati per proteggere reti, sistemi e programmi dagli attacchi digitali.
|
||||
Questa disciplina nasce dalla necessità di rendere **sicuro** il massiccio flusso di dati che trafficava sulla rete dopo un primo esperimento di virus informatico, il Creeper, nato nel 1971.
|
||||
|
||||
Nel modello **DIKW** (Data, Information, Knowledge, Wisdom), la sicurezza informatica si colloca al di sopra della semplice informatica (livello 3): non si limita a elaborare dati, ma utilizza la conoscenza per comprendere le informazioni, identificare i rischi, mitigare i danni e garantire la continuità operativa.
|
||||
|
||||
> **Nota sui personaggi convenzionali:** In crittografia e sicurezza si usano nomi standard per gli esempi: **Alice e Bob** (comunicanti legittimi), **Cindy/Trudy** (intrusi attivi che alterano i messaggi), ed **Eve** (eavesdropper, spia che si limita ad ascoltare).
|
||||
|
||||
---
|
||||
|
||||
### Il modello CIA - Il triangolo della Cybersecurity
|
||||
|
||||
La sicurezza delle informazioni si basa su tre obiettivi principali, noti come **Triangolo CIA (o RID in italiano)**, che ci permettono di focalizzare l'attenzione sugli aspetti da considerare per rendere una rete sicura.
|
||||
Essi sono:
|
||||
|
||||
* **C - Confidentiality (Riservatezza):** Garantisce che le informazioni non siano **accessibili** e manipolabili da persone **non autorizzate**. Viene realizzata tramite meccanismi come la cifratura dei dati, il controllo degli accessi (autenticazione e autorizzazione) e la gestione delle identità.
|
||||
|
||||
* **I - Integrity (Integrità):** Garantisce che le informazioni non vengano **alterate** durante il loro ciclo di vita (tramite crittografia, controlli, backup). Questo aspetto è strettamente legato anche al concetto di **Non Ripudio**, che invece garantisce che tutte le azioni in rete siano tracciate e che da esse si possa risalire al nodo che le ha effettuate. Strumenti tipici sono le funzioni di hash crittografico (es. SHA-256) e le firme digitali.
|
||||
|
||||
* **A - Availability (Disponibilità):** Garantisce che i dati e i servizi siano sempre disponibili quando richiesti dimostrando di essere resilienti ai guasti (es. tramite ridondanza, load balancing e piani di disaster recovery). Le minacce principali a questo pilastro sono gli attacchi **DoS/DDoS** (Denial of Service), che mirano a saturare le risorse di un sistema fino a renderlo irraggiungibile.
|
||||
|
||||
---
|
||||
|
||||
### Il principio del minimo privilegio e la difesa in profondità
|
||||
|
||||
Due principi cardine nella progettazione di sistemi sicuri sono:
|
||||
|
||||
* **Principio del minimo privilegio (Least Privilege):** ogni utente, processo o componente deve disporre **solo** dei permessi strettamente necessari per svolgere la propria funzione. Ridurre la superficie di attacco limita il danno potenziale in caso di compromissione.
|
||||
|
||||
* **Difesa in profondità (Defense in Depth):** la sicurezza non deve affidarsi a un unico meccanismo di protezione, ma a **più livelli sovrapposti** (firewall perimetrali, sistemi IDS/IPS, antivirus, segmentazione della rete, cifratura, monitoraggio SIEM). In questo modo, se un livello viene compromesso, gli altri continuano a proteggere il sistema.
|
||||
@@ -0,0 +1,9 @@
|
||||
# Introduzione alla Crittografia
|
||||
|
||||
La **crittologia** è la scienza che studia le scritture segrete e si divide in:
|
||||
1. **Crittografia:** Studio degli algoritmi per offuscare (cifrare) le informazioni.
|
||||
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).
|
||||
|
||||
> **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.
|
||||
@@ -0,0 +1,60 @@
|
||||
# La Sicurezza nelle Reti: Protocolli e Strumenti di Difesa
|
||||
|
||||
---
|
||||
|
||||
## Sicurezza dei Protocolli di Rete
|
||||
|
||||
Per garantire la sicurezza delle comunicazioni su Internet, sono stati sviluppati protocolli crittografici specifici per i diversi livelli della pila di rete (ISO/OSI o TCP/IP).
|
||||
|
||||
### Sicurezza a Livello di Rete: IPsec
|
||||
**IPsec (Internet Protocol Security)** è una suite di protocolli che protegge il traffico IP a livello di rete, garantendo autenticazione, integrità e riservatezza. È ampiamente utilizzato per creare connessioni VPN.
|
||||
* **Modalità operative:**
|
||||
* **Transport Mode (Modalità Trasporto):** Viene cifrato *solo* il carico utile (payload) del pacchetto IP. L'intestazione (header) originale rimane in chiaro. È usato per comunicazioni end-to-end (es. da un PC a un Server).
|
||||
* **Tunnel Mode (Modalità Tunnel):** Viene cifrato *l'intero* pacchetto IP originale (sia header che payload) e viene incapsulato in un nuovo pacchetto con un nuovo header esterno. È ideale per le VPN Site-to-Site (es. tra i router di due sedi aziendali).
|
||||
* **Protocolli principali:**
|
||||
* **AH (Authentication Header):** Garantisce l'integrità dei dati e l'autenticazione del mittente, ma *non* cifra il contenuto (nessuna riservatezza).
|
||||
* **ESP (Encapsulating Security Payload):** Offre cifratura (riservatezza), oltre all'integrità e all'autenticazione. È il protocollo più completo e utilizzato.
|
||||
|
||||
### Sicurezza a Livello di Trasporto: SSL/TLS
|
||||
**SSL (Secure Sockets Layer)** e il suo standard evolutivo **TLS (Transport Layer Security)** forniscono comunicazioni sicure posizionandosi tra il livello di trasporto (TCP) e quello applicativo.
|
||||
Il funzionamento si divide in due fasi:
|
||||
1. **Handshake Protocol:** Fase iniziale in cui client e server si autenticano (di solito il server tramite un Certificato Digitale), negoziano gli algoritmi crittografici supportati e generano le chiavi di sessione.
|
||||
2. **Record Protocol:** Fase in cui i dati dell'applicazione vengono frammentati, compressi, cifrati (con crittografia simmetrica, più veloce) e trasmessi in modo sicuro.
|
||||
|
||||
> **Nota:** L'applicazione più nota di TLS è l'**HTTPS**, che protegge la navigazione web cifrando il normale traffico HTTP.
|
||||
|
||||
---
|
||||
|
||||
## La Sicurezza delle Reti Wireless (WLAN)
|
||||
|
||||
Le reti Wi-Fi (standard IEEE 802.11) sono intrinsecamente più vulnerabili delle reti cablate poiché il mezzo trasmissivo (l'etere) è accessibile a chiunque si trovi nel raggio di copertura radio. L'uso di protocolli di cifratura è quindi obbligatorio.
|
||||
|
||||
### Evoluzione degli standard Wi-Fi:
|
||||
* **WEP (Wired Equivalent Privacy):** Il primo standard introdotto. Utilizza l'algoritmo di cifratura simmetrica RC4.
|
||||
* *Vulnerabilità:* Oggi è completamente obsoleto e insicuro. L'uso di una chiave statica (sempre uguale) e di un Vettore di Inizializzazione (IV) troppo breve permette a un attaccante di "craccare" la rete in pochi minuti analizzando il traffico.
|
||||
* **WPA (Wi-Fi Protected Access):** Creato come soluzione rapida per sostituire il WEP senza dover cambiare l'hardware dei router esistenti.
|
||||
* *Innovazione:* Introduce il protocollo **TKIP (Temporal Key Integrity Protocol)**, che cambia dinamicamente la chiave di cifratura per ogni pacchetto, risolvendo il problema principale del WEP.
|
||||
* **WPA2 (Standard 802.11i):** Lo standard globale per molti anni.
|
||||
* *Innovazione:* Abbandona RC4 e TKIP in favore del robusto algoritmo **AES** combinato con il protocollo **CCMP**. Risulta molto sicuro, sebbene rimanga vulnerabile ad attacchi di forza bruta offline (es. *dictionary attack*) se la password della rete è debole.
|
||||
* **WPA3:** L'ultimo e più moderno standard.
|
||||
* *Innovazioni:* Sostituisce la vecchia negoziazione delle chiavi con il protocollo **SAE (Simultaneous Authentication of Equals)**, rendendo l'handshake immune agli attacchi a dizionario offline. Introduce inoltre **OWE (Opportunistic Wireless Encryption)** per cifrare automaticamente il traffico anche sulle reti pubbliche aperte (quelle senza password di accesso).
|
||||
|
||||
---
|
||||
|
||||
## Sicurezza a Livello Applicativo
|
||||
|
||||
Alcuni protocolli garantiscono la sicurezza e la riservatezza direttamente per specifiche applicazioni:
|
||||
* **PGP (Pretty Good Privacy) e S/MIME:** Standard crittografici utilizzati per firmare digitalmente e cifrare i messaggi di posta elettronica (e-mail). Garantiscono l'identità del mittente e impediscono l'intercettazione del testo da parte di server o soggetti terzi.
|
||||
* **SSH (Secure Shell):** Protocollo di rete crittografico utilizzato per accedere a distanza e amministrare sistemi informatici (es. riga di comando di un server Linux) in totale sicurezza. Ha sostituito i vecchi protocolli non cifrati come Telnet.
|
||||
|
||||
## Strumenti di Difesa delle Reti
|
||||
|
||||
Per rendere possibile la difesa delle reti dalle minacce, sono stati sviluppati una serie di strumenti:
|
||||
|
||||
* **Firewall:** Dispositivo hardware o software che filtra il traffico di rete in entrata e in uscita, agendo come un "muro tagliafuoco" tra una rete interna sicura e una rete esterna (Internet) in base a regole predefinite. Tipi principali: *Packet filtering*, *Stateful inspection*, *Application gateway (Proxy)*.
|
||||
* **DMZ (Demilitarized Zone):** Sottorete isolata posta tra Internet e la rete locale (LAN). Contiene i server pubblici dell'azienda (es. server web) in modo che, se compromessi, gli attaccanti non abbiano accesso diretto alla rete aziendale interna.
|
||||
* **IDS e IPS:**
|
||||
* **IDS (Intrusion Detection System):** Monitora il traffico di rete e "lancia l'allarme" se rileva anomalie o firme di attacchi noti.
|
||||
* **IPS (Intrusion Prevention System):** Simile all'IDS, ma blocca attivamente il traffico malevolo.
|
||||
* **VPN (Virtual Private Network):** Crea un "tunnel" cifrato e sicuro attraverso una rete pubblica (come Internet), permettendo di comunicare o accedere alla rete aziendale in totale sicurezza.
|
||||
* **Honeypot:** Sistema informatico configurato intenzionalmente con vulnerabilità per attirare gli hacker, allo scopo di studiarne i comportamenti e le tecniche.
|
||||
@@ -0,0 +1,178 @@
|
||||
# Standard di Riferimento per la Sicurezza Informatica
|
||||
|
||||
|
||||
|
||||
## 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.
|
||||
|
||||
Adottare uno standard significa:
|
||||
- Ridurre i rischi in modo strutturato e misurabile
|
||||
- Dimostrare conformità normativa a clienti, partner e autorità
|
||||
- Migliorare la fiducia degli stakeholder
|
||||
- Facilitare l'interoperabilità tra organizzazioni
|
||||
|
||||
---
|
||||
|
||||
## Principali Organismi di Standardizzazione
|
||||
|
||||
| Organismo | Nome completo | Ambito |
|
||||
|---|---|---|
|
||||
| **ISO** | International Organization for Standardization | Standard internazionali trasversali |
|
||||
| **IEC** | International Electrotechnical Commission | Standard per sistemi elettronici |
|
||||
| **NIST** | National Institute of Standards and Technology (USA) | Framework e linee guida tecniche |
|
||||
| **ENISA** | European Union Agency for Cybersecurity | Standard e raccomandazioni UE |
|
||||
| **CIS** | Center for Internet Security | Best practice pratiche e controlli |
|
||||
| **ISACA** | Information Systems Audit and Control Association | Governance IT e audit |
|
||||
| **ISF** | Information Security Forum | Standard of Good Practice |
|
||||
| **PCI SSC** | Payment Card Industry Security Standards Council | Sicurezza dei pagamenti digitali |
|
||||
|
||||
---
|
||||
|
||||
## ISO/IEC 27000
|
||||
|
||||
La famiglia **ISO/IEC 27000** è il riferimento internazionale per i **Sistemi di Gestione della Sicurezza delle Informazioni (ISMS — Information Security Management System)**.
|
||||
I principali Standard appartenenti alla famiglia sono:
|
||||
|
||||
| Standard | Contenuto |
|
||||
|---|---|
|
||||
| **ISO/IEC 27000** | Vocabolario e panoramica della famiglia |
|
||||
| **ISO/IEC 27001** | Requisiti per l'implementazione di un ISMS,requisiti sicurezza organizzazione |
|
||||
| **ISO/IEC 27002** | Linee guida pratiche per i controlli di sicurezza |
|
||||
| **ISO/IEC 27003** | Guida all'implementazione dell'ISMS |
|
||||
| **ISO/IEC 27004** | Misurazione e metriche dell'ISMS |
|
||||
| **ISO/IEC 27005** | Gestione del rischio per la sicurezza delle informazioni |
|
||||
| **ISO/IEC 27006** | Requisiti per gli enti di certificazione |
|
||||
| **ISO/IEC 27017** | Controlli di sicurezza per i servizi cloud |
|
||||
| **ISO/IEC 27018** | Protezione dei dati personali nel cloud |
|
||||
| **ISO/IEC 27032** | Linee guida per la cybersecurity |
|
||||
| **ISO/IEC 27035** | Gestione degli incidenti di sicurezza |
|
||||
| **ISO/IEC 27701** | Estensione per la privacy (PIMS) — collegato al GDPR |
|
||||
|
||||
---
|
||||
|
||||
## 🇺🇸 NIST — Framework e Pubblicazioni Speciali
|
||||
|
||||
Il **National Institute of Standards and Technology** statunitense produce standard e linee guida di riferimento globale, liberamente accessibili per individuare e ridurre i rischi relativi alla sicurezza informatica.
|
||||
|
||||
### NIST Cybersecurity Framework (CSF)
|
||||
|
||||
Pubblicato nel 2014, aggiornato alla versione **2.0 nel 2024**, è organizzato attorno a **6 funzioni core** cicliche dette Incident Response LifeCycle:
|
||||
|
||||
| Funzione | Descrizione |
|
||||
|---|---|
|
||||
Fase di Preparazione all'Incidente
|
||||
| **GOVERN** (nuovo in v2.0) | Definire la strategia, le policy e i ruoli di cybersecurity |
|
||||
| **IDENTIFY** | Comprendere il contesto, gli asset e i rischi |
|
||||
| **PROTECT** | Implementare misure di protezione |
|
||||
Fase di Gestione degli Incidenti
|
||||
| **DETECT** | Identificare eventi di sicurezza |
|
||||
| **RESPOND** | Agire in risposta a un incidente rilevato |
|
||||
| **RECOVER** | Ripristinare le capacità operative dopo un incidente |
|
||||
|
||||
### NIST Special Publications (SP) più rilevanti
|
||||
|
||||
| Pubblicazione | Argomento |
|
||||
|---|---|
|
||||
| **NIST SP 800-53** | Controlli di sicurezza per sistemi federali USA |
|
||||
| **NIST SP 800-61** | Guida alla gestione degli incidenti informatici |
|
||||
| **NIST SP 800-63** | Linee guida per l'identità digitale e l'autenticazione |
|
||||
| **NIST SP 800-115** | Guida ai test di sicurezza tecnica |
|
||||
| **NIST SP 800-171** | Protezione delle informazioni controllate non classificate |
|
||||
| **NIST SP 800-207** | Architettura Zero Trust |
|
||||
|
||||
---
|
||||
|
||||
## CIS Controls
|
||||
|
||||
I **CIS Critical Security Controls** (sviluppati dal Center for Internet Security) sono un insieme di **18 controlli prioritizzati** per la difesa informatica, progettati per essere immediatamente applicabili.
|
||||
|
||||
### I 18 CIS Controls (v8)
|
||||
|
||||
| # | Controllo |
|
||||
|---|---|
|
||||
| 1 | Inventario e controllo degli asset hardware |
|
||||
| 2 | Inventario e controllo degli asset software |
|
||||
| 3 | Protezione dei dati |
|
||||
| 4 | Configurazione sicura degli asset aziendali |
|
||||
| 5 | Gestione degli account |
|
||||
| 6 | Gestione del controllo degli accessi |
|
||||
| 7 | Gestione continua delle vulnerabilità |
|
||||
| 8 | Gestione dei log di audit |
|
||||
| 9 | Protezione della posta elettronica e del browser |
|
||||
| 10 | Difese contro i malware |
|
||||
| 11 | Recupero dati |
|
||||
| 12 | Gestione dell'infrastruttura di rete |
|
||||
| 13 | Monitoraggio e difesa della rete |
|
||||
| 14 | Formazione e sensibilizzazione sulla sicurezza |
|
||||
| 15 | Gestione dei fornitori di servizi |
|
||||
| 16 | Sicurezza del software applicativo |
|
||||
| 17 | Gestione della risposta agli incidenti |
|
||||
| 18 | Test di penetrazione |
|
||||
|
||||
### Gruppi di implementazione (IG)
|
||||
|
||||
I controlli CIS sono organizzati in tre livelli di maturità:
|
||||
- **IG1**: protezione essenziale, adatta a piccole organizzazioni
|
||||
- **IG2**: protezione intermedia, per organizzazioni con risorse IT dedicate
|
||||
- **IG3**: protezione avanzata, per organizzazioni con alta esposizione al rischio
|
||||
|
||||
## SIEM, SOC e CERT
|
||||
|
||||
Nel panorama della sicurezza informatica moderna, la capacità di **rilevare, analizzare e rispondere** alle minacce in tempo reale è fondamentale. Tre elementi chiave costituiscono l'ossatura operativa della difesa cyber:
|
||||
|
||||
- **SIEM** — il sistema tecnologico di raccolta e correlazione degli eventi
|
||||
- **SOC** — il centro operativo che monitora e gestisce la sicurezza H24
|
||||
- **CERT** — il team specializzato nella risposta agli incidenti informatici
|
||||
|
||||
Questi tre componenti non sono indipendenti: si integrano in un **ecosistema coordinato** dove la tecnologia, i processi e le persone lavorano insieme.
|
||||
|
||||
---
|
||||
|
||||
### SIEM — Security Information and Event Management
|
||||
|
||||
Il **SIEM** è una piattaforma tecnologica che raccoglie, normalizza, correla e analizza in tempo reale i **log e gli eventi di sicurezza** provenienti da tutta l'infrastruttura IT di un'organizzazione, con l'obiettivo di rilevare anomalie, minacce e incidenti.
|
||||
|
||||
> Il SIEM è gli permette al SOC di operare: senza di esso, analizzare milioni di eventi al giorno sarebbe impossibile.
|
||||
|
||||
|
||||
### SOC — Security Operations Center
|
||||
|
||||
Il **SOC** è il centro operativo — fisico o virtuale — in cui un team dedicato di professionisti della sicurezza **monitora, analizza, rileva e risponde** agli eventi e agli incidenti di sicurezza informatica, tipicamente in modalità **24/7/365**.
|
||||
|
||||
> Il SOC è la mente della sicurezza: interpreta i dati del SIEM, prende decisioni e coordina le risposte.
|
||||
|
||||
|
||||
### CERT — Computer Emergency Response Team
|
||||
|
||||
Il **CERT** (anche detto **CSIRT** — Computer Security Incident Response Team) è un'unità specializzata nella **risposta coordinata agli incidenti informatici**. A differenza del SOC — che opera in modo continuo e reattivo — il CERT si attiva in modo più strutturato su incidenti specifici, spesso di maggiore complessità o impatto.
|
||||
|
||||
> Il CERT è progettato per gestire le crisi: interviene quando l'incidente supera la capacità di gestione ordinaria del SOC.
|
||||
|
||||
---
|
||||
## 🇪🇺 Standard e Normative Europee
|
||||
|
||||
### NIS2 — Direttiva sulla Sicurezza delle Reti e dei Sistemi Informativi
|
||||
|
||||
La **Direttiva NIS2 (UE 2022/2555)**, recepita in Italia nel 2024, aggiorna la precedente NIS e si applica a **operatori di servizi essenziali e importanti**.
|
||||
|
||||
**Obblighi principali:**
|
||||
- Implementare misure di gestione del rischio cyber
|
||||
- Notificare gli incidenti significativi entro **24 ore** (notifica preliminare) e **72 ore** (notifica completa)
|
||||
- Garantire la sicurezza della supply chain
|
||||
- Formare il personale e il management sulla cybersecurity
|
||||
- Adottare politiche di crittografia e controllo degli accessi
|
||||
|
||||
### GDPR e Sicurezza dei Dati
|
||||
|
||||
Il **Regolamento Generale sulla Protezione dei Dati (GDPR — Reg. UE 679/2016)** impone requisiti di sicurezza specifici:
|
||||
|
||||
| Articolo | Contenuto |
|
||||
|---|---|
|
||||
| **Art. 25** | Privacy by design e privacy by default |
|
||||
| **Art. 32** | Misure tecniche e organizzative adeguate |
|
||||
| **Art. 33** | Notifica violazione al Garante entro 72 ore |
|
||||
| **Art. 34** | Comunicazione della violazione agli interessati |
|
||||
| **Art. 35** | Valutazione d'impatto (DPIA) |
|
||||
|
||||
---
|
||||
61
backend/src/main/resources/get/documentazione/tic.md
Normal file
61
backend/src/main/resources/get/documentazione/tic.md
Normal file
@@ -0,0 +1,61 @@
|
||||
# Pratiche per l'Utilizzo Consapevole e Lecito delle TIC
|
||||
|
||||
## Introduzione
|
||||
|
||||
Le Tecnologie dell'Informazione e della Comunicazione (TIC) hanno trasformato profondamente il modo in cui lavoriamo, comunichiamo e apprendiamo. Questa trasformazione porta con sé enormi opportunità, ma anche responsabilità concrete: ogni volta che utilizziamo un dispositivo connesso, lasciamo tracce, interagiamo con altri e partecipiamo a un ecosistema digitale condiviso. Usare le TIC in modo consapevole e lecito non significa rinunciare alla libertà, ma esercitarla con intelligenza e rispetto.
|
||||
|
||||
---
|
||||
|
||||
## Privacy e Protezione dei Dati Personali
|
||||
|
||||
Uno degli errori più comuni nell'uso quotidiano delle TIC è la sottovalutazione del valore dei dati personali. Spesso condividiamo informazioni sensibili — fotografie, posizione geografica, abitudini di consumo — senza renderci conto di quanto possano essere utilizzate da terzi.
|
||||
|
||||
La soluzione non è isolarsi dalla rete, ma adottare un approccio più critico e selettivo. Prima di registrarsi a un servizio online, vale la pena chiedersi quali dati vengono richiesti e perché. Usare password robuste e diverse per ogni account, attivare l'autenticazione a due fattori e rivedere periodicamente le impostazioni di privacy sui propri profili sono abitudini semplici ma efficaci. Quando possibile, è preferibile scegliere servizi che rispettano la privacy per impostazione predefinita, limitando al minimo la raccolta dei dati.
|
||||
|
||||
---
|
||||
|
||||
## Rispetto della Proprietà Intellettuale
|
||||
|
||||
Il digitale ha reso straordinariamente facile copiare, condividere e riprodurre contenuti. Questa facilità, però, non rende automaticamente lecito qualsiasi utilizzo. Musica, testi, immagini e software sono opere protette, frutto del lavoro creativo e intellettuale di qualcuno.
|
||||
|
||||
Un approccio responsabile significa cercare attivamente alternative legali: esistono piattaforme che offrono contenuti gratuiti con licenze aperte, archivi di immagini libere, software open source di alta qualità. Citare le fonti quando si utilizza il lavoro altrui — anche in ambito scolastico o personale — è una pratica di rispetto fondamentale, oltre che un buon esercizio intellettuale. Presentare come propri contenuti scritti o creati da altri, inclusi quelli generati da intelligenze artificiali senza rielaborazione critica, è una forma di disonestà che impoverisce chi la pratica prima ancora che chi ne è vittima.
|
||||
|
||||
---
|
||||
|
||||
## Comportamento Etico Online
|
||||
|
||||
La distanza fisica che il digitale interpone tra le persone può dare una falsa sensazione di impunità, spingendo alcuni a comportarsi online in modi che non si permetterebbero mai di persona. Insulti, diffamazioni, esclusioni sistematiche e cyberbullismo sono fenomeni reali che causano danni reali, spesso sottostimati.
|
||||
|
||||
La risposta più efficace è costruire una cultura della responsabilità digitale, a partire da sé stessi. Significa verificare le informazioni prima di condividerle, per non diventare involontariamente veicoli di disinformazione. Significa anche non restare spettatori passivi quando si assiste a comportamenti scorretti online: segnalare contenuti inappropriati, supportare chi è bersaglio di attacchi e non alimentare dinamiche tossiche sono azioni concrete che ognuno può compiere.
|
||||
|
||||
---
|
||||
|
||||
## Sicurezza Informatica
|
||||
|
||||
Le minacce informatiche — virus, phishing, ransomware — non riguardano solo grandi aziende o istituzioni. Chiunque utilizzi un dispositivo connesso è un potenziale bersaglio, e spesso gli attacchi sfruttano proprio la disattenzione o la mancanza di informazione degli utenti.
|
||||
|
||||
Difendersi è più semplice di quanto si pensi, a patto di adottare alcune pratiche di base con costanza. Mantenere aggiornati sistemi operativi e applicazioni risolve molte vulnerabilità note. Non aprire allegati o cliccare su link provenienti da mittenti sconosciuti è una regola d'oro che vale ancora oggi, nonostante le tecniche di inganno si siano raffinate. Fare backup regolari dei propri dati — su un disco esterno o su un servizio cloud affidabile — è la misura più efficace contro la perdita irreversibile di informazioni importanti.
|
||||
|
||||
---
|
||||
|
||||
## Uso Responsabile dei Social Media
|
||||
|
||||
I social media amplificano la nostra voce e ci connettono con persone in tutto il mondo, ma amplificano anche gli errori. Ciò che pubblichiamo online può rimanere accessibile per anni, essere condiviso fuori contesto e raggiungere persone che non avevamo immaginato. La gestione consapevole della propria identità digitale è quindi una competenza sempre più essenziale.
|
||||
|
||||
Un buon punto di partenza è rivedere periodicamente le impostazioni di privacy dei propri profili, limitando la visibilità dei contenuti alle persone di fiducia. Prima di pubblicare foto o video che ritraggono altre persone, è importante chiedere il loro consenso esplicito. Più in generale, vale la pena sviluppare l'abitudine di chiedersi, prima di ogni pubblicazione: *"Sarei a mio agio se questo contenuto fosse visto da chiunque, tra dieci anni?"*
|
||||
|
||||
---
|
||||
|
||||
## Benessere Digitale
|
||||
|
||||
Un aspetto spesso trascurato nell'uso delle TIC è il loro impatto sul benessere personale. L'iperconnessione, la difficoltà a staccarsi dai dispositivi e l'esposizione continua a flussi di notizie e notifiche possono generare stress, ansia e difficoltà di concentrazione.
|
||||
|
||||
Prendersi cura del proprio benessere digitale significa innanzitutto riconoscere questi rischi. Stabilire momenti della giornata senza dispositivi, limitare le notifiche alle sole comunicazioni davvero urgenti e imparare a distinguere l'informazione affidabile dai contenuti progettati per catturare l'attenzione sono strategie concrete e alla portata di tutti. L'obiettivo non è demonizzare la tecnologia, ma integrarla nella propria vita in modo che sia uno strumento al servizio delle proprie esigenze, e non il contrario.
|
||||
|
||||
---
|
||||
|
||||
## Conclusione
|
||||
|
||||
Usare le TIC in modo consapevole e lecito è, in definitiva, una questione di cultura prima ancora che di regole. Le norme esistono e vanno rispettate, ma la vera differenza la fanno le scelte quotidiane di ogni singolo utente: la cura con cui gestiamo i nostri dati, il rispetto che dimostriamo verso il lavoro altrui, l'attenzione che poniamo nelle nostre interazioni online. In un ambiente digitale sempre più pervasivo, ognuno di noi è co-responsabile della qualità di quello spazio condiviso.
|
||||
|
||||
> *"La libertà digitale si esercita davvero solo quando include il rispetto per gli altri."*
|
||||
42
backend/src/main/resources/get/documentazione/vuln.md
Normal file
42
backend/src/main/resources/get/documentazione/vuln.md
Normal file
@@ -0,0 +1,42 @@
|
||||
## Vulnerabilità, Minacce ed Exploit
|
||||
|
||||
Per comprendere a fondo la cybersecurity è essenziale distinguere tre concetti spesso confusi tra loro: **vulnerabilità**, **minaccia** ed **exploit**.
|
||||
|
||||
### Vulnerabilità
|
||||
|
||||
Una **vulnerabilità** è una debolezza o un difetto presente in un sistema, un'applicazione o un processo che può essere sfruttata per comprometterne la sicurezza. Le vulnerabilità possono essere di natura:
|
||||
|
||||
* **Software:** bug nel codice, configurazioni errate, librerie obsolete o mancanza di validazione degli input (es. *buffer overflow*, *SQL injection*, *Cross-Site Scripting – XSS*).
|
||||
* **Hardware:** difetti fisici nei componenti o nelle architetture dei processori (es. le vulnerabilità *Spectre* e *Meltdown* del 2018, legate all'esecuzione speculativa della CPU).
|
||||
* **Umana (Human Factor):** comportamenti scorretti degli utenti, come l'uso di password deboli, la caduta in truffe di *phishing* o la condivisione involontaria di credenziali. Questo è spesso il vettore di attacco più sottovalutato e più efficace.
|
||||
* **Procedurale:** assenza o inadeguatezza di policy di sicurezza, mancata applicazione di patch, assenza di piani di risposta agli incidenti.
|
||||
|
||||
Le vulnerabilità vengono catalogate a livello internazionale attraverso il sistema **CVE (Common Vulnerabilities and Exposures)**, un registro pubblico mantenuto dal MITRE che assegna a ogni vulnerabilità nota un identificatore univoco (es. `CVE-2021-44228` per *Log4Shell*). La gravità di ciascuna viene misurata tramite il punteggio **CVSS (Common Vulnerability Scoring System)**, su una scala da 0 a 10.
|
||||
|
||||
### Minacce ed Exploit
|
||||
|
||||
Una **minaccia** è qualsiasi evento o agente – interno o esterno – potenzialmente in grado di sfruttare una vulnerabilità e causare un danno. Le minacce possono essere **intenzionali** (attacchi mirati, malware, insider threat) o **accidentali** (errori umani, guasti hardware, calamità naturali).
|
||||
|
||||
Le minacce vengono classificate principalmente in:
|
||||
* **Malware**
|
||||
* **Keylogger**
|
||||
* **TCP/IP**
|
||||
* **Errori Umani**
|
||||
|
||||
Un **exploit** è invece il meccanismo tecnico concreto – spesso un frammento di codice – che sfrutta una specifica vulnerabilità per eseguire azioni non autorizzate. Esistono exploit di tipo **zero-day** quando vengono utilizzati prima che il produttore abbia rilasciato una patch correttiva, rendendoli particolarmente pericolosi.
|
||||
|
||||
La relazione tra questi tre elementi può essere sintetizzata così:
|
||||
|
||||
> *Una **minaccia** sfrutta una **vulnerabilità** tramite un **exploit** per causare un impatto sul sistema.*
|
||||
|
||||
|
||||
#### Il processo di gestione delle vulnerabilità
|
||||
|
||||
La gestione proattiva delle vulnerabilità (Vulnerability Management) prevede un ciclo continuo articolato in quattro fasi:
|
||||
|
||||
1. **Identificazione:** tramite strumenti di *vulnerability scanning* (es. Nessus, OpenVAS) e *penetration testing*.
|
||||
2. **Valutazione:** prioritizzazione in base al punteggio CVSS, al contesto aziendale e all'esposizione reale.
|
||||
3. **Remediation:** applicazione di patch, aggiornamenti, modifiche di configurazione o introduzione di *compensating controls*.
|
||||
4. **Verifica:** ri-scansione del sistema per confermare che la vulnerabilità sia stata effettivamente risolta.
|
||||
|
||||
---
|
||||
BIN
backend/src/main/resources/get/elisabetta.png
Normal file
BIN
backend/src/main/resources/get/elisabetta.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.4 KiB |
@@ -1,58 +1,60 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="it">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>CryptoSeals - Home</title>
|
||||
<title>CryptoSeals</title>
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<script src="index.js" defer></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<body>
|
||||
<div>
|
||||
<div id="stars-container">
|
||||
<div id="stars"></div>
|
||||
<div id="stars2"></div>
|
||||
<div id="stars3"></div>
|
||||
</div>
|
||||
<nav class="navbar">
|
||||
<a href="index.html" class="nav-brand">
|
||||
<img src="seal1.png" height="50" alt="🦭" onerror="this.src='https://cdn-icons-png.flaticon.com/512/3063/3063126.png';">
|
||||
<img src="seal1.png" height="80" alt="🦭">
|
||||
CryptoSeals
|
||||
</a>
|
||||
<div class="menu-toggle" onclick="toggleMenu()">
|
||||
<i class="fa-solid fa-bars"></i>
|
||||
</div>
|
||||
<ul class="nav-links" id="nav-links">
|
||||
<li><a href="rsa.html"><i class="fa-solid fa-key"></i> RSA</a></li>
|
||||
<li><a href="rsa.html"><i class="fa-solid fa-key"></i>RSA</a></li>
|
||||
<li><a href="cesare.html"><i class="fa-solid fa-arrow-right-arrow-left"></i> Cesare</a></li>
|
||||
<li><a href="vigenere.html"><i class="fa-solid fa-table"></i> Vigenère</a></li>
|
||||
<li><a href="materiale.html"><i class="fa-regular fa-clipboard"></i></i>Materiale</a></li>
|
||||
<li><a href="team.html"><i class="fa-solid fa-users"></i> Il Team</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<div class="container" style="display: flex; flex-direction: column; align-items: center; justify-content: center; height: 60vh;">
|
||||
<div class="container"
|
||||
style="display: flex; flex-direction: column; align-items: center; justify-content: center; height: 60vh;">
|
||||
<h1>Welcome to CryptoSeals</h1>
|
||||
<p class="descrizione">
|
||||
Dive deep, Seal your data. <i class="fa-solid fa-water"></i><br><br>
|
||||
Scegli uno strumento dal menu per iniziare a proteggere i tuoi messaggi!
|
||||
Esplora gli strumenti nella barra in alto per conoscere il mondo della sicurezza informatica
|
||||
</p>
|
||||
<img src="seal1.png" alt="Mascotte CryptoSeals" style="max-width: 250px; border-radius: 20px; box-shadow: 0 10px 30px rgba(16, 185, 129, 0.2);" onerror="this.src='https://cdn-icons-png.flaticon.com/512/3063/3063126.png';">
|
||||
</div>
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1440 320" style="margin-bottom: -5px;">
|
||||
<path fill="#0b0f19" fill-opacity="1" d="M0,160L48,170.7C96,181,192,203,288,208C384,213,480,203,576,176C672,149,768,107,864,117.3C960,128,1056,192,1152,213.3C1248,235,1344,213,1392,202.7L1440,192L1440,320L1392,320C1344,320,1248,320,1152,320C1056,320,960,320,864,320C768,320,672,320,576,320C480,320,384,320,288,320C192,320,96,320,48,320L0,320Z"></path>
|
||||
<path fill="#0b0f19" fill-opacity="1"
|
||||
d="M0,160L48,170.7C96,181,192,203,288,208C384,213,480,203,576,176C672,149,768,107,864,117.3C960,128,1056,192,1152,213.3C1248,235,1344,213,1392,202.7L1440,192L1440,320L1392,320C1344,320,1248,320,1152,320C1056,320,960,320,864,320C768,320,672,320,576,320C480,320,384,320,288,320C192,320,96,320,48,320L0,320Z">
|
||||
</path>
|
||||
</svg>
|
||||
|
||||
<footer>
|
||||
<div class="copyright">
|
||||
<a href="/privacy-policy/">Privacy Policy</a> |
|
||||
<a href="#"><i class="fa-brands fa-github"></i> GitHub</a> <br><br>
|
||||
<a href="/privacy-policy/">Privacy Policy</a> |
|
||||
<a href="https://git.vps.francescomancuso.it/elisabetta/cryptoseals"><i class="fa-solid fa-mug-saucer"></i> Gitea</a> <br><br>
|
||||
© <span id="year"></span> CryptoSeals Team
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
// Gestione Menu Mobile
|
||||
function toggleMenu() {
|
||||
document.getElementById("nav-links").classList.toggle("active");
|
||||
}
|
||||
// Anno dinamico Footer
|
||||
document.getElementById("year").innerText = new Date().getFullYear();
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
24
backend/src/main/resources/get/index.js
Normal file
24
backend/src/main/resources/get/index.js
Normal file
@@ -0,0 +1,24 @@
|
||||
// Gestione Menu Mobile
|
||||
function toggleMenu() {
|
||||
document.getElementById("nav-links").classList.toggle("active");
|
||||
}
|
||||
// Anno dinamico Footer
|
||||
document.getElementById("year").innerText = new Date().getFullYear();
|
||||
|
||||
// Funzione per generare le ombre casuali delle stelle
|
||||
function generateStars(n) {
|
||||
let shadows = '';
|
||||
for (let i = 0; i < n; i++) {
|
||||
// Genera coordinate casuali fino a 2000px
|
||||
let x = Math.floor(Math.random() * 2000);
|
||||
let y = Math.floor(Math.random() * 2000);
|
||||
shadows += `${x}px ${y}px #FFF`;
|
||||
if (i < n - 1) shadows += ', ';
|
||||
}
|
||||
return shadows;
|
||||
}
|
||||
|
||||
// Applica le stelle generate alle variabili CSS
|
||||
document.documentElement.style.setProperty('--shadows-small', generateStars(700));
|
||||
document.documentElement.style.setProperty('--shadows-medium', generateStars(200));
|
||||
document.documentElement.style.setProperty('--shadows-big', generateStars(100));
|
||||
BIN
backend/src/main/resources/get/manuela1.png
Normal file
BIN
backend/src/main/resources/get/manuela1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.3 KiB |
56
backend/src/main/resources/get/materiale.html
Normal file
56
backend/src/main/resources/get/materiale.html
Normal file
@@ -0,0 +1,56 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="it">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>CryptoSeals - Sezione Divulgativa</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<nav class="navbar">
|
||||
<a href="index.html" class="nav-brand">
|
||||
<img src="seal1.png" height="80" alt="🦭">
|
||||
CryptoSeals
|
||||
</a>
|
||||
<div class="menu-toggle" onclick="toggleMenu()">
|
||||
<i class="fa-solid fa-bars"></i>
|
||||
</div>
|
||||
<ul class="nav-links" id="nav-links">
|
||||
<li><a href="rsa.html"><i class="fa-solid fa-key"></i>RSA</a></li>
|
||||
<li><a href="cesare.html"><i class="fa-solid fa-arrow-right-arrow-left"></i> Cesare</a></li>
|
||||
<li><a href="materiale.html"><i class="fa-regular fa-clipboard"></i></i>Materiale</a></li>
|
||||
<li><a href="team.html"><i class="fa-solid fa-users"></i> Il Team</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<body>
|
||||
<div class="main-wrapper">
|
||||
<aside class="sidebar">
|
||||
<h3>Indice Appunti</h3>
|
||||
<nav>
|
||||
<button class="btn-appunto" onclick="showfile('documentazione/intro.md', this)">Introduzione alla Cybersecurity</button>
|
||||
<button class="btn-appunto" onclick="showfile('documentazione/vuln.md', this)">Vulnerabilità</button>
|
||||
<button class="btn-appunto" onclick="showfile('documentazione/attacchi.md', this)">Attacchi Informatici</button>
|
||||
<button class="btn-appunto" onclick="showfile('documentazione/intro_crittografia.md', this)">Introduzione Crittografia</button>
|
||||
<button class="btn-appunto" onclick="showfile('documentazione/crittografia_simmetrica.md', this)">Crittografia Simmetrica</button>
|
||||
<button class="btn-appunto" onclick="showfile('documentazione/crittografia_asimmetrica.md', this)">Crittografia Asimmetrica</button>
|
||||
<button class="btn-appunto" onclick="showfile('documentazione/ciclo_pdca.md', this)">La Progettazione della Sicurezza</button>
|
||||
<button class="btn-appunto" onclick="showfile('documentazione/standard_sicurezza.md', this)">Standard Sicurezza</button>
|
||||
<button class="btn-appunto" onclick="showfile('documentazione/sicurezza_reti.md', this)">Sicurezza nelle Reti</button>
|
||||
<button class="btn-appunto" onclick="showfile('documentazione/tic.md', this)">Pratiche per l'Utilizzo Consapevole delle TIC</button>
|
||||
</nav>
|
||||
</aside>
|
||||
|
||||
<main class="content-area">
|
||||
<div id="markdown-content" class="appunti-style">
|
||||
<h1>Seleziona un argomento</h1>
|
||||
<p>Clicca a sinistra per caricare gli appunti.</p>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
<script src="materiale.js"></script>
|
||||
</body>
|
||||
21
backend/src/main/resources/get/materiale.js
Normal file
21
backend/src/main/resources/get/materiale.js
Normal file
@@ -0,0 +1,21 @@
|
||||
// Utilizzata la libreria marked per trasformare markdown in html
|
||||
async function showfile(filename, target) {
|
||||
const bottoni = document.querySelectorAll('.btn-appunto');
|
||||
bottoni.forEach(b => b.classList.remove('active'));
|
||||
if(target) target.classList.add('active');
|
||||
|
||||
const container = document.getElementById('markdown-content');
|
||||
container.innerHTML = "<p>Caricamento in corso...</p>";
|
||||
|
||||
try {
|
||||
const response = await fetch(filename);
|
||||
if (!response.ok) throw new Error("File non trovato");
|
||||
|
||||
const markdownRaw = await response.text();
|
||||
|
||||
container.innerHTML = marked.parse(markdownRaw);
|
||||
|
||||
} catch (error) {
|
||||
container.innerHTML = "<p style='color:red'>Errore nel caricamento dell'appunto.</p>";
|
||||
}
|
||||
}
|
||||
@@ -3,94 +3,70 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>CryptoSeals - RSA</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<script src="rsa.js" defer></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<nav class="navbar">
|
||||
<a href="index.html" class="nav-brand">
|
||||
<span><img src="seal1.png" height="80"onerror="this.style.display='none'; this.nextElementSibling.style.display='inline';"></span> CryptoSeals
|
||||
<img src="seal1.png" height="80" alt="🦭">
|
||||
CryptoSeals
|
||||
</a>
|
||||
<ul class="nav-links">
|
||||
<li><a href="rsa.html" class="active">Algoritmo RSA</a></li>
|
||||
<li><a href="cesare.html">Cesare</a></li>
|
||||
<li><a href="vigenere.html">Vigenère</a></li>
|
||||
<li><a href="storia.html">La Storia</a></li>
|
||||
<li><a href="team.html">Il Team</a></li>
|
||||
<div class="menu-toggle" onclick="toggleMenu()">
|
||||
<i class="fa-solid fa-bars"></i>
|
||||
</div>
|
||||
<ul class="nav-links" id="nav-links">
|
||||
<li><a href="rsa.html"><i class="fa-solid fa-key"></i>RSA</a></li>
|
||||
<li><a href="cesare.html"><i class="fa-solid fa-arrow-right-arrow-left"></i> Cesare</a></li>
|
||||
<li><a href="materiale.html"><i class="fa-regular fa-clipboard"></i></i>Materiale</a></li>
|
||||
<li><a href="team.html"><i class="fa-solid fa-users"></i> Il Team</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<div class="container">
|
||||
<h1>Motore RSA</h1>
|
||||
<p class="descrizione">Cifra e decifra i tuoi messaggi con lo standard di sicurezza a chiave pubblica. Scegli la dimensione delle chiavi, scrivi e lascia fare alle foche.</p>
|
||||
<h1>Algoritmo RSA (Rivest-Shamir-Adleman)</h1>
|
||||
<p class="descrizione">Scegli la dimensione delle chiavi, scrivi e lascia fare alle foche.</p>
|
||||
|
||||
<div class="crypto-box">
|
||||
|
||||
<label>Dimensione Chiave RSA</label>
|
||||
<select id="keysize">
|
||||
<option value="512">512 bit (Solo didattico - Veloce)</option>
|
||||
<option value="1024" selected>1024 bit (Test - Bilanciato)</option>
|
||||
<option value="2048">2048 bit (Standard - Lenta da generare)</option>
|
||||
<option value="3072">3072 bit (Ottima - Mediamente Lenta)</option>
|
||||
<option value="4096">4096 bit (Alta sicurezza - Molto lenta)</option>
|
||||
<option value="512">512 bit</option>
|
||||
<option value="1024" selected>1024 bit</option>
|
||||
<option value="2048">2048 bit</option>
|
||||
<option value="3072">3072 bit</option>
|
||||
<option value="4096">4096 bit</option>
|
||||
</select>
|
||||
|
||||
<div class="crypto-columns">
|
||||
|
||||
<div class="crypto-col">
|
||||
<label>Testo in chiaro</label>
|
||||
<textarea id="plaintext" class="pulse-textarea" placeholder="Scrivi il messaggio segreto che vuoi proteggere..."></textarea>
|
||||
<label>Plaintext</label>
|
||||
<textarea id="plaintext" class="pulse-textarea" placeholder="Digita qui il messaggio da cifrare"></textarea>
|
||||
<button onclick="encrypt()">🔒 Cifra il messaggio</button>
|
||||
</div>
|
||||
|
||||
<div class="crypto-col">
|
||||
<label>Testo Cifrato (Base64)</label>
|
||||
<textarea id="ciphertext" placeholder="Il testo protetto apparirà qui..."></textarea>
|
||||
<label>Ciphertext</label>
|
||||
<textarea id="ciphertext" placeholder="Il testo cifrato comparirà qui"></textarea>
|
||||
<button class="btn-green" onclick="decrypt()">🔓 Decifra il messaggio</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div style="margin-top: 35px;">
|
||||
<label>Risultato finale decifrato</label>
|
||||
<label>Decoded - Ciphertext</label>
|
||||
<textarea id="decodedtext" readonly placeholder="Il messaggio originale apparirà qui dopo la decifratura..." style="height: 100px; background-color: #0b0f19; border-color: rgba(16, 185, 129, 0.3); color: #10b981;"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
async function encrypt() {
|
||||
const plaintext = document.getElementById("plaintext").value;
|
||||
const size = document.getElementById("keysize").value;
|
||||
|
||||
if(!plaintext) return alert("Per favore, inserisci del testo da cifrare.");
|
||||
|
||||
document.getElementById("ciphertext").value = "Le foche stanno cifrando... Attendere prego.";
|
||||
|
||||
try {
|
||||
// NOTA: Controlla che la rotta nel tuo Java sia corretta (/seal/rsa/encrypt o /api/rsa/cifra)
|
||||
const res = await fetch("/seal/rsa/encrypt", {
|
||||
method: "POST", headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ text: plaintext, keysize: parseInt(size) })
|
||||
});
|
||||
document.getElementById("ciphertext").value = await res.text();
|
||||
} catch (e) { alert("Impossibile connettersi al server Javalin."); }
|
||||
}
|
||||
|
||||
async function decrypt() {
|
||||
const input = document.getElementById("ciphertext").value;
|
||||
if(!input) return alert("Non c'è nessun testo da decifrare.");
|
||||
|
||||
document.getElementById("decodedtext").value = "Decifratura in corso...";
|
||||
|
||||
try {
|
||||
// NOTA: Controlla che la rotta nel tuo Java sia corretta (/seal/rsa/decrypt o /api/rsa/decifra)
|
||||
const res = await fetch("http://localhost:8080/seal/rsa/decrypt", {
|
||||
method: "POST", headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ text: input })
|
||||
});
|
||||
document.getElementById("decodedtext").value = await res.text();
|
||||
} catch (e) { alert("Impossibile connettersi al server."); }
|
||||
}
|
||||
</script>
|
||||
<footer>
|
||||
<div class="copyright">
|
||||
<a href="/privacy-policy/">Privacy Policy</a> |
|
||||
<a href="https://git.vps.francescomancuso.it/elisabetta/cryptoseals"><i class="fa-solid fa-mug-saucer"></i> Gitea</a> <br><br>
|
||||
© <span id="year"></span> CryptoSeals Team
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
44
backend/src/main/resources/get/rsa.js
Normal file
44
backend/src/main/resources/get/rsa.js
Normal file
@@ -0,0 +1,44 @@
|
||||
let d = "";
|
||||
let n = "";
|
||||
|
||||
async function encrypt() {
|
||||
const plaintext = document.getElementById("plaintext").value;
|
||||
const size = document.getElementById("keysize").value;
|
||||
|
||||
if (!plaintext) return alert("Per favore, inserisci del testo da cifrare.");
|
||||
|
||||
document.getElementById("ciphertext").value = "Le foche stanno cifrando... Attendere prego.";
|
||||
|
||||
try {
|
||||
const res = await fetch("/seal/rsa/encrypt", {
|
||||
method: "POST", headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ text: plaintext, keysize: parseInt(size) })
|
||||
});
|
||||
const answer = await res.json();
|
||||
document.getElementById("ciphertext").value = answer.ciphertext;
|
||||
d = answer.keys.d;
|
||||
n = answer.keys.n;
|
||||
} catch (e) { alert("Impossibile connettersi al server Javalin."); }
|
||||
}
|
||||
|
||||
async function decrypt() {
|
||||
const input = document.getElementById("ciphertext").value;
|
||||
if (!input) return alert("Non c'è nessun testo da decifrare.");
|
||||
|
||||
document.getElementById("decodedtext").value = "Decifratura in corso...";
|
||||
|
||||
try {
|
||||
const res = await fetch("/seal/rsa/decrypt", {
|
||||
method: "POST", headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ text: input, n: n, d: d })
|
||||
});
|
||||
document.getElementById("decodedtext").value = await res.text();
|
||||
} catch (e) { alert("Impossibile connettersi al server."); }
|
||||
}
|
||||
|
||||
// Gestione Menu Mobile
|
||||
function toggleMenu() {
|
||||
document.getElementById("nav-links").classList.toggle("active");
|
||||
}
|
||||
// Anno dinamico Footer
|
||||
document.getElementById("year").innerText = new Date().getFullYear();
|
||||
@@ -54,6 +54,16 @@ body {
|
||||
|
||||
.nav-brand img {
|
||||
border-radius: 50%;
|
||||
height: 40px;
|
||||
width: 80px;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.nav-brand img:hover {
|
||||
object-fit: fill;
|
||||
display: inline-block;
|
||||
margin-top: 10px;
|
||||
margin-bottom: -10px;
|
||||
}
|
||||
|
||||
.nav-links {
|
||||
@@ -213,6 +223,43 @@ footer a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* Stili speciali solo per le card del team */
|
||||
.team-container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 30px;
|
||||
flex-wrap: wrap;
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.team-card {
|
||||
background: #f3f4f6;
|
||||
padding: 30px 20px;
|
||||
border-radius: 15px;
|
||||
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.05);
|
||||
width: 280px;
|
||||
text-align: center;
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
|
||||
.team-card:hover {
|
||||
transform: translateY(-10px);
|
||||
/* Effetto sollevamento al passaggio del mouse */
|
||||
box-shadow: 0 15px 25px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.avatar {
|
||||
font-size: 60px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.ruolo {
|
||||
color:#10b981;
|
||||
font-weight: bold;
|
||||
margin-bottom: 10px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
/* --- RESPONSIVE --- */
|
||||
@media (max-width: 768px) {
|
||||
.crypto-columns {
|
||||
@@ -235,4 +282,164 @@ footer a {
|
||||
.menu-toggle {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
/* --- Sezione Divulgativa --- */
|
||||
.appunti-style {
|
||||
background: rgba(255, 255, 255, 0.05); /* Un leggero sfondo chiaro per staccare */
|
||||
padding: 30px;
|
||||
border-radius: 15px;
|
||||
margin-top: 30px;
|
||||
line-height: 1.8;
|
||||
text-align: left; /* Fondamentale per la lettura */
|
||||
color: #f0f0f0;
|
||||
}
|
||||
|
||||
.appunti-style h1, .appunti-style h2, .appunti-style h3 {
|
||||
color: #4db8ff;
|
||||
margin-top: 1.5em;
|
||||
}
|
||||
|
||||
/* Stile per i blocchi di codice */
|
||||
.appunti-style pre {
|
||||
background: #000;
|
||||
padding: 15px;
|
||||
border-radius: 8px;
|
||||
overflow-x: auto;
|
||||
border: 1px solid #333;
|
||||
}
|
||||
|
||||
.appunti-style code {
|
||||
font-family: 'Courier New', monospace;
|
||||
color: #ffca28; /* Giallo per far risaltare le variabili/formule */
|
||||
}
|
||||
.main-wrapper {
|
||||
display: flex;
|
||||
max-width: 1200px;
|
||||
margin: 100px auto 50px; /* Spazio per la navbar */
|
||||
gap: 30px;
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
/* Sidebar Style */
|
||||
.sidebar {
|
||||
flex: 0 0 250px; /* Larghezza fissa 250px */
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
backdrop-filter: blur(10px); /* Effetto vetro sfocato */
|
||||
border-radius: 15px;
|
||||
padding: 20px;
|
||||
height: fit-content;
|
||||
position: sticky;
|
||||
top: 100px; /* Si blocca quando scendi */
|
||||
border: 1px solid rgba(77, 184, 255, 0.2);
|
||||
}
|
||||
|
||||
.sidebar h3 {
|
||||
color: #4db8ff;
|
||||
font-size: 1.2rem;
|
||||
margin-bottom: 20px;
|
||||
border-bottom: 1px solid rgba(77, 184, 255, 0.3);
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
.sidebar nav {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
/* Bottoni nella sidebar */
|
||||
.btn-appunto {
|
||||
background: transparent;
|
||||
color: white;
|
||||
border: none;
|
||||
text-align: left;
|
||||
padding: 12px 15px;
|
||||
border-radius: 8px;
|
||||
cursor: pointer;
|
||||
transition: all 0.3s ease;
|
||||
font-size: 1rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.btn-appunto i {
|
||||
width: 20px; /* Allinea le icone */
|
||||
color: #4db8ff;
|
||||
}
|
||||
|
||||
.btn-appunto:hover {
|
||||
background: rgba(77, 184, 255, 0.1);
|
||||
padding-left: 20px; /* Effetto movimento al passaggio */
|
||||
}
|
||||
|
||||
.btn-appunto.active {
|
||||
background: #4db8ff;
|
||||
color: #0b0f19;
|
||||
}
|
||||
|
||||
.btn-appunto.active i {
|
||||
color: #0b0f19;
|
||||
}
|
||||
|
||||
/* Area contenuto */
|
||||
.content-area {
|
||||
flex: 1; /* Prende tutto lo spazio rimanente */
|
||||
min-width: 0; /* Evita bug di overflow con flex */
|
||||
}
|
||||
|
||||
/* Responsive per cellulari */
|
||||
@media (max-width: 768px) {
|
||||
.main-wrapper {
|
||||
flex-direction: column;
|
||||
margin-top: 80px;
|
||||
}
|
||||
.sidebar {
|
||||
position: static;
|
||||
flex: none;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
/* --- SFONDO SPAZIALE ANIMATO --- */
|
||||
.sfondo-spazio {
|
||||
position: fixed; /* Lo fissa allo schermo */
|
||||
top: 0; left: 0; width: 100%; height: 100%;
|
||||
z-index: -1; /* Manda le stelle DIETRO le tue card e la navbar */
|
||||
background: radial-gradient(ellipse at bottom, #1B2735 0%, #090A0F 100%);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#stars-container {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
z-index: -1;
|
||||
pointer-events: none;
|
||||
background: radial-gradient(ellipse at bottom, #1B2735 0%, #090A0F 100%);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#stars, #stars2, #stars3 { background: transparent; }
|
||||
|
||||
/* Stelle Piccole */
|
||||
#stars { width: 1px; height: 1px; box-shadow: var(--shadows-small); animation: animStar 50s linear infinite; }
|
||||
#stars::after { content: " "; position: absolute; top: 2000px; width: 1px; height: 1px; background: transparent; box-shadow: var(--shadows-small); }
|
||||
|
||||
/* Stelle Medie */
|
||||
#stars2 { width: 2px; height: 2px; box-shadow: var(--shadows-medium); animation: animStar 100s linear infinite; }
|
||||
#stars2::after { content: " "; position: absolute; top: 2000px; width: 2px; height: 2px; background: transparent; box-shadow: var(--shadows-medium); }
|
||||
|
||||
/* Stelle Grandi */
|
||||
#stars3 { width: 3px; height: 3px; box-shadow: var(--shadows-big); animation: animStar 150s linear infinite; }
|
||||
#stars3::after { content: " "; position: absolute; top: 2000px; width: 3px; height: 3px; background: transparent; box-shadow: var(--shadows-big); }
|
||||
|
||||
@keyframes animStar {
|
||||
from { transform: translateY(0px); }
|
||||
to { transform: translateY(-2000px); }
|
||||
}
|
||||
|
||||
body {
|
||||
color: white;
|
||||
}
|
||||
66
backend/src/main/resources/get/team.html
Normal file
66
backend/src/main/resources/get/team.html
Normal file
@@ -0,0 +1,66 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="it">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>CryptoSeals - Il Team</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<script src="team.js" defer></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<nav class="navbar">
|
||||
<a href="index.html" class="nav-brand">
|
||||
<img src="seal1.png" height="80" alt="🦭">
|
||||
CryptoSeals
|
||||
</a>
|
||||
<div class="menu-toggle" onclick="toggleMenu()">
|
||||
<i class="fa-solid fa-bars"></i>
|
||||
</div>
|
||||
<ul class="nav-links" id="nav-links">
|
||||
<li><a href="rsa.html"><i class="fa-solid fa-key"></i>RSA</a></li>
|
||||
<li><a href="cesare.html"><i class="fa-solid fa-arrow-right-arrow-left"></i> Cesare</a></li>
|
||||
<li><a href="materiale.html"><i class="fa-regular fa-clipboard"></i></i>Materiale</a></li>
|
||||
<li><a href="team.html"><i class="fa-solid fa-users"></i> Il Team</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<div class="container">
|
||||
<h1>Il Team CryptoSeals</h1>
|
||||
<p class="descrizione"></p>
|
||||
|
||||
<div class="team-container">
|
||||
<div class="team-card">
|
||||
<div class="avatar"
|
||||
style="width: 190px; height: 140px; margin: 0 auto; overflow: hidden; border-radius: 10px;">
|
||||
<img src='elisabetta.png'
|
||||
style="width: 70%; height: calc(90% - 2px); object-fit: cover; object-position: top center;">
|
||||
</div>
|
||||
<h2 style="color: #0b0f19;">Elisabetta Raione</h2>
|
||||
<p class="ruolo">Foca 1</p>
|
||||
</div>
|
||||
|
||||
<div class="team-card">
|
||||
<div class="avatar"
|
||||
style="width: 190px; height: 140px; margin: 0 auto; overflow: hidden; border-radius: 10px;">
|
||||
<img src='manuela1.png'
|
||||
style="width: 70%; height: calc(90% - 2px); object-fit: cover; object-position: top center;">
|
||||
</div>
|
||||
<h2 style="color: #0b0f19;">Manuela Mango</h2>
|
||||
<p class="ruolo">Foca 2</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
<div class="copyright">
|
||||
<a href="/privacy-policy/">Privacy Policy</a> |
|
||||
<a href="https://git.vps.francescomancuso.it/elisabetta/cryptoseals"><i class="fa-solid fa-mug-saucer"></i> Gitea</a> <br><br>
|
||||
© <span id="year"></span> CryptoSeals Team
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
6
backend/src/main/resources/get/team.js
Normal file
6
backend/src/main/resources/get/team.js
Normal file
@@ -0,0 +1,6 @@
|
||||
// Gestione Menu Mobile
|
||||
function toggleMenu() {
|
||||
document.getElementById("nav-links").classList.toggle("active");
|
||||
}
|
||||
// Anno dinamico Footer
|
||||
document.getElementById("year").innerText = new Date().getFullYear();
|
||||
Reference in New Issue
Block a user