Herramientas de desarrollo · UUID generador
UUID basados en nombres (v3 y v5): ID deterministas de un espacio de nombres
· Antecedentes
uuid criptografía APIS del navegador
Cuando el mismo registro externo siempre debe obtener el mismo identificador, los UUID aleatorios no serán suficientes. Los UUID de la versión 3 y 5 codifican un espacio de nombres y un nombre en una ID estable; Esta publicación explica cómo y cuándo usarlos.
Reimportar el mismo cliente dos veces: el problema de duplicación que resuelven los ID deterministas
Una canalización de importación de datos recibe registros de clientes de un sistema externo con ID externos estables dentro de ese sistema. Si genera un nuevo UUID aleatorio para cada ejecución de importación, importar el mismo cliente dos veces produce dos identificadores diferentes y registros duplicados. Esta duplicación fluye hacia los sistemas de informes, facturación y soporte. Si obtiene un UUID del ID externo del cliente y un espacio de nombres estable que representa su origen de importación, cada importación produce el mismo UUID para el mismo cliente, lo que le permite identificar y actualizar los registros existentes. Este determinismo es la característica definitoria de los UUID v3 y v5: no se generan de forma independiente sino que se derivan de entradas, y la misma entrada siempre produce el UUID idéntico.
Espacio de nombres más nombre: cómo se concatena y aplica el hash a la entrada, y por qué el espacio de nombres evita colisiones entre diferentes fuentes
Un UUID v3 o v5 se deriva de tres componentes: un espacio de nombres UUID (normalmente predefinido), un nombre (cualquier cadena de bytes) y un algoritmo hash (MD5 para v3, SHA-1 para v5). Concatene los 16 bytes del espacio de nombres UUID con los UTF-8 bytes del nombre, haga un hash de la concatenación, tome los primeros 16 bytes de la salida del hash e interprete esos bytes como un UUID con la versión nibble establecida en 3 o 5. El espacio de nombres divide el espacio de ID: los UUID v5 del espacio de nombres DNS nunca chocan con los UUID v5 del espacio de nombres URL. RFC 9562 define cuatro espacios de nombres predefinidos: por nombre DNS, por URL, por OID y por nombre distinguido X.500. Las organizaciones pueden crear su propio espacio de nombres generando un UUID v4.
MD5 en v3 y SHA-1 en v5: por qué un hash debilitado es aceptable aquí, ya que la identificación no es un control de seguridad
La versión 3 usa MD5 y la versión 5 usa SHA-1, opciones que datan de sus fechas de especificación e implementaciones disponibles. Para los UUID basados en nombres, esta distinción es irrelevante porque la función hash no es un límite de seguridad ni un control criptográfico. El UUID no demuestra autenticidad o integridad; simplemente convierte una cadena de longitud variable en un valor fijo de 128 bits. El modelo de ataque es irrelevante porque los UUID se almacenan y comparan como valores opacos, no como pruebas o controles de seguridad. Las nuevas implementaciones deberían usar v5 (SHA-1) en lugar de v3 (MD5), no por razones imperiosas de seguridad sino porque v5 es el estándar moderno y está ampliamente disponible.
Los espacios de nombres predefinidos: DNS, URL, OID y X.500, y cuándo crear los tuyos propios.
RFC 9562 especifica exactamente cuatro UUID de espacio de nombres predefinidos con representaciones de bytes específicas: 6ba7b810-9dad-11d1-80b4-00c04fd430c8 para DNS, 6ba7b811-9dad-11d1-80b4-00c04fd430c8 para URL, 6ba7b812-9dad-11d1-80b4-00c04fd430c8 para OID y 6ba7b814-9dad-11d1-80b4-00c04fd430c8 para nombres distinguidos X.500. Una v5 UUID derivada del espacio de nombres DNS y el nombre www.example.com siempre será idéntica y nunca colisionará con una v5 UUID del espacio de nombres URL. El uso de un espacio de nombres predefinido garantiza la interoperabilidad: si varios equipos utilizan de forma independiente la versión 5 con el espacio de nombres DNS, generan UUID idénticos para los mismos nombres DNS. Elegir o crear un espacio de nombres es parte del diseño del esquema.
Ejemplo resuelto: derivar una versión 5 UUID conceptualmente a partir del espacio de nombres de la URL y una URL de registro, paso a paso
Derive una v5 UUID conceptualmente a partir del espacio de nombres URL y el nombre https://example.com/api/users/42. El espacio de nombres UUID como 16 bytes es 6b a7 b8 11 9d ad 11 d1 80 b4 00 c0 4f d4 30 c8. El nombre es la cadena UTF-8 https://example.com/api/users/42, que tiene 30 bytes. Concatene los bytes del espacio de nombres (16) y los bytes de nombre (30) para obtener 46 bytes en total. Calcule el hash SHA-1, generando un hash de 20 bytes. Tome los primeros 16 bytes e interpretelos como UUID con la versión nibble configurada en 5 y los bits variantes configurados en el estándar RFC. Calcularlo nuevamente con entradas idénticas produce el resultado idéntico. La mayoría de los desarrolladores utilizan su biblioteca de lenguaje UUID para calcular v5.
Dónde se rompe el patrón: cuando los nombres cambian, cuando el espacio de nombres es inconsistente entre los equipos y cuando las entradas son secretas
Los UUID basados en nombres suponen que el nombre es estable y coherente en todos los sistemas y ejecuciones de importación. Si el mismo registro externo tiene diferentes nombres en diferentes sistemas, generar v5 a partir de cada nombre produce UUID diferentes y no logra identificar a la misma persona. Si no se acuerda un espacio de nombres entre los equipos (cada equipo crea su propio espacio de nombres para lo que en realidad es la misma fuente), generan UUID diferentes y no logran hacer coincidir los registros. Si la entrada son datos confidenciales, generar un UUID v5 significa que UUID es un valor público y determinista que cualquiera puede buscar si conoce las entradas. El determinismo se rompe cuando las entradas cambian o las definiciones de espacios de nombres son inconsistentes.
Lo que esto no cubre: el generador ToolAcre se basa en CSPRNG, por lo que las identificaciones basadas en nombres necesitan la biblioteca UUID de su idioma
ToolAcre genera UUID v4 únicamente, extraídos del generador criptográficamente seguro del navegador para lograr independencia. La derivación UUID basada en nombres requiere la biblioteca de su idioma UUID o una implementación que calcule SHA-1 y formatee el resultado correctamente. Esta publicación explica el concepto y los casos de uso; La implementación de la generación v5 es sencilla en cualquier idioma con acceso a bibliotecas criptográficas estándar. La mecánica de derivación de v5 es simple; el desafío es integrarlo en un esquema de sistema donde el espacio de nombres sea estable, el nombre sea consistente y el enfoque esté bien documentado para su equipo. Los equipos de desarrollo deben documentar las opciones de espacio de nombres.
Conclusión: determinista cuando lo necesita, aleatorio en caso contrario: use v5 para asignaciones estables y el generador ToolAcre para todo lo que no debería ser adivinable.
Utilice v5 para asignaciones estables entre identificadores externos y sus registros internos. El determinismo evita importaciones duplicadas y hace que comparar registros entre sistemas sea sencillo y confiable. No utilice UUID basados en nombres para identificadores que deban ser imposibles de adivinar o para escenarios que requieran una gran confidencialidad y secretos. ToolAcre genera UUID v4 aleatorios para identificadores que deben ser independientes y distintos sin previsibilidad. Cuando sus sistemas necesitan ID deterministas que asignan entradas a identificadores fijos, su biblioteca de lenguaje UUID puede calcularlos. El determinismo es una característica poderosa cuando controlas la entrada.