Algoritmo sicuro per la creazione di chiavi di licenza?
-
06-07-2019 - |
Domanda
Vorrei distribuire un'applicazione, ma ho una chiave di licenza che possono inserire per sbloccare. Che cos'è un buon algoritmo per creare una chiave concisa che contenga informazioni su quale versione hanno acquistato, nonché cose aggiuntive come la durata della licenza, ecc.
Mi rendo conto che questa protezione può essere decifrata, ma mantiene oneste le persone oneste. Potrei o meno implementare l'attivazione online, ma mi occupo principalmente di un buon modo per generare queste chiavi.
Abbiamo visto tutti questa situazione, quale algoritmo funziona meglio? Devo chiedere un nome in chiaro dell'utente e utilizzarlo per creare un codice prodotto univoco basato sulle proprie informazioni?
Esiste un sistema che può essere usato per rendere quasi impossibile generare una chiave valida?
Forse una situazione di crittografia della coppia di chiavi pubblica / privata in cui solo il produttore ha la chiave privata e i dati possono essere convalidati da una chiave pubblica, ma la chiave pubblica non può essere dirottata per creare chiavi valide.
Dato che si tratta di un codice Product Key, sarebbe fantastico se fosse abbastanza corto, 64 caratteri o forse 128 massimo, ma più corto è il migliore, 32 o meno sarebbe ottimo.
Soluzione
Non hai detto su quale piattaforma ti trovi, ma eccone una in Microsoft .Net:
http://jclement.ca/devel/dotnet/reallysimplelicensing.html
Questa pagina documenta un modo molto semplice schema di licenza che è possibile utilizzare con la tua applicazione .NET. È inteso essere abbastanza sicuro, facile da implementare e facile da estendere. La versione di esempio consente di fornire file di licenza con un nome client incorporato in essi ma puoi facilmente estenderlo per aggiungere altre informazioni identificative, macchina vincoli, date di scadenza, ecc.
Questo schema utilizza Microsoft Libreria RSA e firma XML. Fondamentalmente metti quello che vuoi in un XML Documenta e firma quel documento. Poi puoi fornire quel file al tuo il cliente e l'applicazione possono leggere le informazioni sulla licenza da ciò file. Dal momento che il file è in formato digitale firmato il file di licenza NON può essere manomesso a meno che non rilasci il tuo chiave privata (che davvero non dovrebbe farlo).
Altri suggerimenti
Nessun accesso a Internet e chiavi di scatto
Per quanto riguarda le dimensioni della chiave seriale, c'è un compromesso tra chiavi leggibili / umane ( meno sicuro ) e con chiavi lunghe o possibilmente file di licenza ( più sicuro ).
Se vuoi chiavi leggibili e brevi che ti consentano di memorizzare cose come la data e le caratteristiche di scadenza, potresti usare SKGL insieme a Software Protector, che sono entrambi open source ( https://help.cryptolens.io/faq/what-is-skgl ).
Tuttavia, lo svantaggio è che molto probabilmente useranno la crittografia simmetrica e / o memorizzeranno l'algoritmo di generazione delle chiavi all'interno dell'applicazione. Ciò significa che l'utente finale può tentare di trovare la chiave di crittografia e / o l'algoritmo (consultare http://www.codeproject.com/Articles/764610/Licensing-systems-in-NET ).
Accesso a Internet (o offline con file di attivazione)
Un'alternativa migliore è quella di utilizzare un sistema basato su cloud che tiene traccia di tutte le chiavi di licenza e consente di modificarle in qualsiasi momento.
Se si dispone di un sistema di licenze basato sul Web, è possibile ridurre le chiavi e non è necessario archiviare le informazioni all'interno della chiave effettiva (come nel caso della maggior parte dei sistemi basati su offline).
Inoltre, sarai in grado di supportare più modelli di licenza, ad esempio un modello basato su abbonamento.
Le soluzioni sono:
costruisci tu stesso tale sistema , il che richiederà molto tempo e ti distrarrà dalle funzionalità principali dell'app.
utilizza un sistema open source esistente come punto di partenza - sebbene possa essere allettante dal momento che è open source e gratuito, ci vorrà del tempo per portarli sul cloud + configura per le tue esigenze particolari + mantenerlo. i sistemi open source che ho osservato tendono ad essere molto ampi in termini di funzionalità, il che contribuisce alla complessità.
esternalizzare a terzi - lo svantaggio è che la maggior parte di essi non è gratuita.
A mio avviso, l'intera procedura dovrebbe essere esternalizzata a una terza parte specializzata nello sviluppo di quel particolare componente. Una volta ridimensionato, potrebbe essere necessario modificare la logica delle licenze. Invece di svilupparlo da soli, è probabile che la terza parte supporti già quello scenario.
Esistono diverse soluzioni ( assicurati di cercare quelle basate sul web ), Cryptolens è un esempio. Se stai sviluppando un'applicazione .NET, ecco un esempio passo passo: https: // help. cryptolens.io/examples/key-verification.
Disclaimer : sono l'autore di SKGL / Software Protector, l'articolo sui sistemi di licenza e Cryptolens.