Ormai abbiamo insegnato al mondo delle AI come ragioniamo e loro sanno esattamente cosa e come fare perchè molti programi per testare l'entropia di chiavi e password usano usano alcuni pattern e dizionari, le AI pescano dallo scibile umano, riconoscono tastiere (le òàùè sono solo sulle tastiere italiane) e quindi sanno i principali movimenti orizzontali e verticali. Come vi dicevo in passato il modo migliore è quello di usare l'entropia casuale, bianca e realmente non riproducibile del vostro hardware. Per analizzare questi dati ed il miglior modo per ottenere una password con entropia reale è quello di usare Jitter sviluppato da muller Stefan. Su Linux è nativo su Kernel (!!!) su Microsoft ovviamente no. Quando su linux create una chiave con
dietro c'è proprio questa applicazione, non poca cosa.
Vediamo come fare su Windows, sempre usando powershell perchè non tutti hanno console python installata:
Per prima cosa aprite la console powershell ed attivate Anaconda che vi porta su ambiente python
chiudete powershell e riapritelo, vi compare la scritta (base) prima del PS C:\User se vi da errore, crasha o altro, caricate l'errore su una AI qualsiasi e vi guiderà all'installazione di miniconda o anaconda in funzione alle dipendenze o librerie che mancano. Potrei scriverne alcune ma possono essere decine, seguitele passo/passo e al 100% arriverete ad installarlo.
A questo punto quando vi compare (base) scrivete
e vi compaiono le tre >>> , subito dopo copiate lo script e premete invio:
import time, math
differenze = [(time.perf_counter_ns() + sum(math.sqrt(i) for i in range(50))) % 64 for _ in range(10000)]
conteggi = {d: differenze.count(d) for d in set(differenze)}
print(f"Campioni: {len(differenze)} | Entropia Reale: {sum(- (c/10000) * math.log2(c/10000) for c in conteggi.values()):.4f} bit")
Il codice utilizza la seerie di Shannon per trovare l'entropia del sistema hardware del vostro pc. Partendo da una limitazione consigliata dal Jitter di un valore di 64 legato alla dimensione dei blocchi di memoria. Avrete log2(64) = 6 bit massimi come asintoto di entropia per ogni carattere.
All'invio lo script genererà un piccolo calcolo matematico per misurare gli stati di attesa della RAM, tempi di risposta della CPU alle istruzioni, fluttuazioni di frequenza clock, ritardi microscopici dei transistor. Inizierà a raccogliere dati sulle fluttuazioni della cpu per determinare con quanta
entropia REALE potrà uscire ogni sinfolo carattere di una sequenza di caratteri casuali scelti con questo script.
Vi darà come risultato un valore di entropia REALE e non TEORICO.
A questo punto richiedete la password da 16 caratteri basata su questa entropia con 72 caratteri:
alfabeto = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()"; print("Password Generata:", "".join(alfabeto[int(time.perf_counter_ns() + sum(math.sqrt(i) for i in range(100))) % len(alfabeto)] for _ in range(16)))Quello che esce sarà una cosa del tipo:

Questa è
entropia reale e non teorica. Quindi abbiamo 10 mila misurazioni eseguite (come 10 mila lanci di dadi) per aver restituito 4 bit di entropia reale per ogni carattere, quindi 64 bit di entropia. Se la calcolassimo in maniera teorica 16xlog2(72) avremmo 100 bit.
In realtà questi 100 bit non sono veri perchè seguono dei pattern specifici che abbassano l'entropia teorica verso quella reale a 30/40 bit massimo. Una cosa per essere affidabile deve essere fuori dal controllo umano ed i tempi casuali macchina lo sono e questo lo dimostra.
Ricordate che le AI lavorano con pattern reali e pattern statistici combinati, non con pattern teorici, per questo è fondamentale capire questa differenza. Bisogna giocare con le stesse regole.
Con quello script di cui sopra avrete 64 bit puri, reali, incontestabili, quindi 2^64 combinazioni che sono 18 miliardi di miliardi di combinazioni che ci vorrebbero milioni di anni per risolverla per un pc casalingo e qualche mese per una rig organizzata (antieconomico).
Se volete più entropia REALE passate da 16 bit a 32 bit e arriverete a oltre 100 bit REALI. Basterà sostituire 16 con 32 nello script
alfabeto = .........in range(32)))
ma l'inserimento della password sarebbe parecchio noioso e facile sbagliare. Per la vostra passphrase invece sareste in una botte di ferro.