Cerca

PKCS7 e CMS

PKCS#7 (RFC-2315) e' lo standard RSA per la busta sicura,

CMS (RFC-2630) e' l'evoluzione del PKCS#7.

Essa permette firma e/o cifratura dei dati, con algoritmi simmetrici o asimmetrici. Permette di apporre piu' firme su uno stesso oggetto (gerarchiche o parallele). Puo' includere i certificati usati per la firma .E' un formato ricorsivo.


La struttura e' la seguente:

contentInfo:
contentType (1) 
content (1)
.
.
.
contentType (N)
content (N)

I campi del tipo contentInfo hanno i seguenti significati:

contentType indica il tipo di contenuto. È un identificatore dell’oggetto ossia una stringa unica di interi assegnati dall’autorità che definisce il tipo di contenuto.

content è il contenuto. Il campo è opzionale. Il suo tipo è definito con l’identificatore dell’oggetto per contentType.


contentType puo' essere di tipo:

data: codifica di una generica sequenza di byte. signedData: dati + firme digitali (1..N) parallele(QUESTO E' QUELLO UTILIZZATO PER IL CLASSICO FILE .p7m) envelopedData:dati cifrati simm. + chiave cifrata con RSA signedAndEnvelopedData:cifratura RSA di (dati + firme digitali) digestData:dati + digest encryptedData:dati cifrati con algoritmo simmetrico


il contentInfo di signedData ha la seguente struttura:

(contentType) signedData 
(content)version  
digestAlgorithm
contentInfo
certificates
cRLs
signerInfo--------------version
issuer+SN
digestAlgorithm
authenticatedAttributes
digestEncryptionAlgorithm
encryptedDigest
unauthnticatedAttrib

spiegazione: digestAlgorithm = contiene gli algoritmi hash utilizzati dai firmatari contentInfo = contenuto in byte certificates = certificati digitali dei firmatari signerInfo = contiene da 1 a N firme parallele issuer+SN = ovvero IssuerAndSerialNumber collegamento al certificato pubblico (nella sezione certificates) authenticatedAttributes = impronta del contenuto, data di firma e altri attributi firmati digestEncryptionAlgorithm = rsaEncrypt o id-RSASSA-PSS encryptedDigest = impronta firmata unauthnticatedAttrib = attributi non firmati, ad esempio controfirme (di tipo signerInfo)


il contentInfo di envelopedData ha la seguente struttura:

(contentType)envelopedData
(content)version
encryptedContentInfo----------------------------contentType
recipientInfo (1)-------versionencryptionAlgorithm
...issuer+SNencryptedContent
recipientInfo (n)encAlgorithm
encKey
Indietro