I modi migliori per mantenere le informazioni sul client di licenza nel database

4

Sviluppo un server di licenze e un sistema di client di licenza (applicazioni basate su Java).

Il flusso è il seguente:

  1. La licenza è memorizzata sul server di licenza
  2. L'applicazione client include un componente client di licenza.
  3. Il client di licenza si connette al server licenze tramite HTTPS per recuperare le informazioni sulla licenza.
  4. La licenza non viene passata al client di licenza - solo le informazioni se la licenza è abilitata.
  5. Se la licenza è abilitata, il client di licenza ritorna all'applicazione client lo stato concesso in licenza ed è possibile utilizzare l'applicazione client.
  6. Se la licenza non è abilitata, il client di licenza avvia il periodo di valutazione (ad esempio 30 giorni). Durante questo periodo raccomandiamo ai nostri clienti di acquistare la licenza.
  7. Se viene passato il periodo di valutazione, il client di licenza ritorna all'applicazione client lo stato senza licenza e non è possibile utilizzare le applicazioni client.

Ho il dilemma su come mantenere il tempo di valutazione iniziale, poiché se un cliente può comprometterlo e il periodo di valutazione inizierà nuovamente. Memorizzo lo stato della licenza nel database utilizzando l'algoritmo AES-256, quindi non credo che un cliente sia in grado di decifrare le informazioni. Inoltre, se un cliente rimuoverà lo stato della licenza dal database, non sarà possibile utilizzare l'applicazione client, quindi non mi interessa.

Analogamente, memorizzo il tempo di valutazione iniziale nel database usando l'algoritmo AES-256, quindi non credo che un cliente sia in grado di decifrare le informazioni. Ma ho un problema se un cliente rimuoverà il tempo di valutazione iniziale dal database. In questo caso inizierò il periodo di valutazione dall'inizio.

Desidero memorizzare le informazioni nel database (per poterle in futuro ingrandire con la replica del database). Inoltre, non voglio archiviare il tempo di valutazione iniziale sul server licenze, poiché si tratta di un problema del client. Più dettagliato: in futuro vogliamo supportare la licenza (e il tempo di valutazione) per diversi tipi di permessi. Ad esempio, la licenza per eseguire un lavoro o una licenza per modificare un documento. Pertanto, il cliente può avere una licenza completa per eseguire un lavoro, ma può essere nel periodo di valutazione per modificare un documento.

Qualsiasi suggerimento è più che gradito.

    
posta Michael 16.04.2013 - 10:35
fonte

1 risposta

1

Hai bisogno di un servizio di timestamping. Il server delle licenze dovrebbe tracciare le informazioni sul client che assicurano che lo stesso client non possa richiedere una licenza più di una volta. È possibile utilizzare qualsiasi numero di fattori, ad esempio numeri di serie del disco rigido, codici di attivazione di Windows, ecc.

Quando viene rilasciata una licenza di valutazione, è possibile timestampare la chiave e fare in modo che l'applicazione controlli contro un orologio per vedere se la licenza è ancora valida. (Utilizzare un algoritmo asimmetrico sul server delle licenze per firmare un timestamp e le informazioni che identificano il computer.) Si noti che potrebbero ancora alterare l'orario del sistema locale, quindi la soluzione migliore è utilizzare un orologio esterno. Il tuo cliente deve semplicemente conoscere la chiave pubblica del server delle licenze in modo che possa verificare l'ora di inizio e l'ID del computer per la licenza siano validi prima dell'avvio.

Non fare affidamento sulla sicurezza attraverso l'oscurità. Cose come mettere i valori in una colonna DB non marcata, usando la crittografia simmetrica come AES o altre misure in cui le informazioni per generare una licenza sono memorizzate sul client possono essere facilmente infrante facendo una semplice traccia del comportamento del programma per vedere a cosa accede . Non appena qualcuno arriva a quello che sembra un tasto AES o una licenza caricata nella memoria, sapranno di cosa si tratta. Questo genere di cose è un gioco da ragazzi per un reverse engineer esperto e richiederà una questione di minuti nella maggior parte dei casi.

Invece, assicurati che non faccia loro nulla di buono per manomettere la licenza e negare loro la possibilità di generare una licenza valida. Utilizzare algoritmi asimmetrici (chiave pubblica / privata) in modo che solo il server sappia come generare una licenza e tutto il client sa come farlo è convalidarlo. Assicurarsi che venga eseguito un controllo temporale rispetto alla data / ora firmata nella licenza e che la licenza contenga anche un identificatore difficile da falsificare del computer client in modo che non possa essere utilizzato per più di un client. In questo modo, copiare o modificare la licenza è molto difficile.

A quel punto, gli attacchi di maggior successo contro il tuo sistema saranno sia il reverse engineering del codice per disabilitare il controllo della licenza (farlo più volte in tutta l'applicazione renderà più difficile) o trovare un modo per simulare i controlli dell'identificatore del client per fare in modo che più computer sembrino uguali (o far apparire il computer diverso, quindi è possibile ottenere un'altra licenza di prova).

    
risposta data 16.04.2013 - 15:36
fonte

Leggi altre domande sui tag