2009-05-21 16 views
5

Estoy tratando de crear una CD-KEY única para poner en la caja de nuestro producto, como una CD-KEY normal en cajas de software estándar que los usuarios usan para registrar el producto.Algoritmo para la generación única de CD-KEY con validación

Sin embargo, no estamos vendiendo software, estamos vendiendo el kit de recolección de ADN para fines criminales y médicos. Los usuarios recibirán un kit de recolección de saliva por correo con el CD-KEY en él y usarán ese CD-KEY para crear una cuenta en nuestro sitio web y obtener sus resultados. Los resultados de la prueba se vincularán con la CD-KEY. Esta es la única forma en que tendremos que vincular los resultados a los pacientes. Por lo tanto, es importante que no falle :)

Uno de los requisitos sería que la lista de CD-KEYs debe estar suficientemente "separada" para que no haya posibilidad de que alguien ingrese una LLAVE de CD incorrecta y todavía lo tiene aprobado para el kit de otra persona, mezclando así dos kits. Eso podría costarnos miles de dólares en responsabilidad.

Por ejemplo, no puede haber una secuencia incremental de los números como
...
La razón es que si alguien recibe el kit de 00002, pero registra como por 000003 accidente, entonces sus resultados se compararán con otra persona. Por lo tanto, debe ser como los números de tarjetas de crédito ... A menos que se ingrese una secuencia válida, sus posibilidades de alcanzar aleatoriamente un número válido son 1 en un millón ...

Además, estamos vendiendo más de 50,000 kits anualmente a varios proveedores (quién generará sus propias CD-KEYS utilizando nuestro algoritmo) por lo que no podemos mantener una lista de todas las CD-KEYS previamente emitidas para verificar la existencia de duplicados. El algoritmo debe generar CD-KEY únicas.

También necesitamos la capacidad de verificar que la CD-KEY sea válida utilizando un algoritmo de verificación rápida, de modo que podamos informar al usuario si el código que ingresa no es válido. Esto deja de lado muchos algoritmos hash o MD5, creo. Y no puede ser de 128 bits porque, ¿quién se tomaría ese tiempo para escribirlo en la pantalla de la computadora?

Hasta el momento esto es lo que estaba pensando la estructura final-CD KEY se vería

(código de producto 4 char) - (código de distribuidor 4 char) - (12 Char único, verificable CD-KEY)

Ej. 384A - GTLD - {4565 - FR54 - EDF3}


Para asegurar la unicidad de las claves, podría incluir la fecha actual (20090521), como parte de la fuente. No generaremos claves únicas más de una vez a la semana, por lo que este valor cambia con suficiente frecuencia a los efectos de un valor inicial único.

¿Qué posible algoritmo puedo usar para generar las claves únicas?

+2

La criptografía no es segura, si su seguridad radica solo en el algoritmo, que se mantiene en secreto. :) –

+0

la clave final del CD se cifrará utilizando un algoritmo tipo hash con una clave secreta. –

Respuesta

6

Crear las cadenas <providername>000001, <providername>000002, etc., o lo que sea y los cifra con una clave pública, y ese es su "CD-KEY" que introduce el usuario. Desencripta la CD-KEY con la clave privada y valida que al descifrar obtienes una cadena válida con un nombre de proveedor válido.

+0

Gracias, esto es exactamente lo que estaba buscando. –

+0

¿No quiere decir cifrar con una clave privada, descifrar con una clave pública? – Cam

+0

No, él está usando los términos correctamente. Para sus propósitos, puede usar la clave privada o pública para hacer la encriptación, siempre y cuando use la otra para hacer la encriptación. Al usar claves públicas/privadas, si una de las acciones (cifrado/descifrado) debe ser realizada por un grupo de personas, la clave pública se usa para eso. De aquí provienen los nombres. En este caso, realmente no importa cuál es el utilizado. – Walter

1

Los números de tarjetas de crédito usan Luhn algorithm, es posible que desee ver algo similar a eso.

+0

La referencia del algoritmo de Verhoeff parece mucho mejor, ya que captará errores de transpozition. – JonnyBoats

1

utilizo SeriousBit Ellipter link para la protección del software, pero no veo ninguna razón por la que podría generar un grupo de claves únicas cada semana y nos la biblioteca para verificar la validez de la llave cuando entró en su sitio web. También puede codificar servicios opcionales en la clave que le permiten controlar cómo se procesa la muestra desde la clave (es decir, si tiene diferentes niveles de servicio).

Como utiliza un método cifrado de generación de claves en primer lugar y es relativamente barato, sin duda vale la pena mirarlo, diría yo.

+0

Gracias por la sugerencia. Probé el camino y me decepcionó un poco. Si cambio el número de serie al final de 00001, 00002, etc., la cd-key que devuelve tiene solo 1 valor que se cambia. –

-1

Genera GUID y te asigna un número aleatorio. Se garantiza que GUID es único y un número aleatorio hará que sea improbable que se pegue un código accidentalmente. Simplemente no modifique el GUID de ninguna manera o podría comprometer la singularidad.

http://msdn.microsoft.com/en-us/library/aa475087.aspx

+0

-1 Los GUID no son criptográficamente seguros. Muchas implementaciones tienen partes determinísticas, como la inclusión de la dirección MAC de la computadora. También requerirá una conexión a Internet para funcionar realmente. – Aron

1

finalmente se conformó con una clave de CD de esta forma

<TIMESTAMP>-<incremented number>-<8 char MD5 hash>-<checksumdigit> 

He utilizado el algoritmo de dígitos 11 ISBN suma de comprobación mod.

Cuestiones relacionadas