V Internetu byla publikována celá řada protokolů specifikujících bezpečnou poštu. Zejména se jednalo o protokoly PEM a MOSS, které se však v praxi neujaly (jejich popis je na přiloženém CD). Prosadil se protokol PGP, avšak z dnešního pohledu se jeví jasným favoritem protokol S/MIME.
Normy RFC-2632 až RFC-2634 jsou již třetí verzí protokolu S/MIME (Secure/Multipurpose Internet Mail Extension). Zatímco druhá verze protokolu S/MIME byla orientována na algoritmy RSA a MD-5 a zprávy dle PKCS#7, tak třetí verze tyto algoritmy a formát PKCS#7 podporuje jen pro zachování zpětné komptability a orientuje se na protokol CMS.
Základními kryptografickými protokoly jsou:
S/MIME je koncertem několika protokolů. Jádrem je zpráva CMS, která je zabalená v MIME zprávě. Navíc je třeba s certifikáty a CRL pracovat s ohledem na to, že zprávy mohou být zpracovávány bez přístupu na Internet (OffLine). Před tím, než sestavíme S/MIME zprávu, podíváme se na jednotlivé protokoly, které se této hry účastní.
S/MIME
používá formát zprávy CMS. Přitom podporuje pouze následující typy CMS zpráv: Data, SignedData a EnvelopedData,
tj. nepodporuje např. autentizovaná data popisovaná též v normě CMS.
V případě elektronicky podepisovaných
zpráv musí být struktura signerInfo verze 1. Prakticky to znamená, že
v případě elektronického podpisu jsou podporovány pouze zprávy zcela
kompatibilní s normou PKCS#7
(což se ovšem netýká zpráv v elektronické obálce).
S/MIME doporučuje používat následující tři
atributy CMS zpráv (viz kap. 8.9.3). Jedná se o podepisované atributy
elektronického podpisu, tj. stuktury signerInfo.
sMIMECapabilities OBJECT IDENTIFIER ::= {pkcs pkcs-9(9) 15}
id-aa-encrypKeyPref
OBJECT IDENTIFIER ::= {id-aa 11}
kde
id-aa OBJECT
IDENTIFIER ::= { pkcs pkcs-9(9) smime(16) 2 }
Podepisované atributy sMIMECapabilities a
sMIMEEncryptionKeyPreference zavádí přímo norma S/MIME.
První atribut signingTime
obsahuje datum a čas podpisu zprávy. Jeho syntaxi jsme popsali v kap.
8.9.3. Zbývající dva atributy zavádí přímo norma S/MIME.
Atributem sMIMECapabilities
informuje odesilatel příjemce o kryptografických a jiných algoritmech, které
podporuje (jaké algoritmy má použít ve své případné odpovědi). Jeho příklad
jsme viděli v kapitole 8.9.4:
SEQUENCE
30
58
OBJECT
:1.2.840.113549.1.9.15 (S/Mime capabilities)
06 09 2a 86 48 86 f7 0d 01 09 0f
SET
31
4b
SEQUENCE
30 49
SEQUENCE
30 0a
OBJECT :des-ede3-cbc
06 08 2a 86 48 86 f7 0d 03 07
SEQUENCE
30 0e
OBJECT :rc2-cbc
06 08 2a 86 48 86 f7 0d 03 02
INTEGER :80
02 02 00 80
SEQUENCE
30 07
OBJECT :des-cbc
06 05 2b 0e 03 02 07
SEQUENCE
30 0d
OBJECT :rc2-cbc
06 08 2a 86 48 86 f7 0d 03 02
INTEGER :28
02 01 28
SEQUENCE
30 07
OBJECT :sha1
06 05 2b 0e 03 02 1a
SEQUENCE
30 0a
OBJECT :md5
06 08 2a 86 48 86 f7 0d 02 05
Jak je popsáno v kap. 8.9.3, tak každý
atribut je sekvencí skládající se z identifikátoru objektu atributu a
množiny hodnot. V případě atributu sMIMECapabilities je množina
hodnot jednoprvková. Jediným prvkem této množiny je specifikace jednotlivých
podporovaných algoritmů. Každý podporovaný algoritmus je specifikován
strukturou SMIMECapability:
SMIMECapability ::=
SEQUENCE {
capabilityID OBJECT IDENTIFIER,
parameters ANY DEFINED BY capabilityID
OPTIONAL }
Tato struktura obsahuje identifikátor objektu příslušného algoritmu a případně parametry.
Poslední
atribut sMIMEEncryptionKeyPreference je důležitý v případě, že odesilatel
používá jiný certifikát pro podepisování a jiný pro šifrování. Častou praxí
totiž je, že odesilatel elektronicky podepíše zprávu a jako součást
elektronicky podepsané zprávy (CMS zprávy) přibalí svůj certifikát. Příjemce
pak využije tento certifikát pro šifrování odpovědi. Potíž je ovšem nastane,
nelze-li tento certifikát použít k šifrování. To je i případ
kvalifikovaných certifikátů, které mají doporučeno, aby v rozšíření
„použití klíče“ měly nastaveno, že se nesmí používat k ničemu jiném než
pouze k elektronickému podepisování. Obdobným případem je, že uživatel
používá např. certifikáty s algoritmem DSS k elektronickému podpisu a
Diffie-Hellmanovy certifikáty pro šifrování.
Řešením je, že se šifrovací certifikát také
přibalí do CMS zprávy a jeho identifikace se uvede v atributu sMIMEEncryptionKeyPreference.
Hodnotou tohoto atributu je pak jedna z následujících možností:
sMIMEEncryptionKeyPreference
::= CHOICE {
issuerAndSerialNumber [0] IssuerAndSerialNumber,
receipentKeyId [1] RecipientKeyIdentifier,
subjectAltKeyIdentifier [2]
SubjectKeyIdentifier
}
Zde je již vidět, že pokud přijmeme nějakou
elektronicky podepsanou zprávu, pak si náš software u odesilatele poznamená
jeho preferované kryptografické atributy a jeho šifrovací certifikát – ten je
buď stejný jako jeho podepisovací certifikát nebo je uveden v atributu sMIMEEncryptionKeyPreference.
Problém je, pokud od adresáta nemáme žádné takové informace. V takovém
případě záleží na tom, zdali máme nějaké zprávy elektronické pošty od adresáta
nebo ne:
·
Pokud máme
nějaké starší poštovní zprávy od tohoto uživatele, pak se snažíme použít
algoritmy, které adresát sám použil v předešlých zprávách. Co se týče
certifikátu, tak v případě, že poštovní zpráva od uživatele obsahuje
certifikát určený výhradně pro podepisování, tak se snažíme ve starších
zprávách nebo v adresářových službách najít certifikát vydaný stejnou CA a
se stejným předmětem certifikátu jako je podepisovací certifikát, který je
možné použít pro šifrování.
·
Pokud nemáme
starší zprávy a adresátův certifikát získáme např. pomocí adresářových služeb,
pak použijeme pro šifrování algoritmus 3DES, a není-li to možné, pak RC2/40.
Adresa elektronické pošty podle RFC-822 musí
být uvedena v certifikátu, kterým je dokument podepsán. Jak software
odesilatele, tak software příjemce musí zkontrolovat shodu této adresy uvedené
v certifikátu s adresou v hlavičce „From:“ nebo „Sender:“
elektronické pošty. Tady je prostor pro různé žertíky, protože adresa
v hlavičce „From“ (resp. „Sender“) může obsahovat libovolný řetězec, pokud
je v tomto řetězci uvedena adresa ve špičatých závorkách. MS Outlook však
uživateli zobrazuje právě ten libovolný řetězec (nikoliv korektní adresu ve
špičatých závorkách).
V certifikátu může být uvedena adresa
elektronické pošty buď v předmětu certifikátu (jedinečné jméno „Common
Name“) nebo v rozšíření SubjectAltName. Obě možnosti jsou podporovány, preferována je však adresa
v rozšíření SubjectAltName. Pokud uživatel totiž používá více
poštovních adres, pak je všechny může do tohoto rozšíření uvést (rozšíření se
uvede vícenásobně).
Jinou otázkou jsou rozšíření certifikátu.
S/MIME vyžaduje, aby software podporoval rozšíření: Basic
Constraints, Key Usage, authorityKeyID, subjectKeyID a subjectAltNames. Ostatní rozšíření podporovat pouze může, tj. ostatní rozšíření nemohou být označena jako kritická, aby bylo zajištěno, že příslušný software pro S/MIME je bude podporovat a neodmítne celý certifikát.
CRL může být součástí zprávy CMS, tj. tím
pádem i zprávy S/MIME. Je pochopitelně pravda, že nejefektivnější je používat
On Line zjištění, jak na tom certifikát je,. např. za využití rozšíření URI
Distribution Points či protokolu OCSP. Avšak mnohdy uživatelé pracují tak,
že se připojí k Internetu, stáhnou si poštu, odpojí se od Internetu a
teprve pak si poštu čtou. V takovém případě On Line komunikace s CA
je nemožná a je dobré vzít za vděk i CRL ze zprávy. Software klienta by měl
umožnit i tato CRL uložit v úložišti CRL počítače pro případné další
použití.
V kapitole 3 jsme popisovali kompozitní typy. Průlom přinesla norma RFC1847, která zavádí kompozitní typy multipart/signed (pro elektronicky podepsané zprávy) a multipart/encrypted (pro zprávy v elektronické obálce), tj. rozšiřuje MIME o hlavičky vhodné pro elektronický podpis a šifrování zprávy. S/MIME pro některé elektronické podpisy používá kompozitní typ multipart/signed, druhý kompozitní typ mulitipart/encrypted S/MIME nepoužívá.
Norma RFC1847 je obecnou normou, tj. specifikuje pouze obecný tvar zprávy, která je elektronicky podepsána nebo šifrována. Kryptografické protokoly jsou tu obecně vyjádřeny pouze řetězcem protocol=typ/subtyp. Algoritmus výpočtu kontrolního součtu pro elektronický podpis se obecně vyjadřuje parametrem micalg=algoritmus.
Následující normy pak rozpracovávají jednotlivé tvary „bezpečných zpráv“, tj. určují konkrétní hodnoty dosazené za typ/subtyp. Např. dnes již téměř zapomenutá norma MOSS používá řetězce application/moss-signature a application/moss-encrypted všude tam, kde je v RFC1847 uveden řetězec typ/subtyp.
Jednotlivé části se pak skládají ze záhlaví odděleného prázdným řádkem od textu části zprávy. Záhlaví je tvořeno jednotlivými hlavičkami.
Obrázek 10-1 schématicky znázorňuje tvar elektronicky podepsané zprávy.
Obr. 10-1 Struktura elektronicky podepsané zprávy elektronické pošty
Zajímavé je si uvědomit, že hlavička Content-Type se může vyskytnout až třikrát:
Jako příklad si zopakujeme příklad elektronicky podepsané zprávy z kap. 8.9.4, který je příkladem S/MIME zprávy. V tomto případě je protocol="application/x-pkcs7-signature" a micalg=SHA1:
…
From: "Libor
Dostalek" dostalek@pvt.cz
To: test@t1.pvt.cz
Subject: Banka
Date: Wed, 7 Mar
2001.11:32:58 +0100
MIME-Version:.1.0
Message-ID: 000c01c0a6f1$fb6c6cd0$c8252fc3@libor
Content-Type:
multipart/signed;
protocol="application/x-pkcs7-signature";
micalg=SHA1;
boundary="----=_NextPart_000_0027_01C0A6FA.5C17C3B0"
X-Priority: (Normal)
X-MSMail-Priority:
Normal
X-Mailer: Microsoft
Outlook CWS, Build 9.0.2416 (9.0.2911.0)
X-MimeOLE: Produced
By Microsoft MimeOLE V5.00.2919.6700
Importance: Normal
Toto je zpráva ve formátu MIME obsahující
více částí
------=_NextPart_000_0027_01C0A6FA.5C17C3B0
Content-Type:
text/plain;
charset="iso-8859-2"
Content-Transfer-Encoding:
7bit
Banka na namesti v 11:00
Sef
------=_NextPart_000_0027_01C0A6FA.5C17C3B0
Content-Type:
application/x-pkcs7-signature*);
name="smime.p7s"
Content-Transfer-Encoding:
base64
Content-Disposition:
attachment;
filename="smime.p7s"
MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAMYICOjCCAjYC
AQEwZDBdMQswCQYDVQQGEwJDWjERMA8GA1UEChMIUFZUIGEucy4xETAPBgNVBAsTCDIwMDAwOTAx
MSgwJgYDVQQDEx9DZXJ0aWZpa2FjbmkgYXV0b3JpdGEgSS5DQSAwMDA5AgMB4BIwCQYFKw4DAhoF
AKCCASwwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMDEwMzA3MTAz
MjU4WjAjBgkqhkiG9w0BCQQxFgQUiTyLOzG09qg6S71Ob5OHiiSyYUgwWAYJKoZIhvcNAQkPMUsw
STAKBggqhkiG9w0DBzAOBggqhkiG9w0DAgICAIAwBwYFKw4DAgcwDQYIKoZIhvcNAwICASgwBwYF
Kw4DAhowCgYIKoZIhvcNAgUwcwYJKwYBBAGCNxAEMWYwZDBdMQswCQYDVQQGEwJDWjERMA8GA1UE
ChMIUFZUIGEucy4xETAPBgNVBAsTCDIwMDAwOTAxMSgwJgYDVQQDEx9DZXJ0aWZpa2FjbmkgYXV0
b3JpdGEgSS5DQSAwMDA5AgMB4BIwDQYJKoZIhvcNAQEBBQAEgYBjQe3gKqprZNG20K3O9bBEPWPx
MiHfiupGBw799nMPFuJThITq8aR/JnPusFw9HJMFF+TrAxxk4f9jlYFaVDm9HdrdjODAGh1tP91x
jZ+1By37iibmNV2C23Px1Vq+aoZON0ZDEIqjqnm0D2ruqqrdCa9rpx/j8Pb4nayRi0d2HQAAAAAA
AA==
------=_NextPart_000_0027_01C0A6FA.5C17C3B0--
Dále norma RFC1847 specifikuje i zprávu typu Multipart/Encrypted, kterou protokol S/MIME nevyužívá. Její tvar je analogický tvaru zprávy elektronicky podepsané. Opět se zpráva skládá ze dvou částí:
Schématicky je tvar takovéto zprávy znázorněn na následujícím obrázku:
Obr. 10-2 Struktura šifrované zprávy elektronické pošty typu Multipart/Encrypted. S/MIME ji nepoužívá! – S/MIME pro šifrované zprávy používá jednoduchý typ:
„Content-Type: application/x-pkcs7-mime“
Mechanismus vytvoření zprávy protokolu S/MIME je znázorněn na obr. 10.3. Zpráva je nejprve zabezpečena protokolem CMS, pak kódována Base64 do sedmibitového tvaru a nakonec obalena hlavičkami MIME a SMTP a odeslána elektronickou poštou.
Obr. 10-3 Mechanismus vytvoření zprávy S/MIME
S/MIME zprávy buďto podepisuje nebo vkládá do elektronické obálky (šifruje). Pokud chceme provést obě operace, tj. zprávu jak podepsat, tak i šifrovat, tak se např. elektronicky podepsaná zpráva vkládá do elektronické obálky či naopak. Tj. vytvoří se elektronicky podepsaná S/MIME zpráva, která se jako data vloží do elektronické obálky – též S/MIME zprávy. Teoreticky norma připouští i opačnou možnost, tj. zprávu v elektronické obálce následně podepsat, ale tato varianta se nedoporučuje. Vždy je totiž lepší podepisovat data v původní podobě, a pak je případně zašifrovat, než podepisovat už zašifrovaná data. Vztah mezi podpisem a interpretací dat pak nemusí být zcela doložitelný (např. u soudu).
Vnoření jedné S/MIME zprávy do druhé je teoreticky možné opakovat i
vícekrát. V kapitole o rozšířeném S/MIME uvidíme, že elektronicky
podepsaná S/MIME zpráva se vkládá do elektronické obálky a výsledek se ještě
elektronicky podepisuje, tj. proces vytváření S/MIME zprávy se provede třikrát.
Asi čekáte, že začneme popisovat zprávy Multipart/signed, ale to je omyl. S/MIME používá kompozitní zprávy skládající se ze dvou částí jen v dále zmíněném případě. S/MIME používá zejména jednoduché zprávy využívající typ:
Content-Type:
application/pkcs7-mime
A to jak pro elektronicky podepisované zprávy, tak i pro
zprávy šifrované. Klasický případ S/MIME zprávy proto je:
From:
To:
MIME-Version:
1.0
Content-Type:
application/pkcs7-mime
Content-Transfer-Encoding:
base64
4VQpfyF467GhIGfHfYT6jH77n8HHGghyHhHUujhJh756tbB9HGTrfvbnj
n8HHGTrfvhJhjH776tbB9HG4VQbnj7567GhIGfHfYT6ghyHhHUujpfyF4
7GhIGfHfYT64VQbnj756
. . .
Typ application/pkcs7-mime může mít několik volitelných parametrů:
· Parametrem name můžeme specifikovat jméno souboru (stejný význam má i parametr filename v případné hlavičce Content-Disposition). Jméno souboru může mít nejvýše 8 znaků a 3 znaky rozšíření. Jako jméno souboru se téměř vždy používá „smime“ a rozšíření může být:
o .p7m pro MIME typ „Application/pkcs7-mime“ v případě elektronicky podepsané zprávy nebo zprávy v elektronické obálce.
o .p7c pro MIME typ „Application/pkcs7-mime“ v případě, že zpráva obsahuje pouze degenerovanou CMS zprávu obsahující pouze certifikáty.
o .p7s pro MIME typ „Application/pkcs7-signature“, tj. pro kompozitní zprávu.
· Parametr smime-type obsahuje informaci o obsahu zprávy. Tj. specifikuje, zda-li se jedná o podepsanou či šifrovanou zprávu. Ano, tato informace se dá poznat z vnitřku zprávy, ale tato hlavička může usnadnit práci poštovního klienta při zobrazování různých ikonek se symboly elektronického podpisu či šifrování na Vašem PC, aniž by docházelo ke komplikovanému rozboru zprávy. Parametr smime-type nabývá hodnot:
o enveloped-data pro zprávu v elektronické obálce.
o signed-data pro elektronicky podepsaná data.
o certs-only pro degenerovanou zprávu obsahující pouze certifikáty.
Příklad (z RFC-2633):
Content-Type:
application/pkcs7-mime; smime-type=enveloped-data;
name=smime.p7m
Content-Transfer-Encoding:
base64
Content-Disposition:
attachment; filename=smime.p7m
rfvbnj756tbBghyHhHUujhJhjH77n8HHGT9HG4VQpfyF467GhIGfHfYT6
7n8HHGghyHhHUujhJh4VQpfyF467GhIGfHfYGTrfvbnjT6jH7756tbB9H
f8HHGTrfvhJhjH776tbB9HG4VQbnj7567GhIGfHfYT6ghyHhHUujpfyF4
0GhIGfHfQbnj756YT64V
No a nyní jsme u problému elektronicky podepsané zprávy. Zpráva vytvořená podle CMS je na první pohled velice těžko čitelná - je to BER kódovaný řetězec. To nevadí v případě, že zpráva bude přijata a interpretována programem, který ji dešifruje, verifikuje a výsledek zobrazí uživateli v čitelném tvaru. Ale mnohdy je třeba zprávy pouze elektronicky podepisovat a rozesílat nejrůznějším adresátům, přitom jen někteří budou používat pro čtení programy podporující S/MIME.
Mnohým adresátům by stačilo si zprávu přečíst bez verifikace elektronického podpisu. Avšak formát application/pkcs7-mime je běžnými klienty nečitelný (zobrazí jej ve tvaru „rozsypaný čaj“ s textem někde uprostřed). Proto kromě formátu application/pkcs7-mime nabízí S/MIME pro elektronický podpis druhou možnost, kdy zpráva je rozdělena pomocí multipart/signed na dvě části: na čitelný text a samostatný „nečitelný“ elektronický podpis podle normy CMS. Jelikož elektronický podpis neobsahuje podepisovaná data (položka eContent v CMS zprávě je prázdná), tak se tento elektronický podpis nazývá externím elektronickým podpisem.
S externě podepsanou elektronickou zprávou jsme se
setkali v kap. 2.3, přesto si její tvar alespoň schématicky zopakujme:
From:
To:
MIME-Version:
1.0
Content-Type:
multipart/signed; protocol=application/pkcs7-signature;
micalg=rsa-md5; boundary=hranice
--hranice
Content-Type:
text/plain
Content-transfer-Encoding:
Text v čitelné podobě.
V případě, že text zprávy není v ASCII, pak je ještě před podepisováním
kódován Base64 nebo quoted-printable (tato informace se pochopitelně doplní do
hlavičky Content-Transfer-Encoding).
--hranice
Content-Type:
application/pkcs7-signature
Content-Transfer-Encoding:
base64
ghyHhHUujhJhjH77n8HHGTrfvbnj756tbB9HG4VQpfyF467GhIGfHfYT6
4VQpfyF467GhIGfHfYT6jH77n8HHGghyHhHUujhJh756tbB9HGTrfvbnj n8HHGTrfvhJhjH776tbB9HG4VQbnj7567GhIGfHfYT6ghyHhHUujpfyF4
7GhIGfHfYT64VQbnj756
...
--hranice--
Tato kapitola obsahuje komentovaný výpis komunikace bezpečnou poštou. Nejprve odesilatel odesílá bezvýznamnou zprávu (v mém případě úplně prázdnou zprávu), aby dopravil adresátovi svůj certifikát. Odesilatel mu pak odpoví již šifrovanou zprávou. Všimněte si několika aspektů:
· Ač jsem odeslal prázdnou zprávu, tak MS Outlook 2000 (jenž jsem použil) nevygeneroval degenerovanou CMS zprávu signedData, ale úplnou zprávu. Vysvětluji si to tím, že u degenerované zprávy signedData není elektronický podpis, proto by nemohl použít podepisované parametry, které použít chtěl.
· V poštovním klientovi (obr. 10-4) jsem si nastavil, že chci používat jiný certifikát jako podepisovací a jiný jako šifrovací. V odesílané zprávě signedData jsou proto oba certifikáty.
· Za velice důležitou věc považuji si všimnout, kolika adresátům je zpráva určena (v našem případě jednomu) a kolik je v odpovědi struktur recipientInfo. Jsou tam dvě. Proč? Pokud si je prohlédnete, tak jedna je pro adresáta a druhá pro odesilatele. Tj. i když odesilatel není adresátem, tak je ve zprávě envelopedData jedna struktura recipientInfo pro něj. Co by se stalo, kdyby tomu tak nebylo? V takovém případě byste si nemohli prohlížet ve vašem poštovním klientovi složku „Odeslaná pošta“. Nedostali byste se k symetrickému šifrovacímu klíči, kterým je zpráva zašifrována. Že tomu tak opravdu je, lze ověřit jednoduchým příkladem. Pošlete někomu šifrovanou zprávu a když se podíváte do složky „Odeslaná pošta“, tak ji přečtete. Když ovšem si vyexportujete šifrovací certifikát i se soukromým šifrovacím klíčem a zrušíte jej v úložišti vašeho PC, pak tutéž zprávu již nepřečtete. (Pote si nezapomeňte certifikát zpátky importovat!) Je velmi užitečné si tuto skutečnost uvědomit, protože mohou nastat situace, kdy není zašifrování vaším vlastním klíčem žádoucí.
Obr. 10-4 MS Outlook jsem nastavil tak, že jiný certifikát používám k elektronickému podpisu (s „X“) a jiný nabízím jako šifrovací certifikát
Následující příklad jsem odchytil MS Network Monitorem (programem „Sledování sítě“). Některé pro nás nepodstatné SMTP hlavičky jsem vypustil, aby se příklad stal přehlednějším; obdobně z šifrované odpovědi vždy uvádím jen začátky a konce šifrované zprávy, protože zpráva je šifrována a tudíž pro nás nedostupná:
From: =?iso-8859-2?Q?Libor Dost=E1lek?=
<dostalek@pvt.cz>
To: test@t1.pvt.cz
Subject: Test
Date: Wed, 28 Mar 2001 14:26:22 +0200
MIME-Version: 1.0
Content-Type: multipart/signed;
protocol=application/x-pkcs7-signature;
micalg=SHA1; boundary=----=_NextPart_000_000E_01C0B792.D987AE70
Toto je zpráva ve formátu MIME obsahující více částí
------=_NextPart_000_000E_01C0B792.D987AE70
Content-Type: text/plain; charset=iso-8859-2
Content-Transfer-Encoding: 7bit
------=_NextPart_000_000E_01C0B792.D987AE70
Content-Type:.application/x-pkcs7-signature;
name=smime.p7s
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=smime.p7s
MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIFrzCCApYw
ggH/oAMCAQICAwHgEjANBgkqhkiG9w0BAQQFADBdMQswCQYDVQQGEwJDWjERMA8GA1UEChMIUFZU
IGEucy4xETAPBgNVBAsTCDIwMDAwOTAxMSgwJgYDVQQDEx9DZXJ0aWZpa2FjbmkgYXV0b3JpdGEg
SS5DQSAwMDA5MB4XDTAxMDIxMjEwNDA1MVoXDTAxMDgxNDEwNDA1MVowdDELMAkGA1UEBhMCQ1ox
ETAPBgNVBAoTCFBWVCBhLnMuMRkwFwYDVQQLExBDZXNrZSBCdWRlam92aWNlMRcwFQYDVQQDEw5M
aWJvciBEb3N0YWxlazEeMBwGCSqGSIb3DQEJARYPZG9zdGFsZWtAcHZ0LmN6MIGfMA0GCSqGSIb3
DQEBAQUAA4GNADCBiQKBgQCt55MtKxB4DBfiiNe9xLT0Ob8yOSRg8WF/sf5ZlsE6XQ3i43mNbu7D
dB36FxwCwW4/DhflodSVpTU0gFy0lxehwZQWKjIRjj5Y3eiiEAMcC+z+g51HBqyfp1GAaAetGtry
Te4e/1j7iF1UhSPVeCmQ21+s260rApB/BxfQQHDmKwIDAQABo00wSzBJBgNVHR8EQjBAMB6gHKAa
hhhodHRwOi8vY2EuaWNhLmN6L2NybC5jZ2kwHqAcoBqGGGh0dHA6Ly9wcy5pcGIuY3ovY3JsLmNn
aTANBgkqhkiG9w0BAQQFAAOBgQAoCsrTM+GR1LuY9dH7qlkYdf1HppTkxPXfS/YBJ+dov9kaqS91
2ljY/XrbJla6DOmzXLduxxNfCHy8+zt8zchbal2oy+vv3EsEaAYhywL8NVt8ohgNkY0spXgsszQ3
8Ibi0vnEX54OJw9AQ6oBQd5G7OR4DLkUqp9/OCqNThw86zCCAxEwggJ6oAMCAQICAwEnezANBgkq
hkiG9w0BAQUFADBOMQswCQYDVQQGEwJDWjERMA8GA1UEChMIUFZUIGEucy4xEDAOBgNVBAMTB0NB
LVBWVDExGjAYBgkqhkiG9w0BCQEWC29wZXJAaWNhLmN6MB4XDTAxMDMyODExNDAzOVoXDTAxMDQx
MTExNDAzOVowgYcxCzAJBgNVBAYTAkNaMRQwEgYDVQQIEwtOZXRvbGlja2EgOTEZMBcGA1UEBxMQ
Q2Vza2UgQnVkZWpvdmljZTEMMAoGA1UEChMDUFZUMRkwFwYDVQQDExBMaWJvciBEb3N0YWxlayBY
MR4wHAYJKoZIhvcNAQkBFg9kb3N0YWxla0BwdnQuY3owgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
AoGBAKkyXYzBIR7BZ6pqm5zW6k++ZBtDcHyyLz/EgmrDURHG/QkQA0/c9HV3ZAxk08LePWjJHINL
PD0XAQjQNA1qtRiMCatEucsgHMxbG/UYYII1h/x32v/UCghvnTQrihfE86uxtJhOb6z1JdUBNbM2
hZsKtkWbsKWGjVtyCVBpaXlNAgMBAAGjgcIwgb8wXQYDVR0fBFYwVDAooCagJIYiaHR0cDovL2Nh
LmljYS5jei9jcmwuY2dpP2FrY2U9dGVzdDAooCagJIYiaHR0cDovL3BzLmlwYi5jei9jcmwuY2dp
P2FrY2U9dGVzdDBeBgNVHSAEVzBVMFMGCisGAQQBs2EBAQMwRTBDBggrBgEFBQcCAjA3GjVKZW4g
cHJvIFRFU1RPVkFDSSB1Y2VseS4gKE9ubHkgZm9yIFRFU1RJTkcgcHVycG9zZXMuKTANBgkqhkiG
9w0BAQUFAAOBgQArrPlP8EAFFRLm1KNRVijffV6JoU1G92d2At365V+7SFSRT9OfZ/Op1VaVHQ1K
ZLObW0of4kbT06Ma0ZucgjjBUNz2rT/OXgMDis8Xxy+1zjfQaRIyPxxoBPd81168Id/7rLYgE6QE
4CXuOEKu6M/o30BzGJT6FzYgR3IlwMgauDGCAiswggInAgEBMFUwTjELMAkGA1UEBhMCQ1oxETAP
BgNVBAoTCFBWVCBhLnMuMRAwDgYDVQQDEwdDQS1QVlQxMRowGAYJKoZIhvcNAQkBFgtvcGVyQGlj
YS5jegIDASd7MAkGBSsOAwIaBQCgggEsMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZI
hvcNAQkFMQ8XDTAxMDMyODEyMjQ1MFowIwYJKoZIhvcNAQkEMRYEFB9V213GmaU8a7KB5N9oB5Si
qWCAMFgGCSqGSIb3DQEJDzFLMEkwCgYIKoZIhvcNAwcwDgYIKoZIhvcNAwICAgCAMAcGBSsOAwIH
MA0GCCqGSIb3DQMCAgEoMAcGBSsOAwIaMAoGCCqGSIb3DQIFMHMGCSsGAQQBgjcQBDFmMGQwXTEL
MAkGA1UEBhMCQ1oxETAPBgNVBAoTCFBWVCBhLnMuMREwDwYDVQQLEwgyMDAwMDkwMTEoMCYGA1UE
AxMfQ2VydGlmaWthY25pIGF1dG9yaXRhIEkuQ0EgMDAwOQIDAeASMA0GCSqGSIb3DQEBAQUABIGA
LxMWzzhYRNuUbdWe2NX1HR9IxK/A5XT0hAFGNTIPD4qvrg0g0Y9oOJw7QTnqMS8bhzhdfeY5VIrf
Q2Cq+qJDDd6EuXXbjL2AkkcQ9Zz+L3rJTwCzMrMnIfuxK0oL8oxfgYLEOpqA96ojVmdR3V2owxNn
XaTw6CneV0la/gWXY3UAAAAAAAA=
------=_NextPart_000_000E_01C0B792.D987AE70—-
·
Vnější obálkou CMS zprávy je sekvence skládající se
z identifikátoru objektu specifikujícího typ zprávy a obsahu zprávy, jenž
je typu „specifická 0“ (viz obr. 8-16):
SEQUENCE
30 80
OBJECT :pkcs7-signedData
06 09 2a
86 48 86 f7 0d 01 07 02
cont [ 0
]
a0 80
· CMS zpráva SignedData je sekvence začínají verzí:
SEQUENCE
30 80
INTEGER :01
02 01
01
· Další položkou CMS zprávy SignedData je množina algoritmů použitých pro výpočet kontrolního součtu:
SET
31 0b
SEQUENCE
30 09
OBJECT :sha1
06
05 2b 0e 03 02 1a
NULL
05
00
· Dále následuje položka s podepisovanými daty. V našem případě je prázdná, tj. jedná se buď o externí podpis nebo o degenerovanou zprávu SignedData:
SEQUENCE
30 80
OBJECT :pkcs7-data
06 09
2a 86 48 86 f7 0d 01 07 01
EOC
00 00
· Dále následuje položka typu „specifická 0“ obsahující množinu certifikátů:
cont [ 0
]
a0 82
05 af
SEQUENCE
30 82
02 96
· První certifikát (CN = Libor Dostalek)
SEQUENCE
30
82 01 ff
cont [
0 ]
a0
03
INTEGER :02
02
01 02
INTEGER :01E012
02
03 01 e0 12
SEQUENCE
30
0d
OBJECT :md5WithRSAEncryption
06
09 2a 86 48 86 f7 0d 01 01 04
NULL
05
00
SEQUENCE
30
5d
SET
31
0b
SEQUENCE
30 09
OBJECT :countryName
06 03 55 04 06
PRINTABLESTRING :CZ
13 02 43 5a
SET
31
11
SEQUENCE
30 0f
OBJECT
:organizationName
06 03 55 04 0a
PRINTABLESTRING :PVT a.s.
13 08 50 56 54 20 61 2e 73 2e
SET
31
11
SEQUENCE
30 0f
OBJECT
:organizationalUnitName
06 03 55 04 0b
PRINTABLESTRING :20000901
13 08 32 30 30 30 30 39 30 31
SET
31
28
SEQUENCE
30 26
OBJECT :commonName
06 03 55 04 03
PRINTABLESTRING :Certifikacni
autorita I.CA 0009
13 1f 43 65 72 74 69 66 69 6b 61 63 6e 69 20 61 75 74 6f 72
69 74 61 20 49 2e 43 41 20 30 30 30 39
SEQUENCE
30
1e
UTCTIME :010212104051Z
17
0d 30 31 30 32 31 32 31 30 34 30 35 31 5a
UTCTIME :010814104051Z
17
0d 30 31 30 38 31 34 31 30 34 30 35 31 5a
SEQUENCE
30
74
SET
31
0b
SEQUENCE
30 09
OBJECT :countryName
06 03 55 04 06
PRINTABLESTRING :CZ
13 02 43 5a
SET
31
11
SEQUENCE
30 0f
OBJECT
:organizationName
06 03 55 04 0a
PRINTABLESTRING :PVT a.s.
13 08 50 56 54 20 61 2e 73 2e
SET
31
19
SEQUENCE
30 17
OBJECT :organizationalUnitName
06 03 55 04 0b
PRINTABLESTRING :Ceske
Budejovice
13 10 43 65 73 6b 65 20 42 75 64 65 6a 6f 76 69 63 65
SET
31
17
SEQUENCE
30 15
OBJECT :commonName
06 03 55 04 03
PRINTABLESTRING :Libor Dostalek
13 0e 4c 69 62 6f 72 20 44 6f 73 74 61 6c 65 6b
SET
31
1e
SEQUENCE
30 1c
OBJECT :emailAddress
06 09 2a 86 48 86 f7 0d 01 09 01
IA5STRING
:dostalek@pvt.cz
16 0f 64 6f 73 74 61 6c 65 6b 40 70 76 74 2e 63 7a
SEQUENCE
30 81 9f
SEQUENCE
30
0d
OBJECT :rsaEncryption
06 09 2a 86 48 86 f7 0d 01 01 01
NULL
05 00
BIT
STRING
03
81 8d 00 30 81 89 02 81 81 00 ad e7 93 2d 2b 10 78 0c 17
e2
88 d7 bd c4 b4 f4 39 bf 32 39 24 60 f1 61 7f b1 fe 59 96
c1
3a 5d 0d e2 e3 79 8d 6e ee c3 74 1d fa 17 1c 02 c1 6e 3f
0e
17 e5 a1 d4 95 a5 35 34 80 5c b4 97 17 a1 c1 94 16 2a 32
11
8e 3e 58 dd e8 a2 10 03 1c 0b ec fe 83 9d 47 06 ac 9f a7
51
80 68 07 ad 1a da f2 4d ee 1e ff 58 fb 88 5d 54 85 23 d5
78
29 90 db 5f ac db ad 2b 02 90 7f 07 17 d0 40 70 e6 2b 02
03
01 00 01
cont [
3 ]
a3 4d
SEQUENCE
30
4b
SEQUENCE
30 49
OBJECT :X509v3 CRL
Distribution Points
06 03 55 1d 1f
OCTET STRING
04 42 30 40 30 1e a0 1c a0 1a 86 18 68 74 74 70 3a 2f 2f 63
61 2e 69 63 61 2e 63 7a 2f 63 72 6c 2e 63 67 69 30 1e a0 1c
a0 1a 86 18 68 74 74 70 3a 2f 2f 70 73 2e 69 70 62 2e 63 7a
2f 63 72 6c 2e 63 67 69
SEQUENCE
30
0d
OBJECT
:md5WithRSAEncryption
06
09 2a 86 48 86 f7 0d 01 01 04
NULL
05
00
BIT
STRING
03
81 81 00 28 0a ca d3 33 e1 91 d4 bb 98 f5 d1 fb aa 59 18
75
fd 47 a6 94 e4 c4 f5 df 4b f6 01 27 e7 68 bf d9 1a a9 2f
75
da 58 d8 fd 7a db 26 56 ba 0c e9 b3 5c b7 6e c7 13 5f 08
7c
bc fb 3b 7c cd c8 5b 6a 5d a8 cb eb ef dc 4b 04 68 06 21
cb
02 fc 35 5b 7c a2 18 0d 91 8d 2c a5 78 2c b3 34 37 f0 86
e2
d2 f9 c4 5f 9e 0e 27 0f 40 43 aa 01 41 de 46 ec e4 78 0c
b9
14 aa 9f 7f 38 2a 8d 4e 1c 3c eb
· Druhý certifikát (CN = Libor Dostalek X)
SEQUENCE
30 82
03 11
SEQUENCE
30
82 02 7a
cont [
0 ]
a0
03
INTEGER :02
02
01 02
INTEGER :01277B
02
03 01 27 7b
SEQUENCE
30
0d
OBJECT
:sha1WithRSAEncryption
06
09 2a 86 48 86 f7 0d 01 01 05
NULL
05
00
SEQUENCE
30
4e
SET
31
0b
SEQUENCE
30 09
OBJECT :countryName
06 03 55 04 06
PRINTABLESTRING :CZ
13 02 43 5a
SET
31
11
SEQUENCE
30 0f
OBJECT
:organizationName
06 03 55 04 0a
PRINTABLESTRING :PVT a.s.
13 08 50 56 54 20 61 2e 73 2e
SET
31
10
SEQUENCE
30 0e
OBJECT :commonName
06 03 55 04 03
PRINTABLESTRING :CA-PVT1
13 07 43 41 2d 50 56 54 31
SET
31
1a
SEQUENCE
30 18
OBJECT :emailAddress
06 09 2a 86 48 86 f7 0d 01 09 01
IA5STRING :oper@ica.cz
16 0b 6f 70 65 72 40 69 63 61 2e 63 7a
SEQUENCE
30
1e
UTCTIME :010328114039Z
17
0d 30 31 30 33 32 38 31 31 34 30 33 39 5a
UTCTIME :010411114039Z
17
0d 30 31 30 34 31 31 31 31 34 30 33 39 5a
SEQUENCE
30
81 87
SET
31
0b
SEQUENCE
30 09
OBJECT :countryName
06 03 55 04 06
PRINTABLESTRING :CZ
13 02 43 5a
SET
31
14
SEQUENCE
30 12
OBJECT
:stateOrProvinceName
06 03 55 04 08
PRINTABLESTRING :Netolicka 9
13 0b 4e 65 74 6f 6c 69 63 6b 61 20 39
SET
31
19
SEQUENCE
30 17
OBJECT :localityName
06 03 55 04 07
PRINTABLESTRING :Ceske
Budejovice
13 10 43 65 73 6b 65 20 42 75 64 65 6a 6f 76 69 63 65
SET
31
0c
SEQUENCE
30 0a
OBJECT
:organizationName
06 03 55 04 0a
PRINTABLESTRING :PVT
13 03 50 56 54
SET
31
19
SEQUENCE
30 17
OBJECT :commonName
06 03 55 04 03
PRINTABLESTRING :Libor Dostalek
X
13 10 4c 69 62 6f 72 20 44 6f 73 74 61 6c 65 6b 20 58
SET
31
1e
SEQUENCE
30 1c
OBJECT :emailAddress
06 09 2a 86 48 86 f7 0d 01 09 01
IA5STRING
:dostalek@pvt.cz
16 0f 64 6f 73 74 61 6c 65 6b 40 70 76
74 2e 63 7a
SEQUENCE
30
81 9f
SEQUENCE
30
0d
OBJECT :rsaEncryption
06 09 2a 86 48 86 f7 0d 01 01 01
NULL
05 00
BIT
STRING
03
81 8d 00 30 81 89 02 81 81 00 a9 32 5d 8c c1 21 1e c1 67
aa
6a 9b 9c d6 ea 4f be 64 1b 43 70 7c b2 2f 3f c4 82 6a c3
51
11 c6 fd 09 10 03 4f dc f4 75 77 64 0c 64 d3 c2 de 3d 68
c9
1c 83 4b 3c 3d 17 01 08 d0 34 0d 6a b5 18 8c 09 ab 44 b9
cb
20 1c cc 5b 1b f5 18 60 82 35 87 fc 77 da ff d4 0a 08 6f
9d
34 2b 8a 17 c4 f3 ab b1 b4 98 4e 6f ac f5 25 d5 01 35 b3
36
85 9b 0a b6 45 9b b0 a5 86 8d 5b 72 09 50 69 69 79 4d 02
03
01 00 01
cont [
3 ]
a3
81 c2
SEQUENCE
30
81 bf
SEQUENCE
30 5d
OBJECT :X509v3 CRL
Distribution Points
06 03 55 1d 1f
OCTET STRING
04 56 30 54 30 28 a0 26 a0 24 86 22 68 74 74 70 3a 2f 2f 63
61 2e 69 63 61 2e 63 7a 2f 63 72 6c 2e 63 67 69 3f 61 6b 63
65 3d 74 65 73 74 30 28 a0 26 a0 24 86 22 68 74 74 70 3a 2f
2f 70 73 2e 69 70 62 2e 63 7a 2f 63 72 6c 2e 63 67 69 3f 61
6b 63 65 3d 74 65 73 74
SEQUENCE
30 5e
OBJECT :X509v3
Certificate Policies
06 03 55 1d 20
OCTET STRING
04 57 30 55 30 53 06 0a 2b 06 01 04 01 b3 61 01 01 03 30 45
30 43 06 08 2b 06 01 05 05 07 02 02 30 37 1a 35 4a 65 6e 20
70 72 6f 20 54 45 53 54 4f 56 41 43 49 20 75 63 65 6c 79 2e
20 28 4f 6e 6c 79 20 66 6f 72 20
54 45 53 54 49 4e 47 20 70
75 72 70 6f 73 65 73 2e 29
SEQUENCE
30
0d
OBJECT
:sha1WithRSAEncryption
06
09 2a 86 48 86 f7 0d 01 01 05
NULL
05
00
BIT
STRING
03
81 81 00 2b ac f9 4f f0 40 05 15 12 e6 d4 a3 51 56 28 df
7d
5e 89 a1 4d 46 f7 67 76 02 dd fa e5 5f bb 48 54 91 4f d3
9f
67 f3 a9 d5 56 95 1d 0d 4a 64 b3 9b 5b 4a 1f e2 46 d3 d3
a3
1a d1 9b 9c 82 38 c1 50 dc f6 ad 3f ce 5e 03 03 8a cf 17
c7
2f b5 ce 37 d0 69 12 32 3f 1c 68 04 f7 7c d7 5e bc 21 df
fb
ac b6 20 13 a4 04 e0 25 ee 38 42 ae e8 cf e8 df 40 73 18
94
fa 17 36 20 47 72 25 c0 c8 1a b8
· Jelikož za touto položkou následují další položky, tak se nejedná o degenerovanou zprávu SignedData. Následující položka není typu „specifická 1“, takže se již musí jednat o množinu elektronických podpisů:
SET
31 82
02 2b
· První elektronický podpis:
SEQUENCE
30 82
02 27
INTEGER :01 (Verze struktury signerInfo)
02
01 01
· Následuje identifikace certifikátu určeného k verifikaci elektronického podpisu. Jelikož je verze 1, tak je certifikát určen jedinečným jménem vydavatele a číslem certifikátu:
SEQUENCE
30
55
SEQUENCE
30
4e
SET
31
0b
SEQUENCE
30 09
OBJECT :countryName
06 03 55 04 06
PRINTABLESTRING :CZ
13 02 43 5a
SET
31
11
SEQUENCE
30 0f
OBJECT
:organizationName
06 03 55 04 0a
PRINTABLESTRING :PVT a.s.
13 08 50 56 54 20 61 2e 73 2e
SET
31
10
SEQUENCE
30 0e
OBJECT :commonName
06 03 55 04 03
PRINTABLESTRING :CA-PVT1
13 07 43 41 2d 50 56 54 31
SET
31
1a
SEQUENCE
30 18
OBJECT :emailAddress
06 09 2a 86 48 86 f7 0d 01 09 01
IA5STRING :oper@ica.cz
16 0b 6f 70 65 72 40 69 63 61 2e 63 7a
INTEGER :01277B
02
03 01 27 7b
· Následuje algoritmus použitý pro výpočet kontrolního součtu:
SEQUENCE
30
09
OBJECT :sha1
06
05 2b 0e 03 02 1a
NULL
05
00
· Jelikož je následující položka typu „specifická 0“, tak se jedná o podepisované atributy:
cont [ 0 ]
a0 82 01 2c
· Prvním podepisovaným atributem je atribut contentType:
SEQUENCE
30
18
OBJECT :contentType
06
09 2a 86 48 86 f7 0d 01 09 03
SET
31
0b
OBJECT :pkcs7-data
06 09 2a 86 48 86 f7 0d 01 07 01
· Druhým podepisovaným atributem je datum a čas podpisu (atribut signingTime):
SEQUENCE
30 1c
OBJECT :signingTime
06 09 2a 86 48 86 f7 0d 01 09 05
SET
31 0f
UTCTIME :010328122450Z
17 0d 30 31 30 33 32 38 31 32 32
34 35 30 5a
· Třetím podepisovaným atributem je kontrolní součet ze zasílané zprávy (atribut messageDigest):
SEQUENCE
30
23
OBJECT :messageDigest
06
09 2a 86 48 86 f7 0d 01 09 04
SET
31
16
OCTET STRING
04 14 1f 55 db 5d c6 99 a5 3c 6b b2 81 e4 df 68 07 94 a2 a9
60 80
· Dalším podepisovaným atributem je atribut smimeCapabilities:
SEQUENCE
30
58
OBJECT
:1.2.840.113549.1.9.15
06
09 2a 86 48 86 f7 0d 01 09 0f
SET
31
4b
SEQUENCE
30 49
SEQUENCE
30 0a
OBJECT :des-ede3-cbc
06 08 2a 86 48 86 f7 0d 03 07
SEQUENCE
30 0e
OBJECT :rc2-cbc
06 08 2a 86 48 86 f7 0d 03 02
INTEGER :80
02 02 00 80
SEQUENCE
30 07
OBJECT :des-cbc
06 05 2b 0e 03 02 07
SEQUENCE
30 0d
OBJECT :rc2-cbc
06 08 2a 86 48 86 f7 0d 03 02
INTEGER :28
02 01 28
SEQUENCE
30 07
OBJECT :sha1
06 05 2b 0e 03 02 1a
SEQUENCE
30 0a
OBJECT :md5
06 08 2a 86 48 86 f7 0d 02 05
· Další podepisovaný parametr je přidán tvůrcem programu – firmou Microsoft, protože 1.3.6.1.4.1.311 je OID pro Microsoft (obsahuje jedinečné jméno CA a číslo šifrovacího certifikátu), nepochopil jsem však, jaký je rozdíl mezi tímto podepisovaným atributem a atributem sMIMEEncryptionKeyPreference):
SEQUENCE
30
73
OBJECT
:1.3.6.1.4.1.311.16.4
06
09 2b 06 01 04 01 82 37 10 04
SET
31
66
SEQUENCE
30 64
SEQUENCE
30 5d
SET
31 0b
SEQUENCE
30 09
OBJECT :countryName
06 03 55 04 06
PRINTABLESTRING :CZ
13 02 43 5a
SET
31 11
SEQUENCE
30 0f
OBJECT
:organizationName
06 03 55 04 0a
PRINTABLESTRING :PVT a.s.
13 08 50 56 54 20 61 2e 73 2e
SET
31 11
SEQUENCE
30 0f
OBJECT
:organizationalUnitName
06 03 55 04 0b
PRINTABLESTRING :20000901
13 08 32 30 30 30 30 39 30 31
SET
31 28
SEQUENCE
30 26
OBJECT :commonName
06 03 55 04 03
PRINTABLESTRING :Certifikacni
autorita I.CA 0009
13 1f 43 65 72 74 69 66 69 6b 61 63 6e 69 20 61 75 74 6f 72
69 74 61 20 49 2e 43 41 20 30 30 30 39
INTEGER :01E012
02 03 01 e0 12
· Poslední položkou je vlastní elektronický podpis:
SEQUENCE
30
0d
OBJECT :rsaEncryption
06
09 2a 86 48 86 f7 0d 01 01 01
NULL
05
00
OCTET
STRING
04
81 80 2f 13 16 cf 38 58 44 db 94 6d d5 9e d8 d5 f5 1d 1f
48
c4 af c0 e5 74 f4 84 01 46 35 32 0f 0f 8a af ae 0d 20 d1
8f
68 38 9c 3b 41 39 ea 31 2f 1b 87 38 5d 7d e6 39 54 8a df
43
60 aa fa a2 43 0d de 84 b9 75 db 8c bd 80 92 47 10 f5 9c
fe
2f 7a c9 4f 00 b3 32 b3 27 21 fb b1 2b 4a 0b f2 8c 5f 81
82
c4 3a 9a 80 f7 aa 23 56 67 51 dd 5d a8 c3 13 67 5d a4 f0
e8
29 de 57 49 5a fe 05 97 63 75
· Za poslední položkou ještě následují konce položek nedefinované délky, tj. zpráva je kódována v BER (nikoliv v DER)
EOC
00 00
EOC
00 00
EOC
00 00
From: =?iso-8859-2?Q?Hana_Kimovi=E8ova?=
test@t1.pvt.cz
To:
=?iso-8859-2?Q?Libor_Dost=E1lek?= dostalek@pvt.cz
Subject: Re: Test
Date: Wed, 28 Mar 2001 14:31:12 +0200
MIME-Version: 1.0
Content-Type:
application/x-pkcs7-mime;
smime-type=enveloped-data;name=smime.p7m
Content-Transfer-Encoding:
base64
Content-Disposition:
attachment; filename=smime.p7m
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
mm2DMZrFaXgJcuLXMeaaAAAAAAAAAAAAAA==
.
· Vnější obálkou CMS zprávy je sekvence skládající se z identifikátoru objektu specifikujícího typ zprávy a obsahu zprávy, jenž je typu „specifická 0“ (viz obr. 8-16):
SEQUENCE
30 80
OBJECT :pkcs7-envelopedData
06 09 2a 86 48 86 f7 0d 01 07 03
cont [ 0 ]
a0 80
· Obsah zprávy obsahuje jako první položku verzi. Jelikož je nula, tak se v podstatě jedná o zprávu PKCS#7.
SEQUENCE
30 80
INTEGER :00
02 01 00
· Dále následuje množina recipientInfos obsahující jednotlivé struktury recipientInfo:
SET
31 82 01 de
· První výskyt struktury recipientInfo:
SEQUENCE
30 81 ec
INTEGER :00 (verze
= 0)
02 01 00
· Dále následuje položka issuerAndSerialNumber obsahující identifikaci certifikátu, jehož veřejný klíč je použit k šifrování symetrického klíče:
SEQUENCE
30 55
SEQUENCE
30 4e
SET
31 0b
SEQUENCE
30 09
OBJECT :countryName
06 03 55 04 06
PRINTABLESTRING :CZ
13 02 43 5a
SET
31 11
SEQUENCE
30 0f
OBJECT :organizationName
06 03 55 04 0a
PRINTABLESTRING :PVT a.s.
13 08 50 56 54 20 61 2e 73 2e
SET
31 10
SEQUENCE
30 0e
OBJECT :commonName
06 03 55 04 03
PRINTABLESTRING :CA-PVT1
13 07 43 41 2d 50 56 54 31
SET
31 1a
SEQUENCE
30 18
OBJECT :emailAddress
06 09 2a 86 48 86 f7 0d 01 09 01
IA5STRING :oper@ica.cz
16 0b 6f 70 65 72 40 69 63 61 2e
63 7a
INTEGER :01277B (sériové
číslo certifikátu)
02 03 01 27 7b
· Dále následuje specifikace asymetrického algoritmu, kterým je zašifrován symetrický šifrovací klíč:
SEQUENCE
30 0d
OBJECT :rsaEncryption
06 09 2a 86 48 86 f7 0d 01 01 01
NULL
05 00
· Dále následuje symetrický klíč zašifrovaný veřejným klíčem ze specifikovaného certifikátu:
OCTET STRING
04 81 80 22 54 44 86 ed 39 d2 cd fc
73 85 05 21 b5 80 40 ec
bd b2 c2 32 e9 88 d1 f0 ac d8 32 d3 49 8d 18 80 de 3e 81 6b
8e 46 7e f7 e7 75 2f 57 9b 92 fc 3d
af bf 40 ab 23 d4 ce 8e
19 f7 13 48 19 cb 63 3f 34 07 a0 72
d9 38 b2 ba 8b 29 37 9c
3f 15 91 77 8f 22 f6 64 ca 2f 76 2a
42 79 a7 e6 41 20 9e 2a
c9 4b 83 11 b5 a1 b3 91 93 3b 7c 1b
0a 9f b6 cb c4 12 be 30
b7 61 61 3b a3 c1 e0 ed 63 9a e8
· Druhý výskyt struktury recipientInfo:
SEQUENCE
30 81 ec
INTEGER :00 (verze = 0)
02 01 00
· Dále následuje položka issuerAndSerialNumber obsahující identifikaci certifikátu, jehož veřejný klíč je použit k šifrování symetrického klíče:
SEQUENCE
30 55
SEQUENCE
30 4e
SET
31 0b
SEQUENCE
30 09
OBJECT :countryName
06 03 55 04 06
PRINTABLESTRING :CZ
13 02 43 5a
SET
31 11
SEQUENCE
30 0f
OBJECT :organizationName
06 03 55 04 0a
PRINTABLESTRING :PVT a.s.
13 08 50 56 54 20 61 2e 73 2e
SET
31 10
SEQUENCE
30 0e
OBJECT :commonName
06 03 55 04 03
PRINTABLESTRING :CA-PVT1
13 07 43 41 2d 50 56 54 31
SET
31 1a
SEQUENCE
30 18
OBJECT
:emailAddress
06 09 2a 86 48 86 f7 0d 01 09 01
IA5STRING :oper@ica.cz
16 0b 6f 70 65 72 40 69 63 61 2e
63 7a
INTEGER :01277F
02 03 01 27 7f
· Dále následuje specifikace asymetrického algortimu pro šifrování symetrického klíče:
SEQUENCE
30 0d
OBJECT :rsaEncryption
06 09 2a 86 48 86 f7 0d 01 01 01
NULL
05 00
· Dále následuje zašifrovaný symetrický klíč:
OCTET STRING
04 81 80 98 b9 29 10 8a 85 60 0d 7d
e8 ba 56 2d 48 0c 49 27
4d 7e 22 ee e3 f6 4b 54 9c aa 20 59
19 8e 4c db 1d 80 96 c7
1c 35 38 fe 09 d5 1d 6b 85 5e 8d 67
0c 21 11 3d 15 6c 23 8d
3e 07 ce 9f c0 bf 47 55 8a 4a 4b 1a b8 e5 79 37 a6 84 57 de
ec f7 0f 2a 5b 66 1b 8a de 76 62 5e
19 4c 79 ed 2c 7b 29 84
9e bc 3c f2 d3 d4 75 82 42 d7 a9 c9
9a 80 47 6a bd fb fa 8a
75 53 01 e4 85 bc 69 c6 d9 14 a6
· Dále následuje vlastní šifrován zpráva, která je sekvencí identifikátoru objektu typu zprávy (v našem případě pkcs7-data), identifikace symetrického šifrovacího algoritmu včetně parametrů a případně vlastní šifrované zprávy.
SEQUENCE
30 80
OBJECT :pkcs7-data
06 09 2a 86 48 86 f7 0d 01 07 01
SEQUENCE
30 14
OBJECT :des-ede3-cbc
06 08 2a 86 48 86 f7 0d 03 07
OCTET STRING
04 08 28 7e 1e c0 00 11 25 b0
· Ještě jsem oddělil vlastní šifrovanou zprávu, která je typu „specifická 0“. Jenže to, co následuje, je trik, který jsem si myslel, že v kapitole 6 nebudu muset vysvětlovat, protože je to v normě X.690 nebo X.691 docela odtažitý odstavec. Specifická nula by měla hodnotu 8016(specifický tág) + 0 (jednoduchý typ) + 0 (hodnota tágu je nula) = 8016, jenže pokud se podíváme na následující specifickou 0, tak ta má hodnotu a0, která vznikla z: 8016( sepicifický tág) + 2016 (konstruovaný typ) + 0 (hodnota tágu je nula) = a016. Už jsme se setkali s mnoha případy, kdy byla specifická nula konstruovaná – vždy ale obsahovala nějakou sekvenci či množinu. Tento případ je odlišný, protože se tato specifická nula skládá pouze z řetězce, tj. obsahuje řetězec zkonstruovaný z několika řetězců. Důvod je praktický: pokud je zpráva dlouhá, tak šifrovací knihovna načte vždy blok dat (v našem příkladu vidíte, že načítá vždy blok dlouhý 40016 B) a pak zase další blok, takže je jednodušší výslednou zašifrovanou zprávu zkonstruovat z jednotlivých bloků. (Tento blok nesouvisí s blokem blokové šifry – ten je podstatně kratší!)
cont [ 0 ]
a0 80
OCTET
STRING
04
82 04 00 b3 de 36 b1 70 34 53 54 16 01 e2 96 70 7f 6f a8
33
72 1b b3 17 05 3d 88 fb 92 63 4d 3d e3 01 75 1a 75 cd 59
4c
eb 6d 4b 6c 2b 5f ca 1a f1 6e 05 bf 7b 44 a2 fc 65 15 6e
76
da 52 4e 21 72 8d 7d 7e 84 6a e1 b6 f4 56 df c9 9f 42 1a
fd
a4 1e 5a 71 a3 8a b5 88 d0 d4 17 04 7b 3e 67 fd eb 65 31
09
e2 41 cc e6 17 86 de 8c 17 07 17 74 c1 9e 9b d8 43 fa 56
62 d4 c3 d8 36 3d 37 21 c7 8d 17 cd 1b df
20 26 f8 19 4d 74
…
96
d5 c8 22 c2 dc 37 17 a5 c1 c1 a2 8e 26 cc a6 2f 86 16 bb
15
2d 7f 06 ed dc 66 0a
OCTET
STRING
04
82 04 00 9b 8b 1d 30 01 a6 81 b8 01 d1 40 26 a1 01 a0 16
40
2b 71 76 d4 54 41 d5 94 57 a6 61 3c 8c e0 65 87 87 78 39
…
09
36 df 74 e6 a6 6d 4f 8d fe 94 e7 2a 1a 0d 3a f1 b6 bc 71
19
38 0d ab 7d f6 6f ad
OCTET
STRING
04
82 04 00 80 50 ca df 6d bb 07 68 7e a9 93 8a 37 f9 09 00
89
f9 55 46 1d 42 b4 25 07 0f ef 1f f0 db d5 e8 60 02 d7 76
…
4b
f8 ac 78 4b 47 55 cc b1 63 ad 56 be 0d b4 ca 9b 4b f3 4c
c4
b4 37 ec ad 3e 95 ca
OCTET
STRING
04
82 01 08 30 66 c6 f7 64 65 d4 18 7e 96 f1 80 88 6b d8 af
77
b4 c7 41 15 f2 9b 1c 7b c3 55 a3 db 4b 24 c6 77 2a 6a 38
…
e1
50 51 20 c3 7d 99 8b 5d 7d 79 48 68 9a 6d 83 31 9a c5 69
78
09 72 e2 d7 31 e6 9a
EOC
00
00
EOC
00 00
EOC
00 00
EOC
00 00
EOC
00 00
Existují tři typy triviálních útoků na elektronicky podepsanou zprávu (útoky na asymetrickou kryptografii či na symetrické šifry nebereme v úvahu) :
Základní nebezpečí číhající na S/MIME zprávy spočívá v podvržení certifikátu i s řetězcem certifikátů až ke kořenovému certifikátu. Součástí S/MIME zprávy totiž může být celý tento řetězec včetně kořenového certifikátu. Je proto na software poštovního klienta, aby kořenovým certifikátům, jež jsou zasílány jako součást zprávy automaticky nevěřil. Toto nebezpeční se ještě zesiluje v období, kdy se obnovuje certifikát kořenové CA.
Kořenový certifikát musí být distribuován a je třeba, aby uživatel tento certifikát akceptoval, jen pokud je distribuován důvěryhodnou cestou, tj. např. je podepsán starým (ještě platným) kořenovým certifikátem. Není-li žádná z těchto cest technicky možná, pak je třeba, aby si uživatel např. telefonicky na CA ověřil kontrolní součet certifikátu označovaný též jako miniatura certifikátu.
Zatímco S/MIME verze 3 je zpětně kompatibilní s předchozími verzemi S/MIME, tak některá rozšíření S/MIME asi budou jen těžko interpretovatelná klienty S/MIME verze 2. Rozšíření S/MIME jsou vtělena do atributů elektronického podpisu.
Jedná se o následující čtyři rozšíření S/MIME verze 3:
Jelikož některá rozšíření budou používat elektronicky podepsané S/MIME zprávy vkládané do elektronické obálky a výsledek se ještě jednou bude elektronicky podepisovat, tak nám vzniknou dva elektronické podpisy: vnitřní a vnější. Proto u dalších zaváděných atributů musíme též uvádět, zda-li se vyskytují ve vnitřním podpisu či ve vnějším podpisu. A pochopitelně zdali jsou podepisované či nepodepisované.
Následující tabulka uvádí přehled atributů elektronického podpisu. Pro úplnost uvádíme i atributy definované ve zprávě CMS „nerozšířeným“ S/MIME verze 3:
Atribut |
Identifikátor
objektu |
Norma |
Vnitřní
/vnější |
Podepisovaný
atribut? |
contentHints |
id-aa-contentHint OBJECT IDENTIFIER ::= {id-aa 4} |
ESS |
obojí |
Může být |
contentReference |
id-aa-contentReference ::= OBJECT IDENTIFIER {id-aa 10} |
ESS |
obojí |
Musí být |
contentType |
id-contentType ::= OBJECT IDENTIFIER {pkcs-9 3 } |
CMS |
obojí |
Musí být |
counterSignature |
id-countersignature OBJECT IDENTIFIER ::= {pkcs-9 6 } |
CMS |
obojí |
Nesmí být |
equivalentLabel |
id-aa-equivalentLabels OBJECT IDENTIFIER ::= {id-aa 9} |
ESS |
obojí |
Musí být |
eSSSecurityLabel |
id-aa-securityLabel OBJECT IDENTIFIER ::= {id-aa 2} |
ESS |
obojí |
Musí být |
messageDigest |
id-messageDigest OBJECT IDENTIFIER ::= {pkcs-9 4 } |
CMS |
obojí |
Musí být |
msgSigDigest |
id-aa-msgSigDigest OBJECT IDENTIFIER ::= {id-aa 5} |
ESS |
Pouze vnitřní |
Musí být |
mlExpansionHistory |
id-aa-mlExpandHistory OBJECT IDENTIFIER ::= {id-aa 3} |
ESS |
Pouze vnější |
Musí být |
receiptRequest |
id-aa-receiptRequest OBJECT IDENTIFIER ::= {id-aa 1} |
ESS |
Pouze vnitřní |
Musí být |
signingCertificate |
id-aa-signingCertificate OBJECT IDENTIFIER ::= {id-aa 12} |
ESS |
obojí |
Musí být |
signingTime |
id-signingTime OBJECT IDENTIFIER ::= {pkcs-9 5 } |
CMS |
obojí |
Musí být |
smimeCapabilities |
SMIMECapabilities OBJECT IDENTIFIER ::= {pkcs-9 15} |
S/MIME |
obojí |
Musí být |
sMIMEEncryption- KeyPreference |
id-aa-encrypKeyPref OBJECT IDENTIFIER ::= {id-aa 11} |
S/MIME |
obojí |
Musí být |
id-aa OBJECT
IDENTIFIER ::= { iso(1) member-body(2)
us(840) rsadsi(113549) pkcs(1) pkcs-9(9)
smime(16) 2 }
Jedná se až o třikrát vnořené S/MIME. Uživatel odešle elektronicky podepsanou zprávu (případně ještě vloženou do elektronické obálky) adresátovi. Odesilatel však nemá žádné informace o tom, zda-li příjemce zprávu přijal a dokázal jí dokonce porozumět (tj. uměl ji dešifrovat a ověřit elektronický podpis.)
Pokud odesilatel vloží do elektronického podpisu atribut s žádostí o doručenku (ReceiptRequest), tak mu specifikovaní adresáti vrátí elektronicky podepsanou doručenku. Adresát může vygenerovat doručenku až v případě, kdy s kladným výsledkem verifikoval elektronicky podepsanou zprávu.
Syntaxe atributu žádost o doručenku je:
ReceiptRequest ::=
SEQUENCE {
signedContentIdentifier ContentIdentifier,
receiptsFrom ReceiptsFrom,
receiptsTo SEQUENCE SIZE (1..ub-receiptsTo))
OF GeneralNames }
ub-receiptsTo
INTEGER ::= 16
ContentIdentifier
::= OCTET STRING
Kde položka signedContentIdentifier obsahuje řetězec, který generuje odesilatel. Tento řetězec kopíruje adresát do doručenky, aby bylo možné spárovat doručenku s původní zprávou. Na jednoznačnosti tohoto řetězce závisí úspěch celé operace, proto se do řetězce vkládá: jméno uživatele, identifikace klíče, čas a náhodné číslo.
Položka recipientsFrom specifikuje adresáty, od kterých je vyžadováno vrácení doručenky. Ti mohou být specifikováni třemi způsoby:
ReceiptsFrom ::= CHOICE {
allOrFirstTier [0] AllOrFirstTier,
receiptList [1] SEQUENCE OF GeneralNames
}
AllOrFirstTier ::= INTEGER {
allReceipts (0),
firstTierRecipients (1) }
Tj. pokud je např. doručenka vyžadována od všech, pak hodnotou atributu je specifická nula (tj. specifický typ s tágem nula) obsahující ve své datové části hodnotu nula.
Sama doručenka používá zvláštní typ zprávy:
Receipt ::=
SEQUENCE {
version ESSVersion,
contentType ContentType,
signedContentIdentifier ContentIdentifier,
originatorSignatureValue OCTET STRING }
ESSVersion ::=
INTEGER { v1(1) }
Tato zpráva se vkládá do zprávy SignedData (tj. je elektronicky podepsána adresátem) a vznikne typ zprávy označovaný též jako zpráva typu „SignedData/Receipt“.
Verze je tč. 1, položka signedContentIdentifier je zkopírována z původní zprávy. Položka originatorSignatureValue obsahuje samotnou hodnotu elektronického podpisu z elektronického podpisu původní zprávy.
Takto popsaná doručenka vypadá docela jednoduše. Pokud čtete samotnou normu RFC-2634, tak je to ale kupodivu docela komplikované. Důvodem je skutečnost, že jedna zpráva může mít více elektronických podpisů a každý z elektronických podpisů může obsahovat atribut s žádostí o doručenku. Přitom nesmíme zapomínat, že jednotlivé podpisy pod zprávou nemusí být od různých osob. Např. jedna osoba může připojit pod zprávu třeba i dva své podpisy (jeden algoritmem RSA a druhý algoritmem DSS). Může se tak stát, že doručenka by mohla být vyžadována od téhož adresáta i několikrát v jedné zprávě. Je třeba zajistit, aby od jednoho adresáta obdržel odesilatel pouze jednu doručenku.
Doručenka může obsahovat též atribut msgSigDigest. Hodnotou tohoto atributu je řetězec (OCTET STRING) obsahující kontrolní součet z podepisovaných atributů původní zprávy (atributů v DER kódování).
Výše popsaný mechanismus doručenky však bohužel nesplňuje požadavky, které jsou kladeny na doručenku v případě obyčejné „papírové“ pošty. Tam je totiž adresátovi zásilka předána až poté, co potvrdí její převzetí svým podpisem; odesilatel se tak brání situaci, při které by si příjemce zásilku převzal, ale později by to popřel. Naše elektronická doručenka však nic takového nezaručuje, protože je výhradně na klientovi (potažmo jeho software pro čtení pošty), jak se žádostí o doručenku naloží.
Zatím jsme si vždy představovali, že zpráva je nejprve elektronicky podepsána a poté teprve vložena do elektronické obálky. Jenže v některých případech je tomu naopak – podepsaná zpráva obsahuje zašifrovanou zprávu. V tomto případě bez dešifrování není vidět, co zpráva obsahuje. Není jasné, k čemu zpráva slouží.
Pro tento případ je určen právě atribut pokyny ke zpracování (contentHints). Je jistou obdobou předmětu zprávy, ale na rozdíl od předmětu zprávy může být tento atribut podepsán.
ContentHints ::=
SEQUENCE {
contentDescription UTF8String (SIZE
(1..MAX)) OPTIONAL,
contentType ContentType }
První položka contentDescription může obsahovat textové instrukce ke zpracování zprávy. Druhá položka pak specifikuje typ zprávy.
Bezpečnostní návěští je speciální oblast. S touto problematikou jsme se setkali již u internetových FrontEndů.
V operačních systémech bezpečnostní kategorie B („vojenské systémy“) by mělo být součástí každých dat bezpečnostní návěští obsahující informace o charakteru utajení dat (tajná data, přísně tajná data apod.). Atribut bezpečností návěští je určen právě k těmto účelům – jeho cílem je zajistit, aby se k obsahu zprávy dostaly pouze povolané osoby.
Použití zpráv S/MIME v oblasti utajovaných dat by stejně pravděpodobně muselo být vymezeno českou vyhláškou.
Pokud se domníváte, že pro klasifikované zprávy nemá smysl používat elektronickou obálku, protože např. NATO má výhrady k asymetrické kryptografii, tak je třeba si uvědomit, že právě CMS zprávy (na rozdíl od zpráv PKCS#7) umožňují se obejít i bez asymetrické kryptografie a šifrovací klíče mohou být distribuovány i jinou cestou (např. kurýrem na koni s disketou).
Detailní popis atributů bezpečnostních návěští naleznete v RFC-2634.
Pokud posíláme S/MIME zprávu do konference, tak pokud je zpráva pouze podepsaná, tak ji můžeme poslat i do běžné konference.
Problém je ale už s šifrovanými zprávami. Zašifrovat zprávu musíme totiž veřejným klíčem z certifikátu samotné konference. Pokud bychom poslali takovou zprávu do obyčejné konference, pak si ji nikdo nepřečte, protože členové konference nemají soukromý klíč konference.
Bezpečné konference zpracovávají zašifrovaný příspěvek do konference tak, že ze struktury RecipientInfo vezmou symetrický šifrovací klíč zprávy a dešifrují jej svým soukromým klíčem. Pro každého člena konference namnoží zprávu, ale do namnožené zprávy přidají další výskyt struktury RecipientInfo pro konkrétního člena konference se symetrickým šifrovacím klíčem zprávy zašifrovaným veřejným klíčem člena konference. Takže konference musí mít kromě seznamu členů i jejich šifrovací certifikáty.
Když konference vytváří strukturu RecipientInfo pro konkrétního člena konference, pak do ní vloží symetrický šifrovací klíč zašifrovaný veřejným klíčem z certifikátu člena konference.
Bezpečná konference vždy elektronicky podepisuje namnožené
zprávy svým soukromým klíčem, tj. přidá vnější elektronický podpis zprávy. Při
té příležitosti přidává konference do svého podpisu atribut mlExpansionHistory. Tento atribut obsahuje seznam identifikací
konferencí, kterými zpráva prošla. Pokud v přijaté zprávě v atributu mlExpansionHistory
konference najde svou identifikaci, tak konference již zprávu dále nemnoží,
protože by došlo k cyklickému množení zpráv.
Atribut mlExpansionHistory
má hodnotu, jež je sekvencí identifikací jednotlivých konferencí, kterými
zpráva prošla (může jich být až 64):
MLExpansionHistory
::= SEQUENCE
SIZE (1..ub-ml-expansion-history) OF
MLData
ub-ml-expansion-history
INTEGER ::= 64
Identifikace konkrétní konference se provádí
pomocí struktury MLData:
MLData ::= SEQUENCE
{
mailListIdentifier EntityIdentifier,
expansionTime GeneralizedTime,
mlReceiptPolicy MLReceiptPolicy OPTIONAL }
První položkou je identifikátor konference,
kterým je identifikace podpisového certifikátu konference. Ta může být buď
jedinečným jménem vydavatele a sériovým číslem certifikátu nebo rozšířením
certifikátu „Identifikátor klíče předmětu“ (viz kap. 8.1.10):
EntityIdentifier ::= CHOICE {
issuerAndSerialNumber
IssuerAndSerialNumber,
subjectKeyIdentifier SubjectKeyIdentifier
}
Druhou položkou je expansionTime, což
je datum a čas namnožení zprávy konferencí. Poslední volitelnou položkou je
politika doručenek. Jedná se o případ, kdy přispěvovatel do konference použije
atribut „Žádost o doručenku“. Pomocí politiky doručenek lze vracení doručenek
omezit:
MLReceiptPolicy ::= CHOICE {
none [0] NULL,
insteadOf [1] SEQUENCE SIZE (1..MAX) OF
GeneralNames,
inAdditionTo [2] SEQUENCE SIZE (1..MAX) OF
GeneralNames }
Buďto zakážeme původně požadované doručenky generovat adresátem, nebo uvedeme alternativní seznam (insteadOf) těch, kteří mají doručenky generovat, či naopak uvedeme seznam těch, kterým povolujeme doručenky generovat.
Obr. 10-5 Příspěvek (zpráva) uživatele X projde konferencemi A, B a C až k uživateli Y. ŠA = šifrování veřejným klíčem konference A. ŠA i B = sekvence RecipientInfos obsahuje strukturu RecipientInfo se symetrickým šifrovacím klíčem zašifrovaným veřejným klíčem konference A a další strukturu RecipientInfo se symetrickým šifrovacím klíčem šifrovaným veřejným klíčem konference B. PX = elektronický podpis soukromým klíčem uživatele X. Dále je na obrázku znázorněno, že bezpečné konference hlídají cykly, tj. aby členem konference B např. nebyla konference A.
Příspěvek uživatele X (obr. 10-5) do bezpečné konference A je uživatelem X podepsán a vložen do elektronické obálky. V terminologii bezpečných konferencí je podpis uživatele X vnitřním podpisem zprávy.
Konference A dešifruje symetrický šifrovací klíč elektronické obálky zprávy a rozšíří elektronickou obálku o další výskyt struktury RecipientInfo se symetrickým šifrovacím klíčem zašifrovaným veřejným klíčem člena konference A (např. veřejným šifrovacím klíčem konference B). Celou zprávu i s rozšířenou elektronickou obálkou (o další strukturu RecipientInfo) podepíše svým podepisovacím klíčem. Dále konference A přidá atribut mlExpansionHistory s identifikací konference A.
Pokud zpráva prochází další konferenci, tj. konference B je
členem konference A, pak opět dojde o další rozšíření elektronické obálky.
Jenže elektronický podpis konference A již nelze použít, protože rozšířením
elektronické obálky jsme změnili podepisovanou zprávu, proto se vnější podpis
konference A zahodí. Pouze se z něj vezmou všechny podepisované atributy,
které se vloží do elektronického podpisu prováděného konferencí B. Podepisovaný
atribut mlExpansionHistory se rozšíří o identifikaci konference B.
Tj. v případě elektronických konferencí se zahazují vnější obálky obsahující elektronický podpis konference.
Dlouho jsem nemohl pochopit význam tohoto rozšíření. Pokud
se podíváte na strukturu SignerInfo (strukturu elektronického podpisu)
např. na obr. 8-18, pak v položce SignerIdentifier
je identifikace certifikátu určeného pro verifikaci elektronického podpisu. Tak proč ještě další atribut? Problém je v tom, že položka SignerIdentifier
není zahrnuta do výpočtu elektronického podpisu.
Čistě teoreticky by
tedy bylo možné vzít elektronicky podepsanou zprávu a přidat k ní do
položky Certificates podvržené certifikáty. Cílem tohoto rozšíření je
umožnit odesilateli omezit množinu certifikátů používaných k verifikaci
zprávy.
Tento atribut
používá identifikátor objektu id-aa-signingCertificate. Hodnotou
atributu je sekvence dvou prvků:
SigningCertificate ::= SEQUENCE {
certs SEQUENCE OF ESSCertID,
policies SEQUENCE OF PolicyInformation OPTIONAL
}
Prvním prvkem této sekvence je posloupnost
identifikací certifikátů určených k ověření podpisu a druhým volitelným
prvkem je příslušná certifikační politika (viz rozšíření certifikátů zabývající
se certifikační politikou).
Posloupnost certifikátů se skládá
z identifikací jednotlivých certifikátů. Certifikát je identifikován
kontrolním součtem (certHash) počítaným z celého certifikátu
algoritmem SHA-1. Volitelně může být uvedeno jedinečné jméno vydavatele
certifikátu a sériové číslo certifikátu (IssuerSerial).
ESSCertID ::= SEQUENCE {
certHash Hash,
issuerSerial IssuerSerial OPTIONAL
}
IssuerSerial ::= SEQUENCE {
issuer GeneralNames,
serialNumber
CertificateSerialNumber
}
První certifikát v posloupnosti certifikátů musí být určen k verifikaci elektronického podpisu a až případné další v posloupnosti k verifikacím certifikátů v řetězci certifikátů.
*) V příkladu jsem použil v praxi hojně užívaný typ „application/x-pkcs7-signature“ i když podle normy by se měl používat typ „application/pkcs7-signature“ (tj. bez x-). Předpona x- je určena pro experimentální typy; tj. pro vývoj. Avšak v praxi se používají oba typy a norma dokonce zmiňuje, že by software měl oba typy podporovat.