Sistema di gestione licenze per applicazione web con codice lato client

3

Ho un'applicazione web lato client in esecuzione su SharePoint Site Collection, ogni raccolta siti ha il proprio ID univoco. Voglio utilizzare una procedura di licenza per bloccare l'app in una raccolta siti.

Questa è la procedura di risposta alla sfida che sto tentando di implementare:

  • Utente richiesto per generare challenge code
  • challenge code è site_collection_id elaborato tramite qualche funzione
  • Email dell'utente me challenge code
  • Cifratura / hash challenge code con qualcosa (chiave privata RSA?)
  • Il risultato crittografato è considerato il license key che invio all'utente
  • L'utente salva license key nell'applicazione

Processo di convalida:

  • Sul caricamento dell'app, recupera license key
  • Decrypt / un-hash license key utilizzando qualcosa (chiave pubblica RSA?)
  • Il risultato è il challenge code che l'utente ha inviato prima
  • Confronta il challenge code generato da license a quello che otterresti dal sito per determinare se corrispondono

Ha senso? L'unica cosa di cui non sono sicuro è la chiave pubblica / privata e se c'è un modo per farlo in JavaScript. Da quello che ho letto, non posso usare RSA in modo sicuro per crittografare con la chiave privata e decifrare con pubblico. Normalmente è il contrario. Quindi sto cercando alternative

Per essere chiari, ho bisogno di archiviare qualcosa nello script dell'applicazione che posso usare per decrittare la licenza, ma dovrei crittografare il codice di sfida su un sito diverso o sul lato server

So che è impossibile proteggere al 100% le applicazioni lato client. Sto solo cercando qualcosa che impedisca a qualcuno facilmente di distribuire l'applicazione

    
posta Batman 02.01.2016 - 23:11
fonte

1 risposta

2

Il tuo piano è molto vicino, direi. RSA in JavaScript è un rompicapo, quindi cerca una libreria che faccia al caso tuo. Questo è il mio suggerimento per il tuo schema finale:

  1. Il client ti invia l'id del sito i
  2. Firmi quell'ID con la tua chiave privata p : S = RSA-SIGN (i, p) = i ^ d mod n
  3. Invia S al client in un file o in una e-mail
  4. Il client memorizza il file di licenza
  5. Quando l'app web viene caricata, scarica il file ( S ') e la tua chiave pubblica o e fai i calcoli: S' '= RSA-VERIFY (S ', o) = S' ^ e mod n . Se S '' = S ', la licenza è ok.

Le formule RSA qui sono Textbook-RSA e crittograficamente non sicure. Si potrebbe recuperare la chiave privata. Quindi assicurati di usare padding e hashing appropriati (parola chiave: PKCS7)

P.S .: Come ha detto il TO, questo non è sicuro al 100%. Non può essere dato che il codice lato client può essere completamente manomesso facilmente.

P.S.S .: Penso che un modulo online per i passaggi da 1 a 3 sarebbe molto più utile per l'usabilità che inviare via email.

    
risposta data 02.01.2016 - 23:59
fonte

Leggi altre domande sui tag