Prima vengono le fondamenta, Capitolo 0: Come iniziare a comprendere un sistema digitale complesso
Questo articolo fa parte della mia serie di articoli su come diventare hackers. Per maggiori informazioni rimando al blog post originale, che contiene tutti gli altri post della serie: Come si diventa un Hacker?
Buona lettura!
Nel precedente articolo della serie (Chi sono gli Hackers?) abbiamo stabilito che nella sua essenza un hacker è guidato dalla propria curiosità per capire nel modo più dettagliato possibile il funzionamento di un sistema complesso.
Ora, per quanto complessi potrebbero sembrare a prima vista i sistemi digitali che utilizziamo tutti i giorni, dai computer agli smartphones, è solida la speranza che, potenzialmente, sia possibile capire in profondità il loro funzionamento interno. Tutti questi sistemi infatti condividono una preziosa caratteristica: possono essere ridotti alla somma delle loro parti. Se ci si concentra sulle singole parti, che per costruzione sono più semplici da capire, e se si analizza come queste parti sono combinate tra loro, ecco che si è in grado di capire anche il funzionamento del tutto.
Per iniziare a capire un sistema dobbiamo quindi iniziare a capire le parti di cui il sistema è composto. Ed è proprio qui che entrano in gioco le fondamenta: esattamente come la solidità di un edificio si riduce alla solidità delle sue fondamenta, nello stesso modo una buona comprensione di un sistema complesso necessità una buona comprensione delle parti elementari che compongono tale sistema.
In realtà, dato che le fondamenta da noi considerate non sono solamente oggetti fisici o digitali, ma anche idee astratte, le nostre “fondamenta” rappresentano un concetto abbastanza astratto a loro volta, che può avere diverse interpretazione:
-
Come le parti reali (software) più semplici di un sistema complesso (altro software).
-
Come gli strumenti (sia software che concettuali) fondamentali da utilizzare al fine di comprendere un sistema complesso.
Un passo necessario per diventare un buon hacker è quindi quello di sviluppare delle solide fondamenta di informatica. È difficile caratterizzare esattamente quali sono queste “fondamenta”, ma dall’esperienza personale che ho sviluppato secondo me per imparare bene l’informatica da un punto di vista della sicurezza bisogna prima avere una infarinatura nei seguenti campi:
-
Matematica Discreta
-
Teoria degli Algoritmi e delle Strutture Dati
-
Programmazione classica
-
Sistemi operativi
-
Protocolli e Reti
-
Crittografia
-
Database
-
Programmazione web
Voglio subito precisare che il particolare ordine riportato non riflette un ordinamento assoluto e rigido, ma piuttosto una scelta pragmatica e forzata. Molte cose sono state omesse per non rendere il tutto troppo dispersivo. Tra quelle inserite poi, non esiste un ordine assoluto in cui studiarle. Possono benissimo essere studiate assieme, o una per volta. Dipende da persona a persona.
Certo è vero anche che esistono determinate dipendenze tra queste materie che, se non rispettate, potrebbero confondere molto durante l’apprendimento.
Ad esempio, è molto difficile capire cosa sta succedendo in una applicazione web, se non si sa nulla di programmazione, e di come funzionano i sistemi operativi, i protocolli di rete e i database. Se poi vogliamo capire in dettaglio quello che sta succedendo quando ci colleghiamo ad un sito che gira con HTTPS, e perché questo è preferibile ad un semplice sito in HTTP, abbiamo anche bisogno di un certo livello di conoscenza della crittografia, che a sua volta necessita di alcuni semplici ma importanti concetti ripresi dalla matematica discreta.
Insomma, non appena “apriamo il coperchio” e cerchiamo di capire veramente cosa sta succedendo dietro alla tecnologia che utilizziamo, ecco che le conoscenze richieste sono tante e varie.
Possiamo rappresentare le dipendenze appena menzionate tramite la seguente struttura.

Questa struttura in informatica è chiamata grafo, ed è un particolare esempio di struttura dati, termine informatico che descrive un particolare modo di organizzare un insieme di dati relazionati tra loro. I nodi del grafo, le ellissi nel disegno precedente, rappresentano le materie riportate in alto. Le freccie tra un nodo e l’altro invece, detti archi del grafo, rappresentano una relazione di dipendenza. Ad esempio, la freccia

ci sta dicendo che per capire la crittografia dobbiamo avere delle buone conoscenze della matematica discreta.
Anche se non sarà possibile dare il giusto spazio a ciascuna delle materie menzionate, nel passare dei mesi scriverò un articolo per materia.
Il mio intento nello scrivere questi articoli sarà sempre quello di
-
Far capire l’essenza della materia;
-
Far capire come la materie in discussione è relazionata alle altre qui menzionate;
-
Far capire l’importanza che ogni materia ha rispetto all’obiettivo finale che stiamo cercando di raggiungere: comprendere un sistema digitale complesso.
In ultima analisi, spero che questi articoli aiuteranno qualcuno acapire un po’ meglio qual è la sua strada.