security - Come vengono generate le chiavi di licenza del software?




4 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.

security cryptography license-key

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.




Esistono anche comportamenti DRM che incorporano più passaggi del processo. Uno degli esempi più noti è uno dei metodi di Adobe per verificare l'installazione della loro Creative Suite. Viene utilizzato il tradizionale metodo CD Key qui discusso, quindi viene chiamata la linea di supporto di Adobe. La chiave del CD viene consegnata al rappresentante Adobe e restituiscono un numero di attivazione che deve essere utilizzato dall'utente.

Tuttavia, pur essendo suddiviso in passaggi, questo cade preda degli stessi metodi di cracking utilizzati per il normale processo. Il processo utilizzato per creare una chiave di attivazione confrontata con la chiave CD originale è stato rilevato rapidamente e sono stati creati i generatori che incorporano entrambe le chiavi.

Tuttavia, questo metodo esiste ancora come un modo per gli utenti che non dispongono di connessione Internet per verificare il prodotto. Andando avanti, è facile vedere come questi metodi sarebbero eliminati in quanto l'accesso a Internet diventa onnipresente.






Related