Constante-tijdprogrammeren
Cryptocode schrijven waarvan de looptijd en het geheugentoegangspatroon niet van geheime waarden afhangen, zodat een stopwatch niet als sleutel kan fungeren.
De regels zijn weinig maar onhandig: geen vertakkingen op geheime data, geen tabelindices die uit de sleutel zijn afgeleid en geen instructies met variabele latentie op geheime operanden. De klassieke fout is een MAC controleren met memcmp, dat bij de eerste afwijking stopt en daarmee verklapt hoeveel bytes klopten. De juiste versie voert een XOR uit over elke byte, telt het resultaat op en kijkt er pas aan het eind naar.
Paul Kocher liet in 1996 zien dat timingaanvallen op RSA in de praktijk werken, en sindsdien bestaat het vakgebied grotendeels uit het vinden van nieuwe plekken waar tijd lekt. Het lastige is dat de compiler het doel niet deelt: een optimalisator die merkt dat het antwoord al vaststaat, bouwt gerust een vroege uitgang in je zorgvuldig vertakkingsvrije code. Daarom worden kritieke routines vaak in assembly geschreven, of achteraf gecontroleerd met gereedschap dat naar geheimafhankelijke vertakkingen zoekt.