# Deriva de reloj

La deriva de reloj se refiere a varios fenómenos relacionados debido a los que un reloj no marcha exactamente a la misma velocidad que otro, lo que significa, que después de cierto tiempo la hora indicada por el reloj se irá separando (a esto se refiere la deriva) de la indicada por el otro.
Este fenómeno es aprovechado por las computadoras para construir generadores de números aleatorios y también puede ser utilizado para ataques de tiempo en criptografía.

## Deriva de reloj en relojes comunes

Los relojes ordinarios como los de pared o de pulsera generalmente se alejan del tiempo real, por lo que es necesario ajustarlos cada cierto tiempo.
La divergencia entre un reloj y el tiempo real se debe a:
* la calidad del reloj
* la potencia que obtiene de la batería
* la temperatura y otros factores ambientales
Un mismo reloj puede tener diferentes derivas de acuerdo a las circunstancias.
Los relojes mecánicos son mucho más imprecisos que los de cuarzo y generalmente están diseñados para adelantarse en lugar de atrasarse, lo que hace fácil el ajuste con el botón que detiene el mecanismo.
Los relojes más avanzados y algunos relojes mecánicos antiguos tienen algún mecanismo con el que el usuario puede ajustar la velocidad del reloj y así reducir la deriva. Por ejemplo, en los relojes de péndulo es posible hacer ajustes en la longitud del péndulo para controlar la deriva de reloj.

## Relojes atómicos, Tierra y relatividad

Los relojes atómicos son muy precisos y casi no sufren los efectos de este fenómeno. La rotación de la Tierra es mucho más imprecisa que la mayoría de los relojes atómicos modernos. Para mantener la sincronización entre el tiempo universal coordinado (UTC) y la rotación de la Tierra es necesario agregar un segundo intercalar algunos años.
Los efectos relativistas también afectan la deriva de reloj debido a la dilatación del tiempo. Esto se debe a que no existe un tiempo universal pues es relativo al observador. La relatividad especial describe como dos relojes en diferentes sistemas de referencia inercial tendrían una marcha más lenta vistos desde el otro sistema de referencia inercial.
Adicionalmente, la relatividad general produce dilatación gravitacional del tiempo, es decir, un reloj en un campo gravitatorio mayor parecerá marchar más lentamente. Es importante remarcar que es el tiempo mismo el afectado y no el funcionamiento del reloj. Ambos efectos han sido comprobados experimentalmente.
La dilatación del tiempo es importante, por ejemplo, los relojes en los satélites GPS se ven afectados debido a la gravedad reducida en la que se encuentran (logrando que los relojes a bordo parezcan ir más rápido que los terrestres) y tienen que utilizar cálculos de corrección relativista cuando transmiten datos a los usuarios, si no los realizaran las ubicaciones tendrían una falla de aproximadamente 1 km.

## Generadores de números aleatorios

Los programas de computadora ocupan regularmente números aleatorios, especialmente para criptografía. Existen varios métodos en los que la deriva de reloj puede utilizarse para construir generadores de números aleatorios (GNA).
Se puede construir un GNA en hardware utilizando dos osciladores de cristal independientes que tengan diferente frecuencia, 100 oscilaciones por segundo y 1 millón, por ejemplo. El más rápido de los dos oscilará 10 000 veces por cada oscilación del más lento, sin embargo, existirá una variación debida a la deriva de reloj que se puede usar para producir bits aleatorios. Una forma sencilla sería escoger un 0 cuando el excedente es par y un 1 para un excedente non.
Este GNA produciría alrededor de 100 bits aleatorios por segundo. Un sistema como este generalmente está sesgado, es decir, puede producir más ceros (0) que unos (1) o viceversa, por lo que es necesario “blanquear” algunos de estos bits aparentemente aleatorios para producir bits sin sesgo.
También se puede construir un GNA en software, para lo que se compara el reloj del sistema operativo (entre 100–1000 pasos por segundo) y la velocidad del CPU. Si el tiempo de sistema y el CPU utilizan dos osciladores de cristal independientes, la situación será muy similar al ejemplo anterior. En cambio, cuando utilizan el mismo oscilador de cristal el proceso/programa que realiza las mediciones de la deriva de reloj es “perturbado” por eventos impredecibles en el CPU como interrupciones y otros procesos y programas que se ejecutan al mismo tiempo. Aun así, el resultado será bastante bueno. Pueden considerarse números pseudoaleatorios, pero de cualquier modo satisfacen la mayoría de las necesidades en aplicaciones prácticas.
La mayoría de los GNA en hardware son más lentos que su contraparte en software, por lo que es usual utilizarlos solo para crear una buena semilla para un generador de números pseudoaleatorios (GNPA) o un generador de números pseudoaleatorios criptográficamente seguro (GNPACS).

## Ataques temporales

Durante el 2006, se publicó un ataque de canal lateral que explotaba el sesgo de reloj gracias al calentamiento del CPU. El atacante causaba una gran carga del CPU en un servidor seudónimo, con lo que causaba el calentamiento del CPU. El calor del CPU afecta el sesgo de reloj y es posible cuantificarlo al observar las timestamps (con la identidad real del servidor).