Esiste un formato di certificato PKCS che firma i dati ASCII?

1

Esiste già un PKCS #x che è stato progettato per firmare i dati ASCII e proteggerlo dalla manipolazione? Inizialmente sono stato guidato a PKCS # 7, ma in base ai post qui sembra che i dati non siano firmati, solo le informazioni CRL. Non preoccupartene.

Ecco come vorrei che funzionasse:

  • Stabilire un set di chiavi radice + certificato autofirmato
  • Stabilire un secondo livello di coppie di chiavi con certificati firmati dalla radice
  • Crea "certificati" con testo ASCII nel corpo (firmato dal 2 ° livello)

Un po 'come un file di configurazione protetto. Facile da leggere / analizzare, ma verificabile. Ci scusiamo per la descrizione scadente. Sono davvero nuovo nei concetti di sicurezza e lo ammetto. Voglio solo sapere se ho bisogno di dimenticare PKCS e basta codificarlo da solo o c'è qualcosa già definito che potrebbe supportare questo? Mi sembra più semplice codificarmi, ma nel caso in cui ...

    
posta Peter Stephens 09.06.2015 - 04:35
fonte

2 risposte

1

Un "certificato" dalla definizione utilizzata in crittografia è informazioni su un'entità crittografica in un formato specifico e firmata da una "autorità di certificazione" o CA; X.509 è il tipo più comune di certificato e quello utilizzato da PKCS # 7 o dalla sua versione aggiornata CMS (e S / MIME, che è un sottile wrapper su CMS). Se vuoi firmare i tuoi dati, non i dati speciali del certificato crittografico, allora vuoi SignedData , che è una delle varie opzioni (con alcune opzioni secondarie) in PKCS # 7 / CMS. Non è necessario che i dati siano ASCII, ma se è corretto, e se è canonico stampabile ASCII (nessun carattere di controllo eccetto CRLF per l'interruzione di riga), allora puoi usare la sotto-opzione "stacca staccata", che consente a chiunque di visualizzare la parte dati senza alcuno strumento speciale (ma non è possibile modificarlo senza invalidare la firma). Avere una CA radice che emette certificati per più entità che utilizzano tali certificati e le relative chiavi per firmare e verificare i dati è un utilizzo standard di bog di PKCS # 7 / CMS .

Si noti che PKCS # 7 viene talvolta utilizzato come "carrier" per i certificati X.509 e / o CRL, ma no per i dati dell'utente. I certificati e i CRL sono firmati internamente dalla CA che li emette e non necessitano di protezione aggiuntiva. Questo è diverso dal caso SignedData, in cui i dati dell'utente hanno bisogno e viene aggiunta una firma.

Come per il commento, il formato PGP , implementato da GnuPG e alcuni concorrenti, ha le stesse funzionalità di base (e praticamente obiettivi) di PKCS # 7 / CMS / SMIME: le parti generano coppie di chiavi che può essere certificato o può essere distribuito e considerato affidabile con altri mezzi; le parti quindi usano una chiave privata per firmare (arbitrariamente) i dati che ogni destinatario può verificare usando la chiave pubblica, o usano un publickey (o diversi) per crittografare i dati che solo i destinatari possono decifrare usando il PrivateKey (s). (PKCS # 7 / CMS chiama quest'ultimo "enveloping" per distinguerlo da altre forme di crittografia).

Esistono differenze tecniche : PKCS # 7 / CMS utilizza la codifica ASN.1 (così come X.509) mentre PGP utilizza la propria struttura di pacchetto con tag; entrambi usano solitamente "armatura" base64; PGP identifica le chiavi con un ID esadecimale piuttosto breve e le parti di solito da un indirizzo email, mentre X.509 e PKCS # 7 / CMS identificano le chiavi di (solitamente) un hash e le parti secondo una struttura "Distinguished Name" che può essere orribilmente complicata ma in una situazione che controlli puoi rendere abbastanza semplice.

Ma la differenza più evidente è che PGP viene principalmente come un programma a riga di comando o GUI che si esegue per generare la chiave, firmare, ecc. PKCS # 7 / CMS è implementato da almeno alcune librerie e come parte di alcuni altri programmi come Microsoft Outlook, ma l'unico programma standalone che conosco è l'utilità della riga di comando in OpenSSL, che dopo una lunga evoluzione ha alcune peculiarità alle quali ci vuole un po 'per abituarsi. OTOH se vuoi i tuoi programmi per leggere e verificare il file (e possibilmente anche crearlo e firmarlo), l'API della libreria OpenSSL è per lo più semplice e ragionevolmente ben documentata, se stai usando C o C ++ o qualsiasi cosa possa chiamare C. Per Java c'è una buona libreria di terze parti da BouncyCastle. MSDN dice che dot-NET ha il supporto. Qualcos'altro, rendi la tua domanda più specifica.

    
risposta data 09.06.2015 - 17:11
fonte
0

PKCS # 7 è ora standardizzato da IEFT come CMS, RFC5652 .

    
risposta data 10.06.2015 - 20:26
fonte

Leggi altre domande sui tag