2009-05-26 129 views
15

¿Cuál es la mejor manera de generar una ID única de hardware en Microsoft Windows con C++ que no es fácilmente falsificable (con, por ejemplo, cambiar la dirección MAC)?Generación de un ID de hardware en Windows

+1

Define "fácilmente spoofable", es decir, ¿podría hacerlo tu abuela, solo la hacker de élite, o nadie en absoluto? – GalacticCowboy

Respuesta

16

Windows almacena un GUID único para cada máquina en el registro en:

HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\MachineGuid 
+0

Puede usar esto con el nombre de su programa como la clave de una función hash HMAC en CAPI. –

+2

¿Es eso estándar en TODAS las versiones de Windows? ¿Qué pasa con Mobile Windows? – JoshBerke

+0

La pregunta sería "¿Qué tan fácil es eso de parodiar ...?" – jesup

0

Hay varios identificadores asignados a los equipos que se pueden leer y combinarse para formar una clave de equipo. Por ejemplo, podría obtener la ID del disco duro donde está almacenado el software, la identificación del proceso, etc. Algunos de estos pueden establecerse más fácilmente que otros, pero parte de la fortaleza está en combinar varias piezas juntas que no son necesariamente lo suficientemente fuerte por sí mismos.

-1

Utilice Win32 System HDS API. No lea el registro, no tiene ningún sentido.

+0

¿Quiere compartir un enlace? HDS no aparece nada. –

1

Hay una variedad de "trucos", pero la única "respuesta física" real es "no, no hay solución".

Una "máquina" no es más que un bus pasivo con algo de hardware. Aunque cada pieza de hierro puede proporcionar un identificador de alguna manera utilizable, cada pieza de hierro puede ser reemplazada por un usuario por cualquier razón mala o buena de la que usted nunca pueda estar al tanto (por lo que si basa su funcionalidad en esto, crea problemas para su usuario, y por lo tanto -como consecuencia- cada vez que un hardware tiene que ser reemplazado/reinicializado/reconfigurado etc., etc.).

Ahora, si su problema es identificar una máquina en un contexto donde muchas máquinas tienen que interoperar juntas, esta es una función bien jugada por las direcciones MAC o IP o los nombres de host. Pero prepárese para la idea de que no son necesariamente constantes en un período de tiempo prolongado (así que evite codificarlos en lugar de "descubrir luego" en cualquiera de su puesta en marcha)

Si su problema es -en su lugar- identifique una instancia de software o una licencia, probablemente sea mejor que se concentre en otro tipo de solución: vende licencias a "usuarios" (¡es el usuario que tiene el dinero, no su computadora!), no a sus "máquinas" (que los usuarios deben ser libres de cambiar cuando lo necesiten sin su permiso, ya que no licenciaron el hardware o el sistema operativo ...), por lo tanto, su problema no es identificar una máquina, sino un USUARIO (considere que es igual la máquina puede ser un host para muchos usuarios y que un mismo usuario puede trabajar en una variedad de máquinas ..., no se puede asumir/imponer una relación 1: 1, sin encontrar tarde o temprano algún tipo de problema, cuando esta expresión idiomática encontrado a no más en forma).

La idea debería ser registrar a los usuarios en un sitio accesible, darles claves que genere y verificar que un mismo par de usuario/llave no se use temporalmente más de un número acordado de veces en un tiempo determinado período. Cuando las violaciones exceden, o las claves se vuelven viejas, solo bloquea y espera a que el usuario renueve.

Como puede ver, la respuesta depende principalmente del motivo de su pregunta, más que de la pregunta en sí.

Cuestiones relacionadas