Non puoi proteggere contro il tuo host, che si tratti del sistema operativo, del processore o del BIOS.
Vedi anche le leggi 1 e 2 della sicurezza.
Questo non significa però che non ci sia modo di difendersi da almeno alcuni attacchi software. Ricorda però che: Se vuoi davvero proteggere la chiave, devi utilizzare tecnologie rinforzate con l'hardware come HSM , TPM , smart card e SGX . I primi due metodi che descriverò sono basilari e sono fatti da ogni libreria crittografica un po 'decente, questi ultimi sono più esotici.
Difesa n. 1: ripulisci sempre dietro di te!
Generalmente è considerata la migliore prassi per ripulire sempre tutto il disastro che si crea nei programmi. Questo vale anche per l'ingegneria della sicurezza e quindi dovresti davvero azzerare in modo affidabile ogni chiave quando non ne hai più bisogno . Tieni presente che un semplice C-style memset(pointer,0,size);
non farà il trucco perché il compilatore sicuramente ottimizzerà questo aspetto, dovresti usare le funzioni dedicate per masterizzare le tue chiavi in memoria (Windows le offre e puoi scriverle tu stesso - in assembler o come un semplice ciclo).
Difesa n. 2: non smettere mai di guardare le tue chiavi!
I moderni sistemi operativi vengono comunemente forniti con una funzionalità chiamata "swap-memory", che è ottima per gli sviluppatori di applicazioni, in quanto ciò può aumentare la dimensione della RAM quando necessario scambiando le pagine sul disco rigido. Questo però è davvero dannoso per la sicurezza, perché pulire le chiavi dopo che sono state scambiate tende ad essere piuttosto difficile e quindi dovresti dire al tuo sistema operativo tramite una chiamata di funzione appropriata a tenere sempre le chiavi in (fisico ed effimero) RAM .
Le seguenti difese sono più avanzate ed è meno probabile che vengano schierate ovunque. Tuttavia sono elencati in Schneier's Cryptography Engineering e possono difenderti in alcune circostanze. Lascia che sia l' teryil tinfoil a iniziare!
Difesa n. 3: crittografare tutte le cose!
Potresti aver sentito parlare di "attacchi con avvio a freddo". Fondamentalmente sono lo scenario (improbabile) che un utente malintenzionato possa mettere le mani sul tuo computer, raffreddarlo (più o meno) ed estrarre le chiavi crittografiche segrete per diversi secondi o addirittura ore. È molto difficile difendersi da tali attacchi (che includono anche dump di memoria (automatici)). Ecco perché è stato inventato il Boojum (questo è il nome effettivo!)
Dire, hai le chiavi segrete k,l,m,n
, ciascuna di lunghezza 128-bit. Ora crei un'altra chiave segreta i
, che utilizzi per crittografare AES k,l,m,n
in modalità CTR o GCM (l'autenticazione non conta troppo qui). Ora ogni volta che hai bisogno di k,l,m,n
, basta decodificarlo e utilizzarlo, quindi ricodificarlo o cancellare la copia temporanea. La domanda ora diventa "Come proteggere i
?" Con Boojum , crei una stringa casuale R
nella RAM in una posizione di memoria fisicamente distante rispetto a i
. hash R
e XOR con i
e memorizzalo. Ogni volta che hai bisogno di i
, hai di nuovo hash R
e XOR con il valore memorizzato per recuperarlo. Ovviamente questo non è troppo sicuro se si mantiene sempre R
lo stesso, poiché la RAM alla fine "impara" il valore e lo mantiene più a lungo, quindi è necessario aggiornare questo spesso . La si aggiorna, selezionando (facoltativamente) una nuova posizione di memoria e generando un nuovo R'
e memorizzando R' XOR R
nella (nuova) posizione in memoria. Ora smascherate i
usando hash di R
e cancellate "nuovo" R
e mascherate i
di nuovo. Ovviamente si elimina il vecchio R
. Si consiglia di ripetere questo processo di aggiornamento frequentemente , ad es. ogni secondo.