Zpět na hlavní stránku | Autor: Martin Kot |
SEQUENCE {
contentType
OBJECT IDENTIFIER,
content
[0] EXPLICIT ANY DEFINED BY contentType
OPTIONAL}
Identifikátor objektu specifikuje jednu z možností data,
signedData, envelopedData atd.
Asi si myslite: "K čemu to muže byt". V následující kapitole SignedData uvidíte, že tímto typem se specifikují původní data, která vstupují do procesu elektronického podepisování či šifrování.
Formát zprávy jsme vyjádřili schématicky na následujícím obrázku:
Obrázek 3.9
Poslední položka - elektronický podpis má následující formát:
Obrázek 3.10
Na otázku proč zpráva na počátku (hned po poli verze) obsahuje přehled použitých algoritmů je vcelku jednoduchá odpověď. Cílem bylo vytvořit normu tak, aby se zpráva dala zpracovávat v jednom průchodu. Při verifikaci zprávy je pak možné si připravit příslušné utility před tím, než bude načítán konkrétní kontrolní součet. (Pro každý typ algoritmu je jiná utilita pro verifikaci kontrolního součtu.)
EnvelopedData ::= SEQUENCE {
version INTEGER,
recipientInfos RecipientInfos,
encryptedContentInfo EncryptedContentInfo }
kde
RecipientInfos ::= SET OF RecipientInfo
RecipientInfo ::= SEQUENCE {
version Version,
issuerAndSerialNumber IssuerAndSerialNumber,
keyEncryptionAlgorithm AlgorithmIdentifier,
encryptedKey EncryptedKey }
EncryptedKey ::= OCTET STRING
Stuktura RecipientInfo obsahuje zašifrovaný klíč, kterým se šifrují data přenášené zprávy. Tento klíč je šifrován veřejným klíčem příjemce. Jelikož zpráva může být odesílána nekolikapříjemcům současně, tak zpráva musí pro každého příjemce obsahovat jeden výskyt struktury RecipientInfo (každý příjemce má jiný veřejný šifrovací klíč). Stuktura RecipientInfo se tedy skládá z
EncryptedContentInfo ::= SEQUENCE {
contentType ContentType,
contentEncryptionAlgorithm AlgorithmIdentifier,
encryptedContent
[0] IMPLICIT EncryptedContent OPTIONAL }
EncryptedContent ::= OCTET STRING
Cvičení: pomocí konvertoru si rozpitvejte
libovolnou šifrovanou zprávu odesílanou z Vašeho počítaše.
SignedAndEnvelopedData ::= SEQUENCE {
version Version,
recipientInfos RecipientInfos,
digestAlgorithms DigestAlgorithmIdentifiers,
encryptedContentInfo EncryptedContentInfo,
certificates
[0] IMPLICIT ExtendedCertificatesAndCertificates
OPTIONAL,
crls
[1] IMPLICIT CertificateRevocationLists OPTIONAL,
signerInfos SignerInfos }
DigestedData ::= SEQUENCE {
version Version,
digestAlgorithm DigestAlgorithmIdentifier,
contentInfo ContentInfo,
digest Digest }
Digest ::= OCTET STRING
EncryptedData ::= SEQUENCE {
version Version,
encryptedContentInfo EncryptedContentInfo }
PKCS#10
Tato norma specifikuje žádost o certifikát. Žádost
kromě nepostradatelné verze obsahuje rozlišitelné
jméno žadatele (subject) a žadatelův veřejný
klíč. V případě žádosti o rozšířený
certifikát se připojí atributy. Tyto informace tovoří
strukturu CertificationRequestInfo:
CertificationRequestInfo ::= SEQUENCE {
version INTEGER,
subject Name,
subjectPublicKeyInfo SubjectPublicKeyInfo,
attributes [0] IMPLICIT Attributes }
Attributes ::= SET OF Attribute
Tyto informace (tj. struktura CertificationRequestInfo) musí být podepsána soukromým klíčem žadatele. Tím vznikne vlastní žádost o certifikát podle normy PKCS#7:
CertificationRequest ::= SEQUENCE {
certificationRequestInfo CertificationRequestInfo,
signatureAlgorithm AlgorithmIdentifier,
signature BIT STRING }