PKI - Verifica di marcatura temporale con BouncyCastle
|
Durante gli ultimi anni ho lavorato su diversi progetti di PKI, e nel continuo processo di selezione delle librerie da utilizzare la scelta è spesso caduta su iaik(commerciali). Ma le ultime versioni di BouncyCastle hanno drasticamente modificato il panorama ed ora queste ultime rappresentano la mia prima scelta. Uno dei punti che mi hanno attirato su BouncyCastle è il buon supporto per la marcatura temporale. In passato ho utilizzato una versione 'patchata' di openssl per la generazione/verifica di marcaturte temporali, con ovvi problemi di portabilità. Ora ho convertito tutte le procedure per l'utilizzo della libreria tsp di bouncycastle e mi trovo piuttosto bene. Qui di seguito una semplice classe per mostrare la semplicità di verifica di una risposta di marcatura: import java.io.FileInputStream; import java.math.BigInteger;
import org.bouncycastle.asn1.ASN1InputStream; import org.bouncycastle.cms.CMSSignedDataGenerator; import org.bouncycastle.cms.SignerId; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.tsp.TimeStampRequest; import org.bouncycastle.tsp.TimeStampResponse; import org.bouncycastle.tsp.TimeStampToken; import org.bouncycastle.tsp.TimeStampTokenInfo; import org.bouncycastle.tsp.TSPException; public class TS{ public static void main(String args[]){ TS ts=new TS(); ts.go(); } public void go(){ try{ FileInputStream inreq=new FileInputStream("tsq"); // request FileInputStream inresp=new FileInputStream("tsr");// response TimeStampRequest req = new TimeStampRequest (inreq); TimeStampResponse resp = new TimeStampResponse (inresp); resp.validate (req); // if it fails a TSPException is raised System.out.println ("TimeStamp verified."); TimeStampToken tsToken = resp.getTimeStampToken(); TimeStampTokenInfo tsInfo= tsToken.getTimeStampInfo(); SignerId signer_id = tsToken.getSID(); BigInteger cert_serial_number = signer_id.getSerialNumber(); System.out.println ("Generation time " + tsInfo.getGenTime()); System.out.println ("Signer ID serial "+signer_id.getSerialNumber()); System.out.println ("Signer ID issuer "+signer_id.getIssuerAsString()); } catch(TSPException tsex){ System.out.println(tsex.getMessage()); } catch(Exception ex){ ex.printStackTrace(); } } }
PrimoAutore Approfitto dell'occasione per fare un pò di pubblicità assolutamente esplicita. In Digitaltrust abbiamo appena rilasciato Primoautore , un servizio per la marcatura temporale di opere digitali inedite(musiche, testi, immagini, software etc.). Sul sito è possibile ottenere per le proprie opere una marcatura temporale rilasciata da un certificatore accreditato CNIPA . Questa marcatura ha per la legislazione italiana validità di opponibilità verso terzi come prova del possesso dell'opera ad una data certa, quindi è utilizzabile ad esempio nei casi di presunto plagio. Il servizio è un'opzione alternativa al deposito SIAE , e si aggiunge ad altri classici metodi di protezione quali lo spedirsi l'opera con raccomandata con ricevuta di ritorno o il far certificare l'opera da un notaio. |