Codifica / decrittografia della nostra chiave di licenza

4

Abbiamo bisogno di fornire una chiave di licenza ai clienti per la nostra applicazione. La licenza attuale è XML, ma è necessario crittografarla e quindi nel nostro programma decrittografarla. Penso che sia il seguente, ma sto chiedendo di assicurarmi che non mi manchi qualcosa (il sotto è aggiornato dalla crittografia alla firma in base ai commenti seguenti):

  1. Sul nostro server creare l'XML per la chiave. La chiave si trova nel contenitore delle chiavi sul server.
  2. Sul nostro server firma l'XML utilizzando la nostra chiave privata.
  3. UUEncodifica la licenza crittografata in modo che emails ok.
  4. Invia la licenza al nostro cliente.
  5. Il cliente inserisce la licenza nel suo file app.exe.config.
  6. L'app legge la licenza dal file di configurazione.
  7. L'app UUDecode la licenza.
  8. L'app verifica la firma utilizzando la nostra chiave pubblica. La chiave pubblica è incorporata nel programma.
  9. Ora disponiamo dell'XML e utilizziamo le proprietà della licenza.

È questo il modo migliore per farlo? In caso negativo, quale approccio dovremmo adottare?

Se sì, quale API .NET dovremmo usare per questo e quali link al codice di esempio?

E un gigante grazie a tutti quelli che mi hanno guidato attraverso questo.

    
posta David Thielen 16.09.2014 - 16:19
fonte

1 risposta

6

Firma il file di licenza

Vuoi firmare i dati con la tua chiave privata per creare una firma.

  1. Genera un file di licenza
  2. Firma il file con la tua chiave privata.
  3. Fornisci la chiave pubblica con la tua applicazione
  4. Nel tuo programma, verifica che il contenuto del file non sia cambiato con la tua chiave pubblica.

La firma non può essere sostituita poiché solo tu hai la chiave privata per firmare la licenza. Se qualche parte del file di licenza è stata modificata, la verifica avrà esito negativo e sarà possibile interrompere l'esecuzione del programma. Avvisare l'utente come meglio credi. La parte importante da comprendere è che non stai impedendo loro di modificarlo, ma se lo fanno, invalidano la licenza.

La crittografia è la strada sbagliata da intraprendere perché non importa cosa si debba codificare la chiave di crittografia da qualche parte nella propria applicazione. La firma dei dati è molto più sicura.

Ecco una bella introduzione a come i dati di firma funziona (apre un PDF).

Dati di firma con .NET

Credo che questo articolo MSDN ti mostrerà tutto ciò che bisogno di firmare digitalmente un file XML in .NET. C'è un esempio di codice completo in basso.

Devi creare il tuo RsaCryptoServiceProvider e imposta le proprietà per contenere solo le chiavi pubbliche. Quindi durante l'installazione dovrai esportare la tua chiave pubblica al fornitore di servizi usando ExportCspBlob (false) . Puoi esportare la tua chiave pubblica in un formato ben noto come PEM e hard-code. Ecco un esempio con un sacco di codice di esempio per lavorare con stringhe codificate, creare RsaCryptoServiceProvider, ecc.

L'ultimo link include un esempio che esporta la chiave privata così come il pubblico. Non vuoi includere questo!

    
risposta data 16.09.2014 - 16:56
fonte

Leggi altre domande sui tag