Tutorials

1. Introduzione alla Crittografia

Con il termine crittografia o criptografia si indica la disciplina che studia le scritture nascoste e i metodi per cifrare un messaggio affinché sia comprensibile solamente da chi è autorizzato a farl

1. Definizione e Terminologia

Con il termine crittografia (o criptografia) si indica la disciplina che studia le scritture nascoste e i metodi per cifrare un messaggio affinché sia comprensibile solamente da chi è autorizzato a farlo.

La crittografia è impiegata, in varie forme e configurazioni, per raggiungere due dei tre obiettivi alla base della cybersecurity:

  • Riservatezza
  • Integrità

Termini Chiave:

  • Plaintext: Il messaggio originale, in chiaro, che deve essere cifrato.
  • Ciphertext: La versione cifrata del messaggio in chiaro.
  • Cipher (Cifrario): L'algoritmo crittografico di cifratura che trasforma il plaintext in ciphertext (encryption) e, se previsto, effettua la trasformazione inversa, da ciphertext a plaintext (decryption).
  • Chiave di cifratura: Secondo input fornito all'algoritmo crittografico utilizzato per determinare l'esatta trasformazione del plaintext in ciphertext e viceversa.
- A parità di plaintext, il ciphertext cambia al variare della chiave. - A parità di plaintext e di chiave, il ciphertext è sempre il medesimo.
  • Crittografia: La disciplina che studia e progetta cifrari sicuri, efficaci ed efficienti.
  • Crittoanalisi: La disciplina che studia come scoprire il plaintext o la chiave partendo dal ciphertext e conoscendo il cifrario utilizzato.
  • Crittologia: crittografia + crittoanalisi.

Modello di Comunicazione Crittografica:

bash
A[Alice] -- m --> Ce
    Ce[Ce: m -> c] -- c --> Canale
    Canale[Canale di comunicazione] -- c --> Cd
    Cd[Cd: c -> m] -- m --> B[Bob]
    Canale -- c --> H[H]
  • Alice: mittente
  • Bob: ricevente
  • m: plaintext
  • C: cipher
  • Ce: Encryption
  • Cd: Decryption
  • c: ciphertext
  • H: crittoanalista (avversario)

2. Principio di Kerckhoffs: "Avoid Security Through Obscurity"

Uno dei principi fondamentali della cybersecurity nasce proprio in ambito crittografia ad opera del criptologo danese Auguste Kerckhoffs:

"Un metodo crittografico non deve basarsi sulla segretezza dell'algoritmo. Il metodo deve essere sicuro anche nel caso in cui l'algoritmo fosse noto. L'unica informazione da mantenersi segreta è la chiave di cifratura, da scegliersi in maniera completamente randomica (the secrecy of randomness)."

Corollario: Non inventare il nostro metodo crittografico. Scegliere quello/i più adatti alle nostre esigenze tra i cifrari già esistenti e classificati come robusti.

3. Classificazione dei Metodi Crittografici

bash
A[Metodi Crittografici] --> B(Reversibili)
    A --> C(Non Reversibili)

B --> D(Chiave Simmetrica) B --> E(Chiave Asimmetrica) B --> F(Senza Chiave)

D -- "1 chiave" --> G(Algoritmo di Cifratura/Decifratura) E -- "2 chiavi" --> H(Chiave Pubblica/Privata) F -- "0 chiavi" --> I(Esempio: ROT13 - NON SICURO)

C --> J(Funzioni di Hash) J -- "0 chiavi" --> K(Non possono essere decifrate)

3.1. Metodi Crittografici Reversibili con Chiave Simmetrica

  • In questi metodi l'algoritmo di cifratura ha due parametri: il messaggio da cifrare/decifrare e una chiave.
  • La stessa chiave è utilizzata sia per la codifica che per la decodifica.
  • Sono utilizzabili per ottenere la RISERVATEZZA delle informazioni a patto che la chiave rimanga segreta.
  • È consigliato che l'algoritmo sia di pubblico dominio (avoid security through obscurity).
bash
M[Messaggio in chiaro] --> A(Metodo crittografico)
    K[Chiave] --> A
    A -- "codifica" --> C[Messaggio cifrato]

C --> B(Metodo crittografico) K --> B B -- "decodifica" --> M_D[Messaggio in chiaro]

3.2. Metodi Crittografici Reversibili con Chiave Asimmetrica

  • In questi metodi l'algoritmo di cifratura utilizza due chiavi (A e B) generate in modo tale che:
- Cifrando con la chiave A la decodifica possa avvenire solo con la chiave B. - Cifrando con la chiave B la decodifica possa avvenire solo con la chiave A. - Conoscendo una delle due chiavi non sia possibile risalire all'altra.
bash
M[Messaggio in chiaro] --> A(Metodo crittografico)
    KA[Chiave A (B)] --> A
    A -- "codifica" --> C[Messaggio cifrato]

C --> B(Metodo crittografico) KB[Chiave B (A)] --> B B -- "decodifica" --> M_D[Messaggio in chiaro]

3.3. Funzioni Hash (Metodi Non Reversibili)

  • Le funzioni di Hash sono metodi crittografici non reversibili.
  • Pertanto, non possono essere utilizzate per cifrare dei messaggi (mancherebbe la decifratura).
  • Hanno però alcune caratteristiche interessanti che le rendono utili in molti contesti (es. integrità dei dati, firme digitali, memorizzazione di password).