S/MIME řeší problematiku bezpečných zpráv z praktického pohledu. Vychází z toho, že má k dispozici normu PKCS-7 pro tvorbu bezpečných zpráv. PKCS-7 umí zprávu elektronicky podepsat, šifrovat i podepsat a zároveň šifrovat. Definují proto jen příslušnou MIME hlavičku Contenty-Type typ/subtyp:
Content-Type: Application/pkcs7-mime
Čili zprávu zabezpečí podle normy PKCS-7 a aby se vlk nažral (MIME), tak definuje application/pkcs7-mime. Podobně jako pro posílání audia mailem je MIME hlavička audio/basic, tak pro zprávy zabezpečné podle PKSC-7 je application/pkcs7-mime.
Jelikož výsledkem PKCS-7 jsou data v binárním tvaru je nutné zprávu
před odesláním mailem kódovat do sedmibitového tvaru (např. Base64):
From:
To: MIME-Version: 1.0 Content-Type: application/pkcs7-mime Content-Transfer-Encoding: base64 4VQpfyF467GhIGfHfYT6jH77n8HHGghyHhHUujhJh756tbB9HGTrfvbnj n8HHGTrfvhJhjH776tbB9HG4VQbnj7567GhIGfHfYT6ghyHhHUujpfyF4
|
Jenže ono to má háček. Zpráva vytvořená podle PKCS-7 je na první pohled velice těžko čitelná - je to binární řetězec. To nevadí v případě, že zpráva bude přijata programem, který ji dešifruje, verifikuje a výsledek zobrazí uživateli v čitelném tvaru (např. klient Netscape). 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 "zašifrovaně"). Proto kromě 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ý" podpis podle normy PKCS-7:
From:
To: MIME-Version: 1.0 Content-Type: multipart/signed; protocol=application/pkcs7-signature; micalg=rsa-md5; boundary=hranice --hranice
Text v čitelné podobě.
ghyHhHUujhJhjH77n8HHGTrfvbnj756tbB9HG4VQpfyF467GhIGfHfYT6 4VQpfyF467GhIGfHfYT6jH77n8HHGghyHhHUujhJh756tbB9HGTrfvbnj
n8HHGTrfvhJhjH776tbB9HG4VQbnj7567GhIGfHfYT6ghyHhHUujpfyF4
|
Součástí elektronicky podepsané zprávy (součástí zprávy formátu PKCS-7) je zpravidla i certifikát odesilatele. Příjemce takový ceritifikát verifikuje a může si jej uložit. Potřebuje-li později odpovědět, pak využije uloženého certifikátu.
Pro odeslání zprávy pouze elektronicky podepsané je třeba pouze certifikát odesilatele. Pro odeslání zprávy šifrované je třeba certifikát příjemce.
Praktický postup: Pokud chcete s někým bezpečně komunikovat pomocí elektronické pošty. Pak v prvním dopise pošlete nejaký bezvýznamný text, ale dopis pošlete elektronicky podepsán. Tím k druhé straně přepravíte svůj certifikát. Odpověď a veškerá další komunikace pak může jít i šifrovaně. (První elektronicky podepsanou zprávou přenesete svůj certifikát).
Připravili jsme pro Vás cvičení.
Cvičení: Pomocí Netscape Communicatoru
jsem si poslal elektronicky podepsaný text. Vlastní text je vyznačen
červeně (pro nás je bezvýznamný). Elektronický podpis je vyznačen
zelene:
From dostalek Fri Jul 4 14:37:57 1997
X-UIDL: 977df660f182831872c0ba39410274da Received: from libor (Libor.pvt.net [194.149.104.198]) by cbu.pvtnet.cz (8.8.5/8 .7.3) with ESMTP id OAA09850 for <dostalek@pvt.net>; Fri, 4 Jul 1997 14:37:57 +0 200 (MET DST) Message-ID: <33BCED74.A007B78B@pvt.net> Date: Fri, 04 Jul 1997 14:32:52 +0200 From: Libor Dostalek <dostalek@pvt.net> X-Mailer: Mozilla 4.01 [en] (WinNT; I) MIME-Version: 1.0 To: dostalek@pvt.net Subject: Test X-Priority: 3 (Normal) Content-Type: multipart/signed; protocol="application/x-pkcs7-signature"; micalg =sha1; boundary="------------msAFAC9219099F108C29F5A61A" Status: RO X-Status: This is a cryptographically signed message in MIME format. --------------msAFAC9219099F108C29F5A61A
Bezvyznamny text --------------msAFAC9219099F108C29F5A61A
MIIF3QYJKoZIhvcNAQcCoIIFzjCCBcoCAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHAaCC
|
To není vše. Nyní si zobrazte ještě další okno s konvertorem a v do
něj vložte certifikát odesilatele tohoto mailu:
-----BEGIN CERTIFICATE-----
MIICMTCCAZoCARwwDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQ1oxETAPBgNV BAoTCFBWVCBhLnMuMRAwDgYDVQQDEwdDQS1QVlQxMSgwJgYJKoZIhvcNAQkBFhlj YS1vcGVyQHA3MHgwMy5icm4ucHZ0LmN6MB4XDTk3MDYyNTEwMzM0NloXDTk3MDcw OTEwMzM0NlowgakxCzAJBgNVBAYTAkNaMQowCAYDVQQIEwExMRkwFwYDVQQHExBD ZXNrZSBCdWRlam92aWNlMRIwEAYDVQQKEwlQVlQsIGEucy4xDDAKBgNVBAsTA1ZD VTEXMBUGA1UEAxMOTGlib3IgRG9zdGFsZWsxHzAdBgkqhkiG9w0BCQEWEGRvc3Rh bGVrQHB2dC5uZXQxFzAVBgNVBAwTDis0MiAzOCA3NzQ3MzYxMFwwDQYJKoZIhvcN AQEBBQADSwAwSAJBAMHbxt0irAX45AmOAzhqtZEXGPRQ5qF3f2u4m31V5j2vR3ek dboMAOSOXMvwr83gBdyJUIhU0lLDVhY+U0w4K7MCAwEAATANBgkqhkiG9w0BAQQF AAOBgQAYwejjJ8jL1uNVfQg9RDlI5mJjxEPwaO93rJNRkE38M+Dh2bLGmAG+dP33 2WwA1l02MXZSYMGVoO48m/J+nlFaugog4DjNtcnOQ2JJHU4V2lo1zd2SfnGzEsjM Pv/9PQtGG66Vxtav7R930tVNJEvDEe+5yue1jJl3zJPjWhNWQg== -----END CERTIFICATE----- |
Kromě zpráv elektronicky podepsaných, šifrovaných či zároveň podepsaných
a šifrovaných S/MIME ještě specifikuje žádost o certifikát. Opět využívá
již osvědčenou normu, tentokráte normu PKCS-10. Žádost podle PKCS-10 balí
do MIME:
From:
To: MIME-Version: 1.0 Content-Type: application/pkcs10 Content-Transfer-Encoding: base64 n8HHGTrfvhJhjH776tbB9HG4VQbnj7567GhIGfHfYT6ghyHhHUujpfyF4
|
Asi vám schází mechanizmus, kterým po podepsání vrátí certifikační autorita spolu se svým cerifikátem žadateli. To však vcelku není problém, protože certifikát se pošle jako obyčejná MIME zpráva v jejíž hlavičce Content-Type se specifikuje, že jde o certifikát.
Např. Netscape používá:
Content-Type: application/x-x509-user-cert
pro podepsaný uživatelský certifikát a
Content-Type: application/x-509-ca-cert
pro certifikát certifikační autority.
Používat jiný typ pro uživatelský certifikát a pro certifikát certifikační autority je výhodné, protože je lze automaticky ukládat (klient má zpravidla i dvě menu: jedním prohlíží a nastavuje uživatelské certifikáty a druhým certifikáty certifikační autority). V opačném případě by se musel klientský software dotazovat uživatele o jaký typ certifikátu se jedná, což pro mnohé uživatele by asi bylo nepřekonatelným problémem.
Normy PKCS jsou tvořeny základem desti norem PKCS-1 až PKCS-10. Z našeho pohledu jsou zásadní tři: