CHE COS'È LA CASUALITÀ
No, seriamente, cos’è la casualità? Per rispondere a questa domanda, tratteremo lanci di monete, crittografia, lava lamps, Chainlink e persino meccanica quantistica.
Oggi vi parlerò della vera base della crittografia, l’argomento più pubblicamente trascurato e una delle sfide più difficili che i programmatori affrontano oggi nello spazio della sicurezza informatica e blockchain: la vera casualità.
La casualità è un concetto molto semplice: chiedi semplicemente a un amico di pensare a un numero casuale e te ne fornirà uno. È un concetto facile da afferrare, ma c’è un vasto (e molto interessante) mondo dietro le quinte.
Iniziamo con una relazione che è radicata nel nostro tessuto sociale: quella tra casualità ed equità. Se qualcosa o qualcuno viene scelto a caso per qualsiasi scopo (lotterie, bingo, la prossima carta sul tabellone, rosso o nero, ecc.) tendiamo a sentire che il processo è stato condotto in modo equo. In effetti, tendiamo a basarci su questa relazione per razionalizzare esiti perdenti (se era casuale, era equo dopotutto).
Oltre a lotterie e simili, ci sono situazioni nella nostra vita quotidiana in cui ricorriamo a questa relazione tra equità e casualità per prendere una decisione quando siamo in difficoltà. La metodologia più famosa per la decisione casuale è ovviamente il lancio della moneta.
Quando ci troviamo di fronte a un dilemma booleano incerto - cioè una decisione che coinvolge alternative dicotomiche come scegliere tra 2 diversi ristoranti per cenare - un lancio di moneta è generalmente percepito come equo perché non possiamo determinare l’esito in anticipo.
Ecco il punto: sebbene questo sia vero in una certa misura, non è del tutto accurato dire che non possiamo determinare l’esito in anticipo. Seguimi su questo perché la distinzione non è banale.
Perché qualcosa sia etichettato come casuale, l’esito deve essere non deterministico, il che significa che è impossibile determinare l’effetto correlativo tra varie variabili di partenza e gli esiti che producono.
Torniamo ai lanci di monete. A questo proposito, un lancio di moneta è sia casuale che non casuale allo stesso tempo - è davvero una questione di prospettiva!
Ciò che rende il lancio della moneta equo (per gli umani, cioè) - e quindi ciò che assicura un esito casuale - è l’ignoranza. Gli umani letteralmente ignorano lo stato delle variabili che influenzano l’esito del lancio. La dinamica causa-effetto delle forze correlate è chiara e nota, ma rimane al di fuori della percezione umana prima e durante il lancio.
Un lancio di moneta è un evento deterministico perché le variabili fisiche che influenzano l’esito del lancio sono note. Chiunque conosca lo stato di tutte le variabili rilevanti prima del lancio (forza applicata, forma della moneta, peso, rotazione, forza di gravità, caratteristiche del terreno, ecc.) può facilmente prevedere l’esito del lancio con precisione assoluta.
Ora, realisticamente, nessuno può determinare nessuna di quelle variabili quando una moneta viene lanciata all’improvviso sotto i nostri occhi, e il lancio è quindi percepito come equo tra gli umani - almeno, per problemi umani. (Ma se sei interessato, gli scienziati hanno scoperto che una moneta canadese da 50 centesimi ha una probabilità del 51% di atterrare con la testa in su. Nel frattempo, la moneta da 1 euro ha una probabilità dell’80% di atterrare con la testa in su, ma deve prima colpire il terreno - nessun recupero a mano aperta permesso.)
Se fossimo negli anni Settanta, quando gli affari si concludevano con una stretta di mano forte e uno sguardo severo, il lancio della moneta sarebbe più che affidabile come mezzo per produrre casualità. Ma nel mondo in cui viviamo oggi, dobbiamo spostare la nostra attenzione sul dominio digitale - il mondo dell’hardware e del software.
L’hardware e il software eseguono calcoli e garantiscono che per un dato input venga sempre prodotto un output identico - un’assunzione semplice ma estremamente importante. In effetti, quell’assunzione è la vera base del nostro mondo digitale; i programmatori e gli ingegneri sono in grado di eseguire compiti incredibilmente complessi e articolati basandosi solo su questa assunzione.
Data la nostra discussione sulla casualità, potresti chiederti:
Se l’hardware e il software sono destinati a essere estremamente prevedibili nel produrre un output coerente, come è possibile per un computer generare un numero casuale?
Molto semplicemente, non è possibile.
Quando consideri che tutti i cookie di accesso, la crittografia e qualsiasi forma di sicurezza digitale derivano essenzialmente dall’aggiunta di una variabile casuale a una specifica funzione, è sicuro dire che la forza del generatore di casualità che è integrato in ogni funzione costituisce la maggior parte della sicurezza su cui facciamo affidamento nelle nostre vite digitali.
I computer possono essere ridotti a poco più di un interruttore. O l’elettricità scorre e genera 1, o si ferma e genera 0 - un modello estremamente deterministico. Eppure, deve esserci un modo per produrre casualità nel mondo digitale, altrimenti i nostri attuali sistemi non funzionerebbero. Evidentemente, è stata trovata una soluzione.
Per essere onesti, l’affermazione precedente è ancora una volta imprecisa: ci sono soluzioni temporanee in atto, e ci sono modi solidi e provati per generare numeri che sono “abbastanza casuali”, ma le sfide legate alla casualità sono in continua evoluzione, e le soluzioni sono ben lontane dall’essere definitive.
Il primo metodo significativo e pronto per il mercato per produrre casualità ha comportato la registrazione di uno stato dell’hardware, l’uso del software per tradurre una sequenza degli stati dell’hardware in numeri e l’uso di quei numeri per generare valori casuali. Fin qui tutto bene, finché le persone non si sono rese conto che non era in realtà casuale perché uno stato dell’hardware è ancora in qualche modo deterministico - siano essi rumori delle ventole, audio, hdd o movimenti del mouse. In realtà, con lo stesso hardware e lo stesso set di operazioni da eseguire, un individuo potrebbe impiegare le stesse variabili di partenza e lo stesso ambiente per replicare lo stesso stato interno, calcolarlo con lo stesso algoritmo e generare lo stesso valore di output.
È anche importante considerare che un individuo non ha bisogno di essere in grado di replicare alcun numero alla perfezione, poiché i computer generano solo 1 e 0. Ad esempio, sarebbe sufficiente riconoscere che una certa funzione di casualità genera più 1 che 0 per un dato input. Già, un individuo ha guadagnato terreno nel decifrare il codice e ha effettivamente ridotto la sua casualità.
Da qui nasce il concetto di pseudocasualità. Qualcosa è pseudocasuale se è deterministico in teoria, ma può essere considerato casuale per uno scopo specifico perché c’è sufficiente ignoranza riguardo allo stato delle sue variabili di partenza.
Quando si tratta di computer, la pseudocasualità è protetta dalla capacità di gestire i controlli di accesso in modo molto efficiente: piuttosto che tentare di sviluppare qualche metodo ingegnoso e intelligente per manipolare uno stato dell’hardware che si traduce esattamente in specifici valori di output, viene costruita una difesa elaborata e impenetrabile intorno all’hardware (sia fisicamente che digitalmente) in modo che sia effettivamente impossibile conoscere lo stato delle variabili di partenza.
Quindi, mentre il numero di output non viene generato in modo casuale, è sufficientemente casuale per scopi umani perché non esiste un modo affidabile per penetrare le difese che proteggono le variabili di partenza prima che vengano inserite nell’algoritmo.
Ma zer0, e gli h4x0rs 1337???
Fare affidamento sugli errori umani per avere un sottoinsieme di numeri invece di valori casuali che rendono possibile decifrare il codice non può essere considerato un metodo affidabile.
Se scoprire che i lanci di monete non sono equi e i computer non possono generare valori casuali non ti ha scioccato, senti questa: per molti anni, Cloudflare, il servizio di sicurezza web amato che la maggior parte di noi apprezza senza mai sapere di usarlo, ha protetto la nostra infrastruttura digitale generando valori casuali da una lava lamp.
Potresti pensare: “Impossibile, devi essertelo inventato!” Beh, OK - non è una lava lamp - è un intero muro di lava lamp. E le lava lamp vengono ancora utilizzate con grande successo, poiché proteggono fino al 10% di Internet (e scommetto che la percentuale di siti che effettivamente utilizziamo e che integrano Cloudflare ammonta a molto più di 1 su 10). Le lava lamp sono nell’ufficio di San Francisco di Cloudfare, e il processo funziona così: le immagini vengono lette dal computer come un set molto grande - un set molto, molto grande - di cifre. La telecamera del computer registra i movimenti delle bolle di lava e li inserisce in un programma software che traduce i movimenti in numeri molto grandi che vengono poi utilizzati per rafforzare la casualità degli algoritmi.
Se ti senti abbastanza coraggioso da approfondire, dai un’occhiata al post del blog di Cloudflare.
Un’altra menzione d’onore con un fattore “wow” simile è random.org, il cui metodo per generare output casuali è altrettanto interessante. Utilizzano il rumore atmosferico come i temporali. È indubbiamente fantastico pensarci, e se guardi il sito c’è molto di più dei temporali; offrono risorse utili e informazioni sulla casualità oltre a strumenti con cui giocare e integrare nelle tue applicazioni.
Ok, ora passiamo alla blockchain (finalmente, giusto). Cosa c’è di più casuale di un hash di blocco? Ehh, è un’altra risposta spinosa e sfumata - ma questa è la casualità.
Ecco un esempio che mi piace dal blog ufficiale di Chainlink, “Chainlink VRF: Verifiable Randomness On-chain”.
L’articolo di Chainlink avverte che fare troppo affidamento sugli hash di blocco può essere dannoso. I minatori operano onestamente finché sono incentivati a farlo, ma le cose possono cambiare se ricevono ricompense aggiuntive per manipolare gli hash di blocco. Dall’articolo di Chainlink:
“..supponiamo che un contratto prenda decisioni basate sulla parità dell’ultimo bit nell’hash del blocco a una certa altezza. Sembra un esito 50/50, ma considera che un minatore (o una coalizione di minatori) che produce un terzo dei blocchi in media potrebbe decidere di scartare i blocchi vincenti per i quali l’ultimo bit dell’hash del blocco è uno, rinunciando alla ricompensa del blocco di circa 2-3 ETH. In questo caso, il minatore potrebbe pregiudicare l’esito zero da una probabilità affidabile del 50% a una probabilità di 2/3, portando alla perdita di fondi degli utenti da qualsiasi smart contract che si basa su questo metodo di generazione della casualità. Se il comportamento del bit zero del contratto avvantaggerebbe il minatore per più di 12-18 ETH, questo comportamento sarebbe economicamente razionale, creando un limite superiore per il valore che un contratto che utilizza questo metodo dovrebbe proteggere.”
Ma qual è l’alternativa? Purtroppo, richiede di fare affidamento su soluzioni off-chain dove attori malevoli o autorità centrali compromesse potrebbero manipolare i dati prima ancora che raggiungano la blockchain.
Abbiamo fatto molta strada, ma la domanda principale rimane ancora senza risposta: la vera casualità esiste o no?
Data tutte le argomentazioni che abbiamo trattato finora, ecco la risposta sorprendente: sì!
Gli scienziati hanno dimostrato che il decadimento quantistico è un evento casuale. Prendiamo ad esempio l’atomo di Carbonio-14 (l’ho scelto perché viene utilizzato in archeologia per datare i reperti, e ora hai qualcosa con cui impressionare i tuoi parenti a ferragosto- poi mi ringrazi).
Il Carbonio-14 completa la sua emivita in circa 5.730 anni - con una tolleranza di qualche decennio in entrambe le direzioni. Nel corso di un’emivita, 1 kg di Carbonio-14 diventa 0,5 kg. Ovviamente, se hai perso il 50% del tuo Carbonio-14 originale a causa del decadimento o se hai conservato il 50% del tuo Carbonio-14 è una questione di predisposizione personale. Ma se esamini gli atomi individuali di Carbonio-14 nel tempo, la probabilità che ciascun atomo individuale decada rispetto a qualsiasi altro in un dato momento è assolutamente casuale.
E quando dico assolutamente, non sto esagerando minimamente. Lo stesso Albert Einstein ebbe un esaurimento nervoso per questa teoria.
La famosa citazione di Einstein “lui [Dio] non gioca a dadi”, fu originariamente scritta in una risposta a una lettera di Max Born, la cui presentazione della teoria quantistica Einstein rifiutò aggressivamente. La linea di filosofia scientifica di Einstein era radicata nella causalità nativa della fisica newtoniana, che non offriva spazio per l’incertezza o la casualità di alcun tipo.
La prospettiva di Born ipotizzava che nel regno quantistico tutti gli esiti sono probabilistici - cioè, per un dato input un certo esito è probabile ma mai garantito, e non c’è modo di saperlo in anticipo. Alla fine, Born vinse, e i fisici quantistici di oggi accettano l’incertezza e la casualità come qualità intrinseche nel substrato universale.
Dalle lampade di lava a Chainlink a Einstein, siamo riusciti a affrontare una domanda pesante e difficile costruendo conoscenze su una serie di argomenti importanti e rilevanti.
La prossima volta che ti trovi a discutere di uno di questi argomenti, chiediti: “Qual è la forza di questo generatore di casualità?” Se poni la tua domanda universalmente ad alta voce, ti farà anche sembrare intelligente.
Buone vacanze
zer0