2009-04-03 10 views
40

Me pregunto cómo funcionan los generadores de números de serie y el validador. Mi objetivo sería generar un número de serie con cinco partes que constan solo de números y letras.Por curiosidad: ¿Cómo se generan los números de serie? Sugerencias, Algoritmos?

Me gusta escribir como un hobby y no me llamaría un programador profesional. Sin embargo, estoy muy interesado en cómo esas funciones interesantes funcionan técnicamente para ampliar mi mente.

Se agradecen todos los consejos, experiencias o algoritmos escritos.

+0

¿en qué contexto se usaría el número de serie? ¿Es solo un identificador o está destinado a ser algo seguro (como la clave de registro de Windows)? – TofuBeer

+2

Hagas lo que hagas, intenta hacer que el dígito más a la izquierda no sea cero para que los "códigos" no se interpreten como números y se dejen desaparecer cuando se importen a Excel y a otros formatos. Descubrí que ese es uno de los mayores problemas en mi industria, donde los utilizamos mucho. Hemos aprendido a comenzar todos los números de serie con un 1. Creo que recientemente hubo un videojuego que publicó números de serie malos y es posible que hayan tenido un problema como este. –

Respuesta

16

Well, números tradicionalmente serie son números seriales ... Entonces, el primer ejemplo de la línea de producción es sn 0001, luego el siguiente es 0002 y el siguiente es 0003. Creo que la mayoría de la gente puede resolver ese algoritmo.

Creo que en realidad está preguntando sobre claves de producto, que utilizan un mecanismo similar a la firma de mensajes de clave pública: la clave del producto es el valor cifrado, el programa tiene una clave pública que le permite verificar que la clave es válida , pero solo el proveedor del software tiene la clave secreta para 'firmar' la clave del producto. El artículo de wikipedia en digital signatures tiene el mecanismo general; la única condición es que para que el usuario ingrese una clave tiene que ser bastante más corta que una PGP.

Si está limitado a un número de serie muy corto, entonces es poco probable que sea lo suficientemente grande como para almacenar el resultado de un mecanismo de firma típico, en cuyo caso es bastante común usar alguna variante de suma de comprobación en él. Eso tiene la desventaja de ser fácil de aplicar ingeniería inversa: su seguridad se debe a que el algoritmo es 'secreto' en lugar de a las propiedades criptográficas. Cada producto tendría su propio algoritmo, y generalmente se rajan bastante rápido.

Si tiene 5 bloques de 5 caracteres, tiene 36^25 combinaciones, que son más grandes que 2^128, entonces podría usar uno de los algoritmos de firma digital estándar que genera 128 bits, luego convierta ese valor a base 36.

15

Obtenga usted mismo un public/private key pair. Genere sequence numbers (10000, 20000, 30000, 40000, ....) que tengan alguna característica de identificación (por ejemplo, divisible por 10000). Encripta ese número usando tu clave privada. Codifique ese valor usando algún sistema legible por humanos (base 32 o 64) y separe los valores en grupos para que sea más fácil de analizar. Distribuya el número de serie codificado con cada venta de su aplicación.

En algún lugar de la aplicación, tiene la clave pública escondida. Cuando un usuario ingresa un número de serie codificado, primero decodifícalo de nuevo en binario. Usa la clave pública para descifrarlo. Compruebe que es divisible por 10000.

Lo más difícil es la implementación: ocultar la clave pública en la aplicación para que no se pueda reemplazar fácilmente. Elegir una secuencia que pueda identificar fácilmente, pero que no se quede sin valores. Obfuscating la aplicación para que alguien no pueda omitir fácilmente todo el cheque. etc ...

+0

Bueno, si puede descifrarlo, ya es una garantía de que fue firmado digitalmente por su clave privada, por lo que realmente no importa cuál es el contenido, si su algoritmo de descifrado es capaz de descifrar correctamente. –

+1

La mayoría de las técnicas de descifrado le permitirán ejecutar cualquier valor a través del algoritmo de descifrado. Para la mayoría de las entradas aleatorias, obtendrás resultados aleatorios. Con muchos algoritmos, dado un fragmento de datos aleatorios, hay una clave que descifrará esa cadena a cualquier otra cadena. – Eclipse

3

Puede usar un generador de números aleatorios y almacenar las salidas en una base de datos. En caso de solicitud de activación, simplemente verifique si el número de serie está en la base de datos y marque el número de serie como "usado".

Por supuesto, esto necesita una conexión a Internet, pero es bueno contra el método "comprar una vez, usar muchas, muchas veces" y en caso de llamada de soporte, puede reactivar esa serie para otra reinstalación.

Edición posterior: También debe usar para la verificación de Internet una conexión encriptada y autenticada, como una conexión HTTPS.

3

Un GUID ("identificador único global") podría ser una manera fácil de resolver esto:

http://en.wikipedia.org/wiki/Globally_Unique_Identifier

GUID contienen 16 bytes y son más comúnmente escritos en el texto como una secuencia de dígitos hexadecimales como :

3F2504E0-4F89-11D3-9A0C-0305E82C3301 

y la mayoría de los lenguajes de programación deben ser capaces de generar un GUID con una de las bibliotecas disponibles.

+0

Downvoted, porque los GUID no se generan "aleatoriamente". Se garantiza que son únicos, no aleatorios, y por lo tanto no son adecuados para usar como números de serie. – ine

+8

La palabra 'aleatorio' no aparece en la especificación. 'Serial' sin embargo, lo hace, y esto es incluso lo contrario de al azar. Entonces, ¿cuál es su razón para la votación negativa? – mjn

+0

El primer dígito en el tercer grupo, en el ejemplo '1', indicaría el algoritmo utilizado. La versión 1 contendría la dirección MAC de la entidad generadora, mientras que la versión 4 se basa en un número pseudoaleatorio. – sisve

Cuestiones relacionadas