2009-05-21 12 views
5

Sto cercando di creare un CD-KEY univoco da inserire nella confezione del nostro prodotto, proprio come un normale CD-KEY trovato in scatole di software standard che gli utenti usano per registrare il prodotto.Algoritmo per generazione CD-KEY univoca con convalida

Tuttavia, non vendiamo software, stiamo vendendo kit di raccolta del DNA per scopi criminali e medici. Gli utenti riceveranno un kit di raccolta della saliva per posta con il CD-KEY su di esso e useranno tale CD-KEY per creare un account sul nostro sito Web e ottenere i loro risultati. I risultati del test saranno collegati al CD-KEY. Questo è l'unico modo in cui dovremo collegare i risultati ai pazienti. È quindi importante che non fallisca :)

Uno dei requisiti sarebbe che l'elenco di CD-KEYs deve essere sufficientemente "diffuso" a parte in modo che non vi sia alcuna possibilità che qualcuno inserisca un CD-KEY errato e ancora averlo approvato per qualcun altro kit, quindi mescolando due kit. Questo potrebbe costarci migliaia di dollari in responsabilità.

Ad esempio, esso non può essere una sequenza incrementale di numeri come
...
La ragione è che se qualcuno riceve il kit 00002, ma registra come da 000003 incidente, quindi i suoi risultati saranno abbinati a qualcun altro. Quindi deve essere come i numeri delle carte di credito ... A meno che non venga inserita una sequenza valida, le probabilità di colpire casualmente un numero valido sono 1 su un milione ...

Inoltre, vendiamo più di 50.000 kit all'anno a vari fornitori (chi genererà i propri CD-KEY utilizzando il nostro algoritmo), quindi non possiamo mantenere un elenco di tutti i CD-KEY precedentemente emessi per verificare la presenza di duplicati. L'algoritmo deve generare CD-KEY univoci.

Richiediamo inoltre la possibilità di verificare che il CD-KEY sia valido utilizzando un algoritmo di controllo rapido, in modo che possiamo informare l'utente se il codice inserito non è valido. Questo lascia fuori molti algoritmi di hashing o MD5. E non può essere un 128 bit perché, chi vorrebbe prendere quel tempo per digitarlo sullo schermo del computer?

Finora questo è quello che stavo pensando la struttura del CD-KEY finale sarà simile

(codice prodotto 4 char) - (4 char codice rivenditore) - (12 char unica, verificabile CD-KEY)

Es. 384A - gTLD - {4565 - FR54 - EDF3}


Per assicurare l'unicità delle chiavi, ho potuto includere la data corrente (20.090.521) come parte della fonte. Non genereremo chiavi univoche più di una volta alla settimana, quindi questo valore cambia abbastanza spesso allo scopo di un valore iniziale univoco.

Quale possibile algoritmo posso utilizzare per generare le chiavi univoche?

+2

La crittografia non è sicura, se la sicurezza si trova solo nell'algoritmo, che viene tenuto nascosto. :) –

+0

la chiave cd finale verrà crittografata utilizzando un algoritmo di tipo hash con una chiave segreta. –

risposta

6

Creare le corde <providername>000001, <providername>000002, ecc o qualsiasi altra cosa e cifrare con una chiave pubblica, e questo è il tuo "CD-KEY" che l'utente inserisce. Decrittografa il CD-KEY con la chiave privata e convalida che quando decrittografato ottieni una stringa valida con un nome di provider valido.

+0

Grazie, questo è esattamente quello che stavo cercando. –

+0

Non intendi cifrare con una chiave privata, decifrare con una chiave pubblica? – Cam

+0

No, sta usando i termini correttamente. Per i suoi scopi, può utilizzare la chiave privata o pubblica per eseguire la crittografia, purché utilizzi l'altro per eseguire la crittografia. Quando si utilizzano le chiavi pubbliche/private, se una delle azioni (crittografia/decrittografia) deve essere eseguita da un gruppo di persone, viene utilizzata la chiave pubblica. Da qui deriva il nome. In questo caso, non è realmente utilizzato. – Walter

1

I numeri di carta di credito utilizzano il numero Luhn algorithm per visualizzare qualcosa di simile.

+0

L'algoritmo di Verhoeff di riferimento sembra molto meglio in quanto rileverà errori di transpozition. – JonnyBoats

1

Uso SeriousBit Ellipter link per la protezione del software ma non vedo alcun motivo per cui è possibile generare un gruppo di chiavi univoche ogni settimana e noi la libreria per verificare la validità della chiave quando viene inserita nel sito Web. È inoltre possibile codificare i servizi opzionali nella chiave per controllare il modo in cui il campione viene elaborato dalla chiave (ovvero se si dispone di livelli di servizio diversi).

Poiché utilizza un metodo crittografato di generazione di chiavi in ​​primo luogo ed è relativamente economico, vale sicuramente la pena dare un'occhiata.

+0

Grazie per il suggerimento. Ho provato la pista e sono rimasto un po 'deluso. Se cambio il numero di serie alla fine 00001, 00002, ecc. Il cd-key che restituisce ha solo 1 valore in esso che è cambiato. –

-1

Generare GUID e catenarvi un numero casuale. GUID è garantito per essere unico e il numero casuale renderà improbabile colpire un codice accidentalmente. Basta non modificare il GUID in alcun modo o si potrebbe compromettere l'unicità.

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

+0

-1 GUID non sono protetti da crittografia. Molte implementazioni hanno parti deterministiche, come l'inclusione dell'indirizzo MAC del computer. Inoltre richiederà una connessione Internet per funzionare effettivamente. – Aron

1

finalmente si stabilirono per un cd-key di questa forma

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

ho usato l'algoritmo di cifre 11 ISBN checksum mod.

Problemi correlati