Esta pregunta no encaja bien en muchas categorías, pero espero que alguien la haya encontrado antes.
Estoy desarrollando una API web que interactuará con un dispositivo físico. Cada nuevo dispositivo físico tiene su propia ID única, pero esas ID son adivinables (esencialmente son secuenciales a medida que salen de la línea de ensamblaje).
Cuando el dispositivo esté conectado a una computadora a través de USB, iniciaremos una aplicación cliente que el usuario habrá instalado y sincronizará los datos del dispositivo con la API. No podemos confiar en una relación 1: 1 de computadoras a dispositivos, un usuario puede sincronizar en múltiples máquinas o múltiples usuarios pueden sincronizar en la misma máquina.
Queremos autenticarnos en la API usando nada más que la ID del dispositivo, pero no quiero que alguien pueda falsificar la ID de otro usuario llamando a mi API directamente con una ID de dispositivo diferente.
Me pregunto qué podría hacer con la ID del dispositivo que podría permitirme usarla de manera segura para la autenticación.
Mi primer pensamiento fue cifrar la ID con una clave privada y luego compartir la clave privada con el software cliente. El software cliente podría entonces cifrar la identificación del dispositivo antes de llamar a la API y transmitir ese valor cifrado. El api lo compara con un valor almacenado y su bien, pero me preocupa que será difícil asegurar la clave privada cuando deba ser almacenada en la computadora cliente.
¿Pensamientos?