Domanda

Sto implementando una piccola applicazione in C, che vorrei vendere come shareware a un prezzo ragionevole in seguito. Inizierà con una prova di 30 giorni, di cui sono già abbastanza sicuro su come implementarlo.

Il problema che ho, tuttavia, è che non sono del tutto sicuro su come implementare la verifica del codice Product Key. Quello che ho in mente è che il cliente può registrarsi sulla mia pagina web (dopo aver provato il prodotto per un po '), pagare per il prodotto e ottenere un codice Product Key sotto forma di aaaaa-bbbbb-ccccc-ddddd-eeeee tramite e -mail (o forse disponibile tramite il suo profilo sul mio sito Web). Nessun problema finora. Quindi rilascia la chiave negli appositi campi chiave nella mia app e boom l'app è registrata.

Da quello che ho potuto raccogliere finora, le persone raccomandano AES o RSA per questo. Ad essere sincero, sono andato in un'altra direzione al college (non sulla crittografia) e l'unica lezione di crittografia che ho seguito era qualche tempo fa. Ma da quello che ricordo, AES è un algoritmo di crittografia simmetrica, il che significherebbe che avrei solo una chiave per la crittografia e la decrittografia, giusto? Come potrei quindi generare migliaia di codici Product Key e comunque convalidarli nella mia app (che tra l'altro non richiederà l'accesso a Internet .... quindi non ricontrollare con un server)?

Quindi immagino che RSA sarebbe la strada da percorrere? Ma RSA non produce chiavi piuttosto lunghe (almeno più lunghe dei 25 caratteri richiesti dall'alto)?

In un'altra discussione Ho letto che alcuni prodotti non useranno nemmeno la crittografia per la generazione / verifica della chiave del prodotto, ma invece impiegheranno solo alcuni controlli come "aggiungi il carattere 2. e 17. e che dovrebbe arrivare a x".

Qual è il modo più veloce, semplice e sicuro per andare qui? :-) I campioni di codice sarebbero zucchero!

Saluti,

Sebastian

PS: Oh ... e per favore non dirmi come la mia chiave può e verrà rotta a un certo punto ..... Lo so, questo è principalmente il motivo per cui non voglio spendere molto di tempo con questo problema, ma allo stesso tempo non lo rende troppo facile per il cracker occasionale.

È stato utile?

Soluzione

Gli algoritmi simmetrici sono limitati, in quanto qualsiasi cracker principiante con un disassemblatore può trovare la tua chiave (o l'algoritmo usato per generarne uno) e creare un "keygen".

Per questo motivo, la crittografia asimmetrica è la strada da percorrere. La premessa di base è qualcosa del genere:

  • Quando l'utente acquista una licenza da te, raccogli alcuni dettagli identificativi dell'utente e / o del suo ambiente (in genere, questo è solo un nome completo; a volte anche un'azienda).
  • Crea un hash MD5 a 128 bit di queste informazioni.
  • Utilizzando una Curva ellittica a 128 bit, crittografare questo hash usando chiave privata sul server.
  • Il testo cifrato a 128 bit può essere rappresentato all'utente come una stringa di 25 caratteri composta da lettere e cifre (oltre a trattini separati per leggibilità). Nota che 26 lettere + 10 cifre = 36 valori discreti e che 36 ^ 25 > 2 ^ 128.
  • L'utente digita questo codice Product Key nella finestra di dialogo di registrazione. Il software client lo converte di nuovo in un numero a 128 bit (16 byte), decodifica utilizzando la chiave pubblica della crittografia EC e confronta il risultato con un hash MD5 delle informazioni personali dell'utente, che deve corrispondere a quello utilizzato per la registrazione .

Questa è solo l'idea di base, ovviamente. Per maggiori dettagli e codice sorgente, vedi Codici prodotto basati sulla crittografia a curva ellittica .

Altri suggerimenti

La vita è più semplice se si acquista semplicemente una soluzione.

http://www.kagi.com/kagisolutions/index.php

Kagi ti consente di riscuotere pagamenti e ti aiutano a gestire le chiavi.

Un ragazzo ha scritto un blog su come ha gestito la questione dei numeri di registrazione. Uno dei suoi post sul blog è Generazione di numeri di registrazione unici .

Sì, RSA e AES sono due cose molto diverse:

  • RSA è una crittografia a chiave pubblica, che coinvolge una chiave pubblica e una chiave privata ed è piuttosto lenta. L'uso principale è impostare uno scambio sicuro di una chiave di sessione di crittografia simmetrica.
  • AES è la crittografia simmetrica, che è veloce e sicura.

Poiché la tua app non comunica su canali pubblici e l'uso della crittografia è limitato all'attivazione / registrazione del prodotto, ti consigliamo di utilizzare una cifra simmetrica. I vantaggi delle cifrature a chiave pubblica sono nella gestione delle chiavi, che gestirai sul tuo sito web o tramite e-mail.

Nota che non è necessario distribuire la stessa chiave per ogni cliente. Potresti generare un hash di alcune delle informazioni di registrazione e XOR con qualcos'altro (una chiave di sessione fissa, forse). Invialo al cliente e il programma potrebbe generare lo stesso hash e XOR sarà la chiave che hai inviato per produrre la chiave fissa originale.

Gestire la crittografia non è qualcosa da fare alla leggera. Come accennato, ti aspetti che questo sia rotto. Se stai facendo il tuo, quasi sicuramente succederà. Puoi comunque utilizzare la tua implementazione per "mantenere oneste le persone oneste", ma renditi conto che per quanto ti arriva. Se hai bisogno di qualcosa di più forte, dovresti acquistare una soluzione dopo aver fatto una ricerca approfondita sulle soluzioni.

Puoi consultare questo Project Code . Descrive l'implementazione di una chiave software basata sull'indirizzo MAC della macchina su cui viene eseguito il software. Il metodo non è l'ideale, come ammette lo stesso autore, ed è un po 'diverso da quello che stai cercando, ma forse può aiutarti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top