Programmazione a tempo costante
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.