Los GUID (Globally Unique Identifier) son una serie de 16 bytes generados pseudoaleatoriamente que se suelen utilizar para identificar de forma única objetos, dispositivos, componentes, o prácticamente cualquier cosa. Y, a diferencia de otros tipos de identificadores, el “única” debe ser interpretado de forma global, es decir, es virtualmente imposible que un GUID utilizado para un elemento se repita en otro equipo, lugar o sistema.
No hay magia negra en esto, es pura matemática. El número de combinaciones posibles es 2128; dicho así no parecen demasiadas, pero para que os hagáis una idea de las magnitudes, serían algo así como 3.400.000.000.000.000.000.000.000.000.000.000.000.000 valores distintos, número arriba o número abajo ;-). Si os parece difícil que os toque la lotería, supongo que podréis intuir lo poco probable que es que existan colisiones si decidimos seleccionar un GUID, por ejemplo, como campo clave en filas de una base de datos, o como nombres de fichero que queremos asegurar que sean únicos. Y así lo hemos hecho durante años.
Y todos los que los usamos seguiríamos tan felices si no fuera por ese pequeño matiz que he deslizado al comienzo del post: la pseudoaleatoriedad del algoritmo de generación utilizado, que va a provocar un colapso el próximo 11 de febrero debido al efecto denominado GUID Colliding Sequence.
Este efecto, que ocurre cada 999.999.999 segundos, de hecho ya apareció el 4 de junio de 1982 y afectó a algunos microordenadores y mainframes de la época. Por ejemplo, el famoso Spectrum se vio afectado y tuvieron que retirar todas las unidades un mes después de salir al mercado, y lo mismo ocurrió con el célebre IBM 3081, cuyos problemas de funcionamiento llegaron a tambalear a la industria tabaquera estadounidense, donde estaban muy implantados.
El problema se debe, básicamente, a un error en la definición del algoritmo para generación de GUIDs recogida por el estándar definido en la RFC 4122 que podéis leer aquí. Como se ver en el texto (pág 10), el almacén utilizado para guardar el número de intervalos de cien nanosegundos transcurridos desde las 0:00:00 del 15 de octubre de 1582 utiliza valores de 60 bits, y con un poco de calculadora veréis que el próximo 11 de febrero se llegará al valor máximo permitido antes de producirse de nuevo un overflow. Y combinando esto con el resto de elementos que se tienen en cuenta para generar los identificadores y las operaciones lógicas que se realizan entre ellos, existe más de un 92% de probabilidades de que los GUID generados dicho día colisionen entre sí.
Bueno, ¿y qué podemos hacer? Pues aparte de cruzar los dedos, la OMC (Organización Mundial del Comercio) recomienda observar, entre otras, las siguientes precauciones antes y durante el 11 de febrero. Algunas recomendaciones van dirigidas a profesionales de nuestro sector, y otras a los usuarios en general:
- Modificar todas las aplicaciones que usen GUIDs para identificar elementos, de forma que dejen de asumir su unicidad universal. Se recomienda crear factorías que, antes de retornar el control a funciones de orden superior, comprueben en un bucle la no existencia previa de los identificadores generados, volviendo a generar un GUID distinto cuando se detecte una colisión.
- Programar turnos de vigilancia de los sistemas, especialmente las bases de datos, durante las 24 horas del 11 de febrero. Programar alertas o triggers que nos avisen de duplicidades e inconsistencias en la información manejada.
- No publicar contenidos en blogs y redes sociales, pues habitualmente se referencian con un GUID (Twitter, Facebook, Pinterest y Yammer han confirmado este extremo) y podrían perderse.
- Por la misma razón, tampoco es recomendable subir archivos a servicios en la nube como Google Drive, Skydrive, Dropbox, Instagram o Picasa.
- No realizar compras, ni movimientos bancarios, ni, en general, transacciones que puedan estar almacenándose internamente utilizando GUIDs, porque podrían no guardarse correctamente y podría volatilizarse el dinero.
- No fabricar dispositivos que puedan utilizar GUIDs como identificadores únicos, como las direcciones MAC de las tarjetas de red o pens USB. Es decir, lo mejor es parar las fábricas.
- No iniciar procedimientos administrativos para evitar pérdidas de información, como presentar documentación en un Ayuntamiento, o justificantes en Hacienda. Otra consecuencia, aunque esta vez positiva, es que una multa de tráfico registrada ese día podría no llegarnos jamás, pues la DGT (Dirección General de Tráfico de España) utiliza GUIDs como identificadores 😉
- No usar firma electrónica, puesto que el hash puede contener trazas reconocibles y reproducibles por otros usuarios para realizar firmas en nuestro nombre.
- No adquirir participaciones de lotería o sorteos que sean generadas en máquinas expendedoras, pues podría darse el caso de que a todos los jugadores se asignen los mismos números y tendríamos que repartir los beneficios con un buen puñado de gente.
- … estas son las más destacables, pero podéis leer la lista completa en la web de la OMC.
Como curiosidad adicional, deciros que esto no pasaría de ser un puro problema técnico similar al ya vivido en el año 2000 si no fuera porque hace unos años el Consejo Europeo de Organizaciones Escépticas (sí, los mismos que ofrecieron un millón de dólares a quien demostrara tener poderes paranormales), ofrecieron la nada despreciable cantidad de quinientos mil euros a quien demostrara un caso real de repetición de un GUID. Si detectáis una duplicidad no dejéis de hacérsela llegar, porque podéis llevaros una buena alegría, aunque podréis imaginar también la que se va a liar en el buzón de correo de esta gente el 11 de febrero ;-DD
La siguiente vez que ocurra será el viernes 20 de octubre de 2045. A saber dónde andamos para entonces, así que, de momento, mejor preocuparnos exclusivamente por el problema que se avecina en un par de meses.
¡Suerte y mucho ojo!
Fuentes:
- Don’t use the guid field. Ever. Ever, ever.
- El 11 de febrero (Wikipedia)
- Daily mail: ‘World could be plunged into crisis in 2014’: Cambridge expert predicts ‘a great event’ will determine course of the century
- Doomsday prophecies
- Be Unique But Don’t Be A GUID
- 42: The answer to life, the universe and everything
- Problem with duplicate GUIDs
- GUID (Wikipedia)
- RFC 4122: A Universally Unique IDentifier (UUID) URN Namespace
Publicado en Variable not found con GUID 8deda7b6-021d-4c5f-8929-89eb40a73a91.
Nota para despistadillos: obviamente la noticia no es real, se trata simplemente de una broma del Día de los Inocentes. El próximo 11 de febrero podéis seguir usando GUIDs, fabricando dispositivos, comprando por internet, usando la firma electrónica y participando en sorteos. Ah, y las multas de tráfico os llegarán a casa, no os confiéis :-DDD