[security] Come vengono generate le chiavi di licenza del software?



Answers

Quando ho originariamente scritto questa risposta, si presupponeva che la domanda riguardasse la convalida "offline" delle chiavi di licenza. La maggior parte delle altre risposte riguarda la verifica online, che è molto più semplice da gestire (la maggior parte della logica può essere eseguita dal lato server).

Con la verifica offline la cosa più difficile è assicurarti di poter generare un numero enorme di chiavi di licenza univoche e mantenere comunque un algoritmo forte che non è facilmente compromesso (come una semplice cifra di controllo)

Non sono molto esperto di matematica, ma mi ha colpito il fatto che un modo per farlo è usare una funzione matematica che traccia un grafico

La linea tracciata può avere (se usi una frequenza sufficientemente precisa) migliaia di punti unici, quindi puoi generare chiavi selezionando punti casuali su quel grafico e codificando i valori in qualche modo

Ad esempio, tracciamo questo grafico, selezioniamo quattro punti e codifichiamo in una stringa come "0, -500; 100, -300; 200, -100; 100,600"

Cifreremo la stringa con una chiave conosciuta e fissa (orribilmente debole, ma ha uno scopo), quindi convertiamo i byte risultanti con Base32 per generare la chiave finale

L'applicazione può quindi invertire questo processo (da base32 a numero reale, decrittografare, decodificare i punti) e quindi verificare che ognuno di questi punti si trovi sul nostro grafico segreto.

È una quantità piuttosto piccola di codice che consente di generare un numero enorme di chiavi univoche e valide

È comunque molta sicurezza per oscurità. Chiunque abbia il tempo di disassemblare il codice sarebbe in grado di trovare la funzione grafica e le chiavi di crittografia, quindi prendere in giro un generatore di chiavi, ma è probabilmente molto utile per rallentare la pirateria casuale.

Question

Le chiavi di licenza sono lo standard defacto come misura antipirateria. Ad essere onesti, questo mi colpisce come (in) Security Through Obscurity , anche se non ho idea di come vengano generate le chiavi di licenza. Qual è un buon esempio (sicuro) di generazione della chiave di licenza? Quale primitiva crittografica (se esiste) sta usando? È un messaggio digest? In caso affermativo, quali dati avrebbero hashing? Quali metodi impiegano gli sviluppatori per rendere difficile ai cracker costruire i propri generatori di chiavi? Come vengono creati i generatori di chiavi?




Non ho alcuna esperienza con ciò che le persone effettivamente fanno per generare le chiavi del CD, ma (presumendo che tu non voglia intraprendere la strada dell'attivazione online) ecco alcuni modi in cui si potrebbe fare una chiave:

  • Richiedere che il numero sia divisibile per (diciamo) 17. Trivial da indovinare, se si ha accesso a molte chiavi, ma la maggior parte delle potenziali stringhe non sarà valida. Simile richiederebbe che il checksum della chiave corrisponda a un valore noto.

  • Richiedere che la prima metà della chiave, quando concatenata con un valore noto, si abbassi alla seconda metà della chiave. Meglio, ma il programma contiene ancora tutte le informazioni necessarie per generare chiavi e per convalidarle.

  • Genera chiavi crittografando (con una chiave privata) un valore noto + nonce. Questo può essere verificato decifrando usando la chiave pubblica corrispondente e verificando il valore conosciuto. Il programma ora dispone di informazioni sufficienti per verificare la chiave senza essere in grado di generare chiavi.

Questi sono ancora tutti aperti agli attacchi: il programma è ancora lì e può essere riparato per bypassare il controllo. Cleverer potrebbe essere quello di crittografare parte del programma utilizzando il valore noto dal mio terzo metodo, piuttosto che memorizzare il valore nel programma. In questo modo dovresti trovare una copia della chiave prima di poter decifrare il programma, ma è ancora vulnerabile alla copia una volta decrittografata e ad una persona che prende la sua copia legittima e la usa per consentire a tutti gli altri di accedere al software.




Se non si è particolarmente interessati alla lunghezza della chiave, un metodo piuttosto provato e vero è l'uso della crittografia a chiave pubblica e privata.

Essenzialmente hanno un qualche tipo di nonce e una firma fissa.

Ad esempio: 0001-123456789

Dove 0001 è il tuo nonce e 123456789 è la tua firma fissa.

Quindi crittografalo usando la tua chiave privata per ottenere la tua chiave CD che è qualcosa come: ABCDEF9876543210

Quindi distribuisci la chiave pubblica con la tua applicazione. La chiave pubblica può essere utilizzata per decodificare la chiave CD "ABCDEF9876543210", che viene quindi verificata la parte di firma fissa di.

Ciò impedisce quindi a qualcuno di indovinare qual è la chiave del CD per il nonce 0002 perché non hanno la chiave privata.

L'unico aspetto negativo è che le chiavi del tuo CD saranno piuttosto lunghe quando si usano le chiavi private / pubbliche a 1024 bit. È inoltre necessario scegliere un nonce abbastanza a lungo in modo da non crittografare una quantità insignificante di informazioni.

Il lato positivo è che questo metodo funziona senza "attivazione" e puoi usare cose come un indirizzo email o il nome del licenziatario come nonce.




Tutti i CD copiano solo gli algoritmi di protezione degli utenti onesti, senza fornire alcuna protezione contro la pirateria.

Il "pirata" deve solo avere accesso a un cd legittimo e al suo codice di accesso, quindi può fare n copie e distribuirle.

Non importa quanto sicuro sia il codice crittograficamente protetto, è necessario fornirlo con il CD in testo normale o un utente legittimo non può attivare il software.

Gli schemi più sicuri prevedono che l'utente fornisca al fornitore del software alcuni dettagli della macchina che eseguirà il software (numeri di serie della cpu, indirizzi mac, indirizzo IP ecc.) O richieda l'accesso online per registrare il software sul sito Web del fornitore e in cambio riceverai un gettone di attivazione. La prima opzione richiede molta amministrazione manuale e vale solo per software di valore molto elevato, la seconda opzione può essere falsificata ed è assolutamente esasperante se si dispone di un accesso limitato alla rete o se si è bloccati dietro un firewall.

Nel complesso è molto più facile stabilire un rapporto di fiducia con i tuoi clienti!




Related