El problema
En nuestro sistema, los usuarios se identifican mediante una clave compuesta. Nos gustaría diseñar un esquema para convertir de manera determinista esta clave compuesta en un UUID.
¿Soluciones?
La primera sugerencia obvia sería UUIDv5, sin embargo:
- Se basa en SHA-1, que entiendo que ya no se recomienda como un algoritmo de hash.
- Parece que se requiere que una parte de la entrada sea un UUID, pero ninguna de las partes de la clave compuesta es.
La siguiente opción obvia sería usar un hash SHA-256 y "comprimirlo" en 128 bits. Esto plantea 2 preguntas:
- ¿Cómo hacerlo? (¿Tomar la primera o la segunda mitad? ¿XOR la primera mitad con la segunda mitad? ¿Alguna otra forma mejor?)
- ¿Es una mala práctica usar todos los 128 bits de un UUID en lugar de usar los bits reservados para la variante y la versión?