Ir al contenido

Vinculación y traslado de licencias entre dispositivos

Con una licencia de un dispositivo, copiar el software y la caché a otro equipo normal no transfiere la autorización original.

Device binding vs user account licensing

Account sign-in identifies the customer and their purchases; device binding determines which machine may use the license. After sign-in, the SDK must still verify device identity, signatures and feature entitlements. Copying account session data or cache files to another computer does not replace that computer's own license verification.

¿Cómo identifica el SDK el equipo?

Al iniciar, el SDK lee la identidad del sistema y calcula un hash con el ID del producto. La firma del servidor incluye ese hash y la validación local también lo comprueba.

Windows lee MachineGuid, Linux machine-id y macOS IOPlatformUUID. Solo se envía el hash calculado, no la identidad original. El campo antiguo de configuración device_id no reemplaza la identidad local real.

¿Qué pasa si se copian los archivos de A a B?

  1. A activa y recibe firma vinculada al hash de A.
  2. B lee identidad propia, obtiene otro hash y rechaza caché de A.
  3. B debe activarse online. Con límite de un dispositivo y A aún vinculado, el servidor rechaza B.

¿Cómo cambia de equipo el cliente?

El cliente desvincula el equipo antiguo y activa el nuevo. Si el antiguo se averió, libéralo en Activaciones de dispositivos de la consola. El cambio no reinicia la caducidad.

Reinstalar el sistema puede cambiar su identidad y exigir activar un dispositivo nuevo. Clonar todo el sistema, falsificar identidad o modificar el cliente son ataques más fuertes; este hash por sí solo no garantiza impedirlos.

Con offline prolongado, la firma de A no sabe al instante que se liberó. Necesita una petición correcta al servidor para actualizar ese estado. Más tiempo offline retrasa las restricciones remotas.

Hash de dispositivo entre lenguajes
Los nueve SDK usan el mismo algoritmo
SHA256(UTF8(
  "LicenovaDevice/v2\n"
  + lower(product_id) + "\n"
  + lower(trim(OS_machine_identity))
))