È sicuro spedire la chiave pubblica con il file di licenza?

3

Ho implementato un client e un server di licenze per le nostre applicazioni web. Attualmente esiste un solo modo per concedere in licenza un'app, l'utente dovrebbe caricare manualmente il file di licenza utilizzando il modulo e il menu specificati nella sezione di gestione.

Ho quattro modi per pubblicare la chiave pubblica associata necessaria per garantire l'integrità del file di licenza:

  1. Utilizzo di un server delle chiavi. L'applicazione scarica la chiave pubblica dal server. Questo non è sempre possibile, alcuni dei nostri clienti hanno limitato l'accesso a Internet per i loro server.

  2. Hard-coding della chiave pubblica. L'approccio più semplice, ma se dovessimo utilizzare più chiavi, avremo diverse build diverse! E sarebbe molto doloroso cambiare la chiave in seguito.

  3. Spediscilo come file accanto ai file dell'applicazione web. In questo modo è più facile cambiare e sostituire il file.

  4. Aggiunta della chiave pubblica all'interno del file di licenza. Questo metodo sembra molto flessibile ed è il modo migliore che ho sviluppato finora.

Sarò grato di conoscere i tuoi consigli e se è sicuro pubblicare la chiave pubblica con ogni file di licenza, oppure no.

    
posta Akbari 27.01.2016 - 15:01
fonte

5 risposte

2

Come sottolineato da @ 王庭茂 e @LieRyan, hai bisogno di un modo per dimostrare che la chiave pubblica che viene caricata con il file di licenza proviene effettivamente dalla tua azienda e non è stata piazzata lì da un utente malintenzionato (nel tuo caso, qualcuno cercando di forgiare un file di licenza senza pagare). La soluzione a questo è avere la tua chiave pubblica trasformata in un certificato .

Considerando il tuo caso d'uso, non credo che un'autorità di certificazione pubblicamente affidabile sia ciò che desideri. Dovresti invece impostare una gerarchia di Autorità di certificazione privata (che può essere eseguita in-house gratuitamente e con il minimo sforzo con OpenSSL). Non è così spaventoso come sembra - una CA è in realtà solo un file di chiave pubblica che OpenSSL può usare per firmare altri file o certificati.

Dovresti configurare alcune CA OpenSSL come questa: quindiincorporareilcertificatoCAradicenelcodicesorgenteperl'applicazione(questoèchiamato blocco dei certificati ). La CA radice esiste come un'ancora di attendibilità, ma in realtà non fa altro che firmare i certificati delle CA secondarie. Nella maggior parte dei casi è possibile portare la CA principale offline dopo aver creato i sottotitoli. Le sub-CA sono quelle che usi quotidianamente per firmare. Di solito la sub-CA firmerebbe i certificati di firma che utilizzi per firmare i file di licenza (creando un altro livello nell'albero), ma nel tuo caso puoi probabilmente farla franca avendo le sub-CA firmare il file di licenza direttamente se questa è l'unica cosa per cui li stai usando. In questo modo hai la flessibilità di usare più chiavi come menzioni nel tuo punto # 2 (ogni CA secondaria è fondamentalmente solo una chiave di firma), o anche per rimuovere una chiave e sostituirla con una nuova - se hai bisogno di - senza interruzione del servizio o la necessità di inviare patch.

Per implementare effettivamente questo, avrete una CA secondaria firmare il file di licenza e quindi inviare il file di licenza e il certificato di tale sub-CA insieme al cliente. Dovrai collegare OpenSSL all'applicazione in modo che abbia la logica per convalidare un certificato. Quando si carica un file di licenza per l'applicazione, si convaliderà che 1) il file di licenza non è modificato (ovvero controlla la firma), 2) che la firma corrisponde alla chiave nel certificato CA secondario e 3) che la firma su il certificato CA secondario corrisponde al certificato CA radice che è incorporato nel codice sorgente dell'applicazione. Ora disponi di un'infrastruttura a chiave pubblica adeguata e sicura, senza alcuna necessità per l'applicazione che accetta il file di licenza per avere la connettività Internet!

Tratterò anche la domanda preventiva "Vale veramente la pena?". La risposta è: non lo so, dipende da te. Quanto costa una licenza? $ 5 ' Probabilmente nessuno si prenderà la briga di rompere il tuo formato di licenza. $ 500? Puoi scommettere che le persone inizieranno a pubblicare chiavi false online. Dalla tua domanda, hai ovviamente deciso che vale la pena percorrere la via della chiave pubblica. La mia opinione è che con la sicurezza dovresti farlo correttamente o non farlo affatto. Fornire qualcosa che assomiglia alla sicurezza, ma è facilmente infranto, non impedirà anche gli aggressori moderatamente qualificati, e darà ai tuoi clienti un falso senso di protezione (potrebbe portare all'oltraggio quando lo scopriranno). / p>     

risposta data 29.01.2016 - 16:21
fonte
5

No.

Si desidera garantire l'integrità del file di licenza utilizzando una chiave pubblica per verificare. Tuttavia, se si consente all'app di ricevere la chiave pubblica con il file di licenza, un utente malintenzionato (che desidera modificare il file di licenza) potrebbe semplicemente modificare il contenuto, generare una nuova chiave per firmare il contenuto e sostituire la chiave con la propria chiave. / p>

E la tua app userà la chiave pubblica dell'attacker per verificare la firma, che è creata dall'hacker .

    
risposta data 27.01.2016 - 15:33
fonte
2

Visualizza i commenti: le informazioni sulla licenza sono firmate con la chiave privata e convalidate utilizzando la chiave pubblica.

In questo caso, la chiave pubblica può essere pubblica al 100% - nessun altro dovrebbe essere in grado di firmare i dati con la chiave privata (a condizione che sia tenuta segreta), e non esiste un modo (noto) per ottenere torna alla chiave privata da una chiave pubblica.

Pubblicalo sul tuo sito web, includilo nel pacchetto, stampalo sul retro del tuo dispositivo mobile, tutto bene!

Basta non fare lo stesso con la chiave privata. Questo dovrebbe essere tenuto sotto chiave, idealmente in un HSM.

    
risposta data 27.01.2016 - 15:11
fonte
2

Hai bisogno di un'ancora di fiducia. Nei sistemi PKI x509 (utilizzati per TLS, email S / MIME e firma del codice, tra gli altri), l'ancoraggio di trust è fornito da autorità di certificazione .

La tua chiave pubblica (il tuo certificato) è firmata dall'autorità di certificazione, che l'utente ha implicitamente fiducia. Per falsificare un certificato che specifica il nome della tua organizzazione o della tua organizzazione, un utente malintenzionato dovrebbe convincere l'autorità di certificazione a emettere un certificato con il nome della tua organizzazione o, e si presume che sia piuttosto difficile.

    
risposta data 29.01.2016 - 16:00
fonte
-1

Quando queste chiavi indicano che altre applicazioni si collegheranno al tuo servizio, leggi l'autenticazione a due / tre zampe. (OAuth) link (Versione 1) Esiste già una versione 2 ma non ho esperienza con la versione 2

    
risposta data 29.01.2016 - 15:46
fonte

Leggi altre domande sui tag