Firma lato client di un file (.exe, .dll, .jar ..) utilizzando CA certificato emesso e signtool [chiuso]

3

In un progetto corrente abbiamo acquistato un certificato da una CA affidabile e installato in un host, lo strumento di firma è installato nello stesso host.

Tutti i file che sviluppiamo (jar, dll, apk, exe ecc.,) devono essere firmati, quindi utilizziamo il certificato e lo strumento di firma ospitati in un server centrale.

Quando uno sviluppatore vuole che il suo file venga firmato, carica il file sull'host remoto in cui risiede lo strumento Certificato e firma e viene scaricato il file firmato.

Ora che la dimensione del file aumenta di giorno in giorno non potremo caricare l'intero file su un server remoto per ottenere la firma, c'è un modo per firmare il file sul lato client e inviare solo il valore hash indietro al server per riferimento ???

    
posta Goutham Nithyananda 15.12.2015 - 11:34
fonte

2 risposte

3

In teoria, ciò che stai chiedendo è possibile: la firma del codice in pratica è solo la firma di un hash del file quindi non c'è motivo per cui devi farlo nello stesso punto in cui viene calcolato l'hash.

In pratica, però, non sono a conoscenza di alcun modo in cui puoi farlo senza scrivere il tuo codice di firma del codice, qualcosa che non dovresti davvero considerare. Sarebbe un problema delicato perché dovresti proteggere il sistema molto strettamente.

Detto questo, non posso davvero immaginare una configurazione in cui il caricamento del codice su un server di firma sarebbe impossibile o addirittura molto difficile. Ti suggerisco invece di concentrarti su questo aspetto del tuo problema.

Modifica : in vista della risposta di Jonathan, penso di dover aggiungere una parola di avvertimento sul tentativo di modificare il codice esistente per implementare tale sistema.

In primo luogo, può essere fatto. Infatti, dopo aver controllato il mio (leggi: il codice che uso, che è gestito professionalmente, e non alcun codice che ho scritto io stesso) le librerie di firma del codice, non sarebbe troppo difficile (almeno non al livello di firma del codice ).

In questo modo, devi considerare le conseguenze: in primo luogo, gli strumenti e la libreria che utilizzi smetteranno immediatamente di essere supportati dal tuo provider (chiunque essi siano): se c'è qualche bug in esso fissato una data successiva, dovrete implementare la patch da soli (supponendo che sia possibile). Questo è incredibilmente scomodo da un punto di vista operativo.

In secondo luogo, scrivere codice crittografico è HARD e scrivere un prodotto crittografico sicuro è ancora più difficile. Anche se può essere molto interessante farlo "per il divertimento", un sistema professionale e pronto per la produzione richiede molte più risorse di una singola persona: è davvero uno sforzo di squadra che richiede test formalizzati.

Quindi, dato che il tuo problema sembra essere che hai una singola istanza di un problema (la tua base di codice è così grande che hai problemi a caricarla sul server), penso che sia un problema che deve essere risolto in una posizione, non ottenere una soluzione universale.

Ora, se vuoi produrre un nuovo prodotto che risolva il problema della firma del codice per i team (e potrebbe esserci un mercato per questo), questo è un problema completamente diverso (ma non uno per questo posto).

    
risposta data 15.12.2015 - 12:15
fonte
-1

Mi piace la risposta di Stephane, ma non sono soddisfatto del fatto che non sia esattamente fattibile nella pratica senza scrivere il tuo codice. Quindi ho un paio di possibili alternative da suggerire:

1) Trova uno strumento di firma completamente open source e modificalo per accettare un hash come input invece di calcolarne uno dal file. Quindi modifica il codice di aggiunta della firma digitale per farlo rinviare all'aggiunta al file reale.

2) Si potrebbe provare a utilizzare un hook DLL per reindirizzare una funzione di hashing di uno strumento esistente (purché si recuperi il nome interno del metodo di hashing). Quindi prendi la firma digitale dalla fine del file temporaneo utilizzato e reinviala al file reale.

    
risposta data 15.12.2015 - 15:58
fonte

Leggi altre domande sui tag