Lessico IT › Sicurezza › Programmazione a tempo costante

Programmazione a tempo costante

Sicurezza Svenska → Aggiornato: 2026-10-14

Scrivere codice crittografico il cui tempo di esecuzione e i cui accessi alla memoria non dipendono dai valori segreti, così che un cronometro non possa sostituirsi alla chiave.

Le regole sono poche ma scomode: nessun salto condizionato su dati segreti, nessun indice di tabella derivato dalla chiave, nessuna istruzione a latenza variabile su operandi segreti. L'errore classico è verificare un MAC con memcmp, che si ferma al primo byte diverso e così rivela quanti byte erano giusti. La versione corretta applica lo XOR a ogni byte, accumula il risultato e lo esamina solo alla fine.

Paul Kocher dimostrò nel 1996 che gli attacchi di timing contro RSA funzionano nella pratica, e da allora il settore è consistito in buona parte nello scoprire nuovi punti in cui il tempo trapela. La difficoltà è che il compilatore non condivide l'obiettivo: un ottimizzatore che si accorge che la risposta è già nota inserirà volentieri un'uscita anticipata nel vostro codice accuratamente privo di salti. Per questo le routine critiche si scrivono spesso in assembly, o si controllano a posteriori con strumenti che cercano salti dipendenti da segreti.

← Torna al lessico