Sto lavorando a un'app che mi piacerebbe vendere un giorno, prima o poi! Mi piacerebbe sviluppare uno schema di numeri seriali ragionevolmente semplice per proteggerlo.Qual è un buon approccio per lo sviluppo di un semplice generatore/verificatore di numeri di serie?
- una semplice combinazione numero/lettera non più lungo di 25-30 caratteri alfanumerici (si pensi chiavi di prodotto Microsoft)
- Non richiede all'utente di inserire informazioni personali (come un indirizzo di posta elettronica) come parte del verifica
Ho pensato a questo (molto poco) bit, e penso che la crittografia a chiave pubblica sia un buon punto di partenza. Potrei generare una stringa che identifica la licenza (come SKU + plain ole 'numero di serie integrale), cancellarla, crittografarla e codificare il numero di serie + identificatore in una chiave alfanumerica di 25 cifre (o così). L'app decodificherebbe quindi la chiave in un numero seriale e "firma", genererebbe un hash dell'identificatore, decrittò la "firma" utilizzando una chiave pubblica corrispondente e la confronterebbe con l'hash dell'identificatore generato.
In sostanza, il codice prodotto contiene due dati: il numero di serie che l'utente dichiara di possedere, più una firma di sorta che il programma può utilizzare per verificare tale reclamo. Non so se 25 caratteri alfanumerici (che codificano 5 bit ciascuno per un totale realistico di 120 bit) è sufficiente per tutto questo. Ma non deve essere crittograficamente sicuro, quanto basta che i codici non siano facilmente ipotizzabili. Sto bene con brevi chiavi e brevi hash.
quanto riguarda l'attuazione va, l'applicazione è scritto in Objective-C per Mac OS X, ma dato quanto sia facile è quello di iniettare codice in applicazioni Cocoa, io probabilmente scrivere il codice di verifica in rettilineo C.
In che modo la crittografia può essere più facile da decifrare? Qualsiasi metodo che utilizzo per controllare la chiave può essere compromesso, quindi cosa rende la crittografia più vulnerabile? Come scriveresti un generatore di numeri conformi a quelle molte regole? Sembra che sarebbe difficile da fare. – Alex
@Alex: Gli algoritmi di crittografia vengono solitamente implementati in librerie standard (non si dovrebbe mai implementare la propria implementazione di crittografia a meno che non si sappia veramente cosa si sta facendo). Il tuo codice contiene la chiave privata, quindi i cracker devono solo ottenerlo, senza necessità di invertire il codice del gestore. – bh213