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?