Best practice per l'archiviazione del certificato digitale

2

Sto costruendo un'applicazione in cui determinati file sensibili devono essere firmati digitalmente prima di essere archiviati nel file system utilizzando la codifica ASN.1, in modo che possano essere verificati rispetto a un certificato digitale (quello corrispondente alla chiave privata utilizzata per firma) in un momento successivo al momento dell'accesso. Sto usando la libreria Bouncy Castle per Java.

C'è un disaccordo tra i membri del mio team riguardo al posto migliore per archiviare il certificato digitale, e mi piacerebbe sapere qual è la migliore pratica:

  • Memorizzazione del contenuto del file, la firma e il certificato raggruppati insieme in un CMSSignedData oggetto. In questo modo, la procedura di verifica deve solo ricevere l'oggetto CMSSignedData, poiché tutti i dati necessari per eseguire la verifica sono presenti in un singolo oggetto.
  • Memorizzazione solo della firma e del contenuto del file in un CMSSignedData e memorizzazione del certificato altrove. Utilizzando questo approccio, è necessario un ulteriore lavoro gestione del certificato e collegamento di ciascun file firmato al certificato necessario per l'esecuzione della verifica.

Sono preoccupato per il primo approccio, credo che qualcuno potrebbe impacchettare e salvare il contenuto del file, un certificato diverso dal mio e una firma generata con la chiave privata corrispondente a quel certificato - e la verifica avrebbe avuto successo, perché il la procedura di verifica non ha ricevuto il certificato "originale" ma falso.

Che cosa mi consiglia? Vedi qualche carenza o potenziale problema in una delle alternative sopra menzionate? qual è la migliore pratica, o dovrei usare un approccio completamente diverso?

    
posta Óscar López 19.05.2012 - 04:10
fonte

1 risposta

5

Il primo approccio è migliore. Le tue preoccupazioni sono malriposte. Nell'esempio che fornisci, la verifica dovrebbe avere successo. I dati sono stati infatti firmati dal certificato che afferma di essere stato firmato da.

Se firmo un documento, è molto importante che appaia solo la mia firma se non è stata manomessa. Ma se puoi manometterlo ma poi devi mettere la firma tua , va bene. hai firmato il suo contenuto. Non l'ho fatto, ma non sembra che abbia la mia firma . Quindi va bene.

Devi ancora decidere che cosa significhi quella dopo che hai deciso che è sostanzialmente valido. Ma dovrebbe essere considerato un passaggio separato.

Il design dovrebbe basarsi sul principio fondamentale di sicurezza che un utente malintenzionato non autorizzato può ottenere la chiave privata corrispondente alla chiave pubblica autorizzata da qualsiasi certificato che il sistema accetterebbe come valido. Generalmente, si baserà sul nome comune nel certificato e sull'identità dell'autorità che lo ha firmato.

È possibile archiviare in modo sicuro i dati, il certificato e la firma. Ciò ti consentirà di convalidare i dati e la firma. L'importante è che tu decida correttamente cosa significhi la validazione guardando il certificato.

    
risposta data 19.05.2012 - 14:19
fonte

Leggi altre domande sui tag