Atac de temporització
![](http://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/TimingAttackPrinciple.png/310px-TimingAttackPrinciple.png)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/3/33/Histogram_of_cross-site_leaks_cache_timing_attack_example.png/310px-Histogram_of_cross-site_leaks_cache_timing_attack_example.png)
En criptografia, un atac de temps és un atac de canal lateral en el qual l'atacant intenta comprometre un sistema criptogràfic mitjançant l'anàlisi del temps que triga a executar algorismes criptogràfics. Cada operació lògica en un ordinador necessita temps per executar-se, i el temps pot variar segons l'entrada; amb mesures precises del temps per a cada operació, un atacant pot treballar enrere a l'entrada. Trobar secrets a través de la informació de cronometratge pot ser molt més fàcil que utilitzar la criptoanàlisi de parells de text senzill i xifrat coneguts. De vegades, la informació del temps es combina amb la criptoanàlisi per augmentar la taxa de fuga d'informació.[1]
La informació pot filtrar-se d'un sistema mitjançant la mesura del temps que es triga a respondre a determinades consultes. Fins a quin punt aquesta informació pot ajudar a un atacant depèn de moltes variables: el disseny del sistema criptogràfic, la CPU que executa el sistema, els algorismes utilitzats, els detalls d'implementació variats, les contramesures d'atac de temps, la precisió de les mesures de temps, etc. Els atacs de temps es poden aplicar a qualsevol algorisme que tingui una variació de temps depenent de les dades. L'eliminació de les dependències de temps és difícil en alguns algorismes que utilitzen operacions de baix nivell que sovint presenten un temps d'execució variat.
Els atacs de temps sovint es passen per alt en la fase de disseny perquè depenen molt de la implementació i es poden introduir sense voler amb les optimitzacions del compilador. Evitar atacs de temps implica dissenyar funcions de temps constant i provar acuradament el codi executable final.[2]
Evitació
Molts algorismes criptogràfics es poden implementar (o emmascarar amb un servidor intermediari) de manera que redueixi o elimina la informació de temps depenent de les dades, un algorisme de temps constant. Penseu en una implementació en la qual cada trucada a una subrutina sempre torna exactament en x segons, on x és el temps màxim que es triga a executar aquesta rutina en cada entrada autoritzada possible. En aquesta implementació, el temps de l'algoritme és menys probable que filtri informació sobre les dades subministrades a aquesta invocació.[3] L'inconvenient d'aquest enfocament és que el temps utilitzat per a totes les execucions es converteix en el del pitjor rendiment de la funció.
La dependència de les dades del temps pot derivar d'un dels següents: [4]
- Accés a la memòria no local, ja que la CPU pot guardar les dades a la memòria cau. El programari que s'executa en una CPU amb una memòria cau de dades mostrarà variacions de temps depenent de les dades com a resultat de la recerca de memòria a la memòria cau.
- Salts condicionals. Les CPU modernes intenten executar de manera especulativa els salts passats endevinant. Endevinar malament (no és estrany amb dades secretes essencialment aleatòries) comporta un gran retard mesurable a mesura que la CPU intenta retrocedir. Això requereix escriure codi sense branques.
- Algunes operacions matemàtiques "complicades", depenent del maquinari real de la CPU:
- La divisió sencer és gairebé sempre temps no constant. La CPU utilitza un bucle de microcodi que utilitza una ruta de codi diferent quan el divisor o el dividend és petit.
- Les CPU sense canvi de barril fan els canvis i les rotacions en un bucle, una posició a la vegada. Com a resultat, la quantitat a canviar no ha de ser secreta.
- Les CPU més antigues executen multiplicacions d'una manera similar a la divisió.
Exemples
El temps d'execució de l'algorisme de quadrat i multiplicació utilitzat en l'exponenciació modular depèn linealment del nombre de bits "1" de la clau. Tot i que el nombre d''1' bits per si sol no és prou informació per facilitar la recerca de la clau, es poden utilitzar execucions repetides amb la mateixa clau i diferents entrades per realitzar anàlisis de correlació estadística de la informació de temps per recuperar la clau completament, fins i tot per un atacant passiu. Les mesures de temporització observades sovint inclouen soroll (de fonts com ara la latència de la xarxa o les diferències d'accés a la unitat de disc des de l'accés a l'accés, i les tècniques de correcció d'errors utilitzades per recuperar-se dels errors de transmissió). No obstant això, els atacs de temporització són pràctics contra diversos algorismes de xifratge, inclosos RSA, ElGamal i l'algoritme de signatura digital.
Referències
- ↑ «Constant-Time Crypto» (en anglès). BearSSL. [Consulta: 10 gener 2017].
- ↑ «Constant-Time Crypto» (en anglès). BearSSL. [Consulta: 10 gener 2017].
- ↑ «A beginner's guide to constant-time cryptography» (en anglès). [Consulta: 9 maig 2021].
- ↑ «Constant-Time Crypto» (en anglès). BearSSL. [Consulta: 10 gener 2017].