Richiede crittografia asimmetrica (non firma) dove il server esegue la crittografia e il client decrittografa

1

Quindi sto provando a creare un server di licenze, in cui è necessario controllare le licenze delle applicazioni quando si effettua l'accesso o quando si utilizza l'applicazione. Ma alcune di queste applicazioni funzionano offline la maggior parte del tempo, quindi ho bisogno di avere una sorta di "memorizzazione nella cache" dell'ultimo controllo della licenza con una data in cui la licenza dovrebbe essere controllata (diciamo come ogni settimana). Per il momento sto memorizzando questo nel database dell'applicazione, ma ho bisogno di assicurarmi che quella "prossima data di controllo" non possa essere modificata dall'utente dell'applicazione.

Così mi è venuta in mente la seguente idea: quando una licenza deve essere controllata (perché è passata più di una settimana), il server controllerà la licenza e deciderà la "prossima data di controllo". Quindi crittograferà quella data e la invierà all'applicazione che la memorizzerà nel database. Quindi, quando verrà utilizzata l'applicazione, riceverà la data crittografata, quindi la decrittografa e la controllerà. Quindi, quando l'applicazione tenta di crittografare una data da solo, non sarà in grado di decifrare perché non utilizza la stessa chiave utilizzata dal server per crittografare.

Inizialmente pensavo di avere una chiave privata sul server e una chiave pubblica sull'applicazione, ma non sarebbe stata la crittografia, ma la firma, e ciò avrebbe comportato l'invio della data in testo chiaro, che non è quello che ho volere. O c'è un modo per utilizzare la firma per cui l'applicazione non può cambiare la data?

    
posta kev02468 08.10.2015 - 10:20
fonte

1 risposta

4

Nonostante il titolo della domanda, vuoi ancora le firme digitali, non la crittografia. Vuoi qualcosa che il cliente può verificare ma non produrre da solo; questo è esattamente ciò che significano le firme. Cercare di pensarci in termini di crittografia porterà solo a una maggiore confusione.

Il funzionamento di base di un file di licenza è che contiene alcune informazioni scelte dal fornitore che il fornitore ha firmato; il client utilizza la chiave pubblica del fornitore per verificare che il file di licenza sia autentico, quindi applica qualsiasi politica incarnata dalle informazioni nel file di licenza. In genere, un file di licenza identifica il cliente e l'intervallo consentito di date di utilizzo, eventualmente insieme a un identificativo univoco per la macchina su cui può essere eseguito il software. Il codice client si rifiuterà di funzionare se la data corrente non è compresa nell'intervallo consentito o se l'identificatore della macchina locale non corrisponde a quello specificato nel file di licenza.

Come è stato sottolineato, le licenze possono sempre essere sconfitte nel caso di software , perché il codice che applica la politica di licenza viene eseguito sulla macchina dell'utente. Se l'utente vuole bypassare la licenza, può decodificare il codice per disattivare semplicemente il controllo della licenza; questo è quasi impossibile da prevenire come la riproduzione di musica e video. Cambiare l'orologio locale è la forma più semplice di "reverse-engineering", e anche gli utenti con pochissima conoscenza della programmazione possono farlo. Se si desidera applicare regole di utilizzo e licenze, fare in modo che parte del codice venga eseguito su i propri server, non sulla macchina dell'utente (ma, successivamente, il software non è più utilizzabile offline).

    
risposta data 08.10.2015 - 11:12
fonte

Leggi altre domande sui tag