Bezpieczenstwo poczty elektronicznej

Adam Zalcman

Spis tresci

1. Wprowadzenie do technik kryptograficznych
1.1. Szyfrowanie symetryczne
1.2. Szyfrowanie asymetryczne
1.3. Funkcje haszujace
1.4. Podpis elektroniczny
1.5. Certyfikaty
1.6. X.509
1.7. Hasla jednorazowe
1.8. MAC
1.9. HMAC
2. Poczta elektroniczna
2.1. Protokol SMTP
2.2. SMTP relay
2.3. Naglowek rfc822
2.4. Transfer encoding
2.5. Format MIME
3. Zagrozenia zwiazane z poczta elektroniczna
3.1. Naduzycia SMTP relay
3.2. Fake-mail
3.3. Prywatnosc
4. Metody uwierzytelniania i szyfrowania w protokole SMTP
4.1. SMTP AUTH
4.2. Metoda PLAIN
4.3. Metoda LOGIN
4.4. Zastosowanie hasel jednorazowych
4.5. Metoda CRAM-MD5
4.6. Metoda DIGEST-MD5
4.7. Rozszerzenie STARTTLS
5. Prywatnosc w poczcie elektronicznej
5.1. S/MIME
5.1.1. CMS
5.1.1.1. SignedData
5.1.1.2. EnvelopedData
5.1.2. Poczta zaszyfrowana
5.1.3. Poczta podpisana
5.1.3.1. Podpis zintegrowany z listem
5.1.3.2. Podpis "zewnetrzny"
5.1.4. Wiadomosci przenoszace certyfikaty
5.1.5. Ochrona naglowka


Spis tresci 1. Wprowadzenie do technik kryptograficznych

Spis tresci 1.1. Szyfrowanie symetryczne

Kazdy algorytm szyfrujacy przyjmuje jako argumenty nie tylko tekst do zaszyfrowania ale rowniez pewna ustalona z gory i ukrywana w tajemnicy wartosc zwana kluczem. Podobnie algorytm deszyfrujacy przyjmuje oprocz kryptogramu wartosc klucza. W przypadku algorytmow szyfrowania symetrycznego ten sam klucz jest wykorzystywany przy szyfrowaniu i deszyfrowaniu.

DK(EK(M)) = M
Gdzie EK oznacza szyfrowanie kluczem K, a DK deszyfrowanie kluczem K.

Najwazniejszymi przykladami algorytmow symerycznych sa DES i jego odmiany (3DES, DESX), RC2, Blowfish.

Spis tresci 1.2. Szyfrowanie asymetryczne

Szyfrowanie asymetryczne tym rozni sie od symetrycznego, ze klucz stosowany do szyfrowania KE i klucz KD do deszyfrowania sa rozne i z jednego nie da sie wyliczyc wartosci drugiego.

DKD(EKE(M)) = M
KD <> KE
Nie oznacza to jednak, ze klucze te nie sa powiazane, a jedynie to, ze zwiazek ten jest na tyle skomplikowany, ze przy dopstepnych zasobach wyliczenie jednego klucza z drugiego jest praktycznie niemozliwe. Klucze do szyfrowania asymetrycznego generuje sie zawsze parami. Zwykle jeden z kluczy jest upubliczniany i dlatego zwany kluczen publicznym a drugi jest trzymany w tajemnicy i zwany kluczem prywatnym.

Najwazniejszym algorytmem szyfrowania asymetrycznego jest RSA.

Spis tresci 1.3. Funkcje haszujace

Innym waznym narzedziem kryptograficznym sa funkcje haszujace. Funkcja haszujaca to taka funkcja H, ktora dla potencjalnie duzego (jako porcji informacji) argumentu oblicza jego hash, ktory jest znacznie mniejszy i ma te wlasnosc, ze dla danej wartosci h nie mozna znalezc takiego argumentu M, ze H(M)=h. Rowniez majac taki M1, ze H(M1)=h nie mozna znalezc drugiego takiego M2<>M1, ze H(M2)=h.

Dwie najpopularniejsze obecnie funkcje haszujace to MD5, ktora dla wejscia dowolnych rozmiarow zwraca wynik o dlugosci 128 bitow oraz SHA-1, ktora dla dowolnego wejscia zwraca wynik dlugosci 160 bitow.

Funkcje haszujace wykorzystuje sie do sprawdzania czy to co podlegalo haszowaniu (kod programu, list, dokument) nie zostalo zmodyfikowane.

Oto przyklad obliczenia wartosci funkcji md5 dla pewnego tekstu przy pomocy komendy md5 dostepnej w niektorych UNIXach:

[jkowalski@vidmo]$ md5
To jest tekst, ktory jest chroniony przed modyfikacja za pomoca funkcji haszujacej MD5.
69d79e120d662bf3942b6240439bace4
[jkowalski@vidmo]$ 
Tekst wprowadzony przez uzytkownika jest zaznaczony kursywa.

Spis tresci 1.4. Podpis elektroniczny

Podpis elektroniczny to wartosc dolaczana do jakiejs porcji informacji (programu komputerowego, e-maila, dokumentu, etc) zapewniajaca, ze jej autorem jest okreslona osoba (podpisujacy). Zanim ktos bedzie mogl podpisywac sie elektronicznie musi wygenerowac sobie pare kluczy (publiczny i prywatny) do szyfrowania asymetrycznego. Nastepnie musi zadbac o to aby wszystkie osoby, ktore beda zainteresowane weryfikacja jej podpisow znaly jej klucz publiczny oraz o to by nikt nie zdobyl dostepu do jej klucza prywatnego. Klucz prywatny bedzie wykorzystywany przy podpisywaniu, a publiczny przy weryfikacji podpisu.

Do tworzenia podpisow elektronicznych wykorzystuje sie wybrana funkcje haszujaca H oraz wybrany algorytm szyfrowania asymetrycznego D/E.

Tworzenie podpisu elektronicznego odbywa sie w nastepujacy sposob:

Weryfikacja podpisu elektronicznego polega na wykonaniu nastepujacych czynnosci:

Spis tresci 1.5. Certyfikaty

Aby opisany w poprzednim punkcie protokol postepowania byl skuteczny musi istniec sposob na powiazanie osob z ich kluczami publicznymi. Sposob ten musi byc godny zaufania.

Jednym z rozwiazan problemu powiazania kluczy publicznych z osobami sa certyfikaty. Certyfikat jest niewielka porcja informacji, ktora zawiera opis osoby i jej klucz publiczny. Aby nie dopuscic do falszerstwa, certyfikat jest podpisywany elektronicznie przez inna osobe lub instytucje. Aby jednak zweryfikowac podpis pod certyfikatem danej osoby trzeba miec klucz publiczny tego kto podpisywal jej certyfikat. Ten klucz publiczny uzyskuje sie z jeszcze innego certyfikatu, ktory jest z kolei podpisany przy uzyciu klucza jeszcze innej organizacji. Caly ten zespol zaleznosci tworzy drzewo powiazan. Na samym szczycie tego drzewa znajduja sie organizacje zwane CA (ang. Certificate Authority), ktorych klucze publiczne sa powszechnie znane (chocby dlatego, ze sa z reguly wbudowywane lub dostarczane z oprogramowaniem, ktore bedzie korzystalo z certyfikatow, jak np. klient poczty elektronicznej czy przegladarka sieci Web).

Spis tresci 1.6. X.509

Aby zapewnic kompatybilnosc oprogramowania pochodzacego od roznych producentow i mozliwosc wymiany certifatow pomiedzy roznymi programami strukture certyfikatow ustandaryzowano. Najpopularniejszym standardem certyfikatow jest X.509. Obecnie najnowsza wersja tego standardu jest 3.

Kazdy certyfikat X.509v3 musi zawierac nastepujace elementy:

Spis tresci 1.7. Hasla jednorazowe

Za kazdym razem gdy haslo dajace dostep do jakiegos systemu jest wpisywane na klawiaturze komputera badz wysylane poprzez siec jest narazone na przechwycenie i pozniejsze wykorzystanie w tzw. replay attack polegajacym na wyslaniu do atakowanego systemu tej samej sekwencji bajtow jaka zostala wykorzystana prze uprawniona osobe.

Najskuteczniejszym sposobem ustrzezenia sie przed tego rodzaju atakiem jest uzycie hasel, ktorych waznosc konczy sie wraz z pierwszym ich zastosowaniem. Poniewaz jednak pamietanie wielu hasel dostepu jest problemem a ich zapisanie moze narazic system na niebezpieczenstwo wieksze niz w przypadku stosowania klasycznych hasel, stosuje sie hasla jednorazowe, ktore daja sie wyliczyc z pewnej innej dobrze strzezonej informacji zwanej dalej sekretem.

Hasla jednorazowe musza miec te wlasnosc, ze z n-tego nie da sie wyliczyc n+1-szego. Taka wlasnosc mozna uzyskac wykorzystujac funkcje haszujace. Obliczanie hasel jednorazowych wykonuje sie nastepujaco:

h0=s
h1=H(h0)
h2=H(h1)
h3=H(h2)
...
hn=H(hn-1)
hn+1=H(hn)
gdzie s oznacza sekret uzyty do wygenerowania zbioru hasel jednorazowych, hi oznacza kolejne haslo jednorazowe a H wybrana funkcje haszujaca. Po wygenerowaniu liczb hi i przekazaniu liczb hn, hn-1, ..., h0 jako hasel jednorazowych uzytkownikowi system powinien zniszczyc wszystkie poza hn+1, ktore zostaje zapamietane do pierwszego uwierzytelnienia. Podczas i-tego uwierzytelniania system otrzymuje wartosc hn-i+1 jako haslo, oblicza dla niego wartosc funkcji haszujacej H i porownuje ja z wartoscia hasla otrzymanego poprzednio (lub hasla hn+1 jesli jest to pierwsze uwierzytelnienie), po czym jesli uwierzytelnienie sie powiodlo podana przez uzytkownika wartosc jest zapamietywana do kolejnego uwierzytelnienia.

Widac, ze z i-tego hasla hn-i+1 nie da sie wyliczyc hasla i+1-szego hn-i, gdyz hn-i+1=H(hn-i), a funkcja H nie da sie odwrocic.

W praktyce zamiast liczb korzysta sie z generowanych z nich fraz tekstowych.

Oto jak wyglada poslugiwanie sie haslami jednorazowymi w praktyce:

Spis tresci 1.8. MAC

MAC (ang. Message Authentication Code) jest narzedziem pozwalajacym na zapewnienie integralnosci komunikatu. MAC otrzymuje sie jako wartosc dwuargumentowej funkcji jednokierunkowej (dajacej sie obliczac tylko w jedna strone) dla wartosci tajnego klucza k oraz wiadomosci M:

MACk,M=f(k, M)
Aby zapewnic integralnosc wiadomosci, tj. by upewnic sie, ze dane nie zostana zmodyfikowane bez wiedzy odbiorcy na skutek niedokonalosci kanalu komunikacyjnego badz z powodu zamierzonej ingerencji osoby trzeciej, odbiorca musi posiadac klucz k i dokonac tego samego obliczenia co nadawca. Uzyskanie takiego samego wyniku swiadczy o integralnosci wiadomosci. Nikt kto nie zna k nie moze wyliczyc MAC.

Do konstrukcji funkcji f wykorzystuje sie w praktyce funkcje haszujace.

Spis tresci 1.9. HMAC

W RFC 2104 "HMAC: Keyed-Hashing for Message Authentication" opisana jest dwuargumentowa funkcja jednokierunkowa sluzaca do obliczania MAC zwana HMAC. Jest to w istocie schemat, na podstawie ktorego mozna tworzyc wiele roznych funkcji obliczajacych MAC (oczywiscie kazda z nich oblicza inny MAC dla tych samych danych: klucza i wiadomosci). By korzystac z HMAC nalezy wybrac pewna funkcje haszujaca H oraz klucz K. Argument kazdej funkcji haszujacej ma okreslony rozmiar w bajtach. Niech B bedzie rozmiarem argumentu dla H (jesli H=MD5 lub H=SHA-1 to B=64). Podobnie dla kazdej funkcji H okreslony jest rozmiar jej wartosci. Niech L bedzie rozmiarem wartosci zwracanych przez H (jesli H=MD5 to L=16, jesli H=SHA-1 to L=20). Klucz K powinien miec rozmiar B, a jesli jest krotszy nalezy uzupelnic go zerami do rozmiaru B.

Definiujemy nastepujace stale:
ipad = bajt 0x36 ('6') powtorzony B-krotnie
opad = bajt 0x5C ('\') powtorzony B-krotnie
Obliczenia HMAC(K, M) dokonuje sie nastepujaco:
HMAC(K, M) = H(K xor opad . H(K xor ipad . M))
gdzie . jest operatorem konkatenacji ciagow bajtow. W rozdziale 4.5. pokazany jest przyklad takiego obliczenia w kontekscie jednej z metod uwierzytelniania w protokole SMTP.

Spis tresci 2. Poczta elektroniczna

Spis tresci 2.1. Protokol SMTP

Protokol SMTP (ang. Simple Mail Transfer Protocol) jest protokolem warstwy aplikacji, ktory sluzy do komunikacji programow, ktore wysylaja i odbieraja poczte w imieniu uzytkownika. W momencie gdy pewien program chce wyslac poczte elektroniczna na pewien adres laczy sie z jakims serwerm pocztowym, ktory powinien nasluchiwac na nadchodzace polaczenia na porcie TCP 25. Po nawiazaniu polaczenie nastepuje dialog skladajacy sie z komend wysylanych przez program nadawcy i odpowiedzi serwera. Zestaw komend, skladnie ich argumentow oraz zestaw odpowiedzi wraz z ich znaczeniem zdefiniowane sa w protokole SMTP. Podstawowe komendy tego protokolu sa nastepujace: Nie sa to wszystkie komendy SMTP. W dalszej czesci zostana podane niektore z pominietych tutaj polecen.

Protokol SMTP przewiduje mozliwosc tworzenia rozszerzen (ang. extensions) do protokolu. Zazwyczaj maja one postac dodatkowych komend, ktore serwer moze zaakceptowac. Wszystkie rozszerzenia, ktore dany serwer rozumie musza zostac wymienione przez niego po komendzie EHLO.

Oto przykladowy dialog w protokole SMTP.

[jkowalski@vidmo]$ telnet elf.ii.uj.edu.pl 25
Trying 149.156.65.17...
Connected to elf.ii.uj.edu.pl.
Escape character is '^]'.
220 elf.ii.uj.edu.pl ESMTP (elf II UJ)
EHLO vidmo.net
250-elf.ii.uj.edu.pl
250-PIPELINING
250-SIZE 20000000
250-ETRN
250 8BITMIME
MAIL FROM:<jkowalski@vidmo.net>
250 Ok
RCPT TO:<jan.kowalski@ii.uj.edu.pl>
250 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Tresc maila
.
250 Ok: queued as 668B71100096B
QUIT
221 Bye
Connection closed by foreign host.
[jkowalski@vidmo]$
Jak widac powyzej odpowiedzi serwera skladaja sie z dwoch czesci: numeru odpowiedzi, ktora jest latwa do zrozumienia dla programu, ktory uczestniczy w dialogu oraz komunikatu w jezyku naturalnym zrozumialego dla czlowieka.

Spis tresci 2.2. SMTP relay

Z reguly serwer, z ktorym laczy sie program wysylajacy poczte jest serwerem, ktorego nazwa znajduje sie po '@' w adresie e-mail odbiorcy wiadomosci lub jesli po '@' jest nazwa domeny to ktorys z serwerow poczty dla tej domeny uzyskany z DNS z rekordu MX. W obu tych przypadkach skrzynka pocztowa odbiorcy znajduje sie na serwerze, z ktorym laczy sie klient. Nie zawsze musi jednak tak byc. Mozna polaczyc sie z w zasadzie dowolnym komputerem i prosic go o przeslanie e-maila na dowolny adres. W takiej sytuacji, jesli serwer przyjmie taka wiadomosc musi ja potem przekazac dalej w imieniu nadawcy. Sytuacja taka nazywa sie SMTP-relay i jest czesto wykorzystywana do omijania niektorych rodzajow zabezpieczen antyspamowych.

W terminach protokolu SMTP mozna powiedziec, ze SMTP-relay to sytuacja majaca miejsce wtedy gdy skrzynka, ktorej adres zostal podany jako argument komendy RCPT TO: nie znajduje sie na komputerze, z ktorym nastapilo polaczenie.

Kazdy serwer pocztowy ma prawo odmowic relay'owania poczty.

Spis tresci 2.3. Naglowek rfc822

Chociaz dane wysylane przy uzyciu komendy DATA protokolu SMTP moga w zasadzie miec dowolny format powinno przestrzegac sie formatu ustalonego przez RFC 822 i jego aktualizacje. Wiadomosc sformatowana zgodnie z zaleceniami tego dokumentu sklada sie z naglowka i tresci. Naglowek zas sklada sie z szergu pol, z ktorych kazde ma nazwe i wartosc. Kazde pole wystepuje na odrebenej linii. Kazda wartosc jest oddzielona od nazwy pola dwukropkiem. Naglowek powinien byc oddzielony od tresci co najmniej jedna pusta linia. Nie powinno byc zadnych pustych linii wewnatrz naglowka.

Oto niektore z pol zdefiniowanych w RFC 822:

Ostatnie z tych pol moze byc wykorzystwane by przesledzic jaka droga wiadomosc dotarla do odbiorcy.

Oto transmisja wiadomosci zawierajacej naglowek RFC 822.

[jkowalski@vidmo]$ telnet elf.ii.uj.edu.pl 25
Trying 149.156.65.17...
Connected to elf.ii.uj.edu.pl.
Escape character is '^]'.
220 elf.ii.uj.edu.pl ESMTP (elf II UJ)
EHLO vidmo.net
250-elf.ii.uj.edu.pl
250-PIPELINING
250-SIZE 20000000
250-ETRN
250 8BITMIME
MAIL FROM:<jkowalski@vidmo.net>
250 Ok
RCPT TO:<jan.kowalski@ii.uj.edu.pl>
250 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
From: <jkowalski@vidmo.net>
Subject: Your account has been removed.
To: Awful Hacker <hacker@ii.uj.edu.pl>

As indicated in the subject!

Regards,
The admin

.
250 Ok: queued as D28FF1100096C
QUIT
221 Bye
Connection closed by foreign host.
[jkowalski@vidmo]$
Jak widac dane podawane w naglowku RFC 822 nie musza odpowiadac rzeczywistosci. Niektore serwery poczty przeprowadzaja jedynie weryfikacje nazwy domenowej podanej po '@' w adresach e-mail. Adres podany w MAIL FROM: moze jednak byc uzyskany poprzez odczytanie wartosci pola Return-Path odebranego listu. Podobnie adres komputera, z ktorego serwer pocztowy otrzymal dany e-mail moze byc odczytany w polu Received. Jesli e-mail byl relay'owany to pol Received bedzie wiecej niz jedno.

Wiadomosci e-mail sa umieszczane w skrzynce o adresie podanej w RCPT TO: bez wzgledu na wartosc pola To naglowka RFC 822.

Spis tresci 2.4. Transfer encoding

Nie wszystkie komputery w sieci Internet posluguja sie osmiobitowym bajtem. Niektore maja bajt o dlugosci 7 bitow. Jesli jakis e-mail zawierajacy znak, ktorego kod w reprezentacji binarnej ma ustawiony (rowny jeden) najstarszy (osmy) bit, przechodzi przez gateway pocztowy, ktory ma siedmiobitowy bajt to osmy bit we wszystkich bajtach oryginalnej wiadomosci jest zerowany. Moze to powodowac znieksztalcenie widadomosci.

Aby temu zapobiec wprowadzono tzw. "transfer encodings". Sa to takie sposoby zakodowania wiadomosci, ktore nie korzystaja z osmego bitu i tym samym chronia wiadomosc przed skutami przejscia przez siedmiobitowy gateway pocztowy.

Poniewaz wszystkie znaki ASCII maja kody siedmiobitowe nastepujace kodowania maja powyzsza wlasnosc.

Spis tresci 2.5. Format MIME

Standardy poczty elektronicznej opisane dotychczas nie pozwalaja na przesylanie arbitralnych plikow jako tzw. zalacznikow. By bylo to mozliwe musi istniec sposob podzialu wiadomosci na skladowe oraz przypisania kazdemej skladowej informacji o rodzaju danych jakie zawiera. Umozliwia to standard definiujacy format wiadomosci e-mailowych MIME (ang. Multipurpose Internet Mail Extensions).

Standard MIME definiuje dodatkowe pola dodawane do pol naglowka RFC 822 a takze sposob laczenia roznych rodzajow danych w jedna wiadomosc.

Podstawowym polem naglowka MIME jest pole Content-Type. Jego wartoscia jest ciag znakow postaci typ/podtyp gdzie typ definiuje rodzaj informacji umieszczonych w tej skladowej wiadomosci, do ktorej sie odnosi, a podtyp doprecyzowuje o jaki format danych chodzi. Oto przyklady typow i podtypow MIME:

Oto przyklad transmisji wiadomosci MIME skladajacej sie z wiadomosci tekstowej i zalacznika bedacego obrazem w formacie GIF.

[jkowalski@vidmo]$ cat q.gif | base64
R0lGODlhFAAUAOMAAIHL73vF6nW/42+43Wmy11CavmOs0VagxdjY2OXl5V2my/////Hx8cvL
y////////yH5BAEKAA8ALAAAAAAUABQAAASn8IFAgZg06yCH/2DoEUUwEsSAqoaaEsZRACwM
D0gyGDaslC4eQbAoLgQohUHxo6EIikExQFygDNifqUdEGgILBI8p28J4WBhj0UgvZzXFdVi0
KbU1LI/I2OmZcHNCRTtXS3hJZwQLDHpoMYFoPYZ/BkBPY1IMcoaANGhyPEV/Pk0uiY9CoWUs
SqRLS1Bvn3ewta53M4cKB7xkTLy9BzIPBcbHyMnHDxEAOw==
[jkowalski@vidmo]$ telnet elf.ii.uj.edu.pl 25
Trying 149.156.65.17...
Connected to elf.ii.uj.edu.pl.
Escape character is '^]'.
220 elf.ii.uj.edu.pl ESMTP (elf II UJ)
EHLO vidmo.net
250-elf.ii.uj.edu.pl
250-PIPELINING
250-SIZE 20000000
250-ETRN
250 8BITMIME
MAIL FROM:<jkowalski@vidmo.net>
250 Ok
RCPT TO:<jan.kowalski@ii.uj.edu.pl>
250 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
From: <jkowalski@vidmo.net>
To: <hacker@ii.uj.edu.pl>
Date: today
Subject: A message with an attachment
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="bound"

--bound
Content-Type: text/plain
Content-Disposition: inline

Hello :-)

Enclosed please find a picture of '?'.

Kind regards,
jkowalski

--bound
Content-Type: image/gif; name="q.gif"
Content-Disposition: attachment; filename="q.gif"
Content-Transfer-Encoding: base64

R0lGODlhFAAUAOMAAIHL73vF6nW/42+43Wmy11CavmOs0VagxdjY2OXl5V2my/////Hx8cvL
y////////yH5BAEKAA8ALAAAAAAUABQAAASn8IFAgZg06yCH/2DoEUUwEsSAqoaaEsZRACwM
D0gyGDaslC4eQbAoLgQohUHxo6EIikExQFygDNifqUdEGgILBI8p28J4WBhj0UgvZzXFdVi0
KbU1LI/I2OmZcHNCRTtXS3hJZwQLDHpoMYFoPYZ/BkBPY1IMcoaANGhyPEV/Pk0uiY9CoWUs
SqRLS1Bvn3ewta53M4cKB7xkTLy9BzIPBcbHyMnHDxEAOw==

--bound--
.
250 Ok: queued as F23D01100096D
QUIT
221 Bye
Connection closed by foreign host.
[jkowalski@vidmo]$
Pole MIME-Version jest obowiazkowe i podaje wersje uzytego standardu MIME. Pole Content-Disposition informuje o zalecanym sposobie prezentacji czesci wiadomosci uzytkownikowi. Parametr filename pozwala na zachowanie takiej samej nazwy pliku u odbiorcy. Parametr boundary dla typu multipart definiuje ciag znakow sluzacy do odzielania czesci wiadomosci. Ciag ten nie moze wystepowac w zadnym innym kontekscie w calej wiadomosci. Kazde uzycie tego ciagu musi byc poprzedzone '--'. Koniec wiadomosci zaznaczany jest tym samym ciagiem znakow rowniez poprzedzonym '--' i dodatkowo zakonczonym '--'. Pole Content-Transfer-Encoding informuje o sposobie zakodowania czesci wiadomosci, do ktorej sie odnosi.

Spis tresci 3. Zagrozenia zwiazane z poczta elektroniczna

Spis tresci 3.1. Naduzycia SMTP relay

Jednym z najczestszych naduzyc zwiazanych z poczta elektroniczna jest spam. Poniewaz adresy IP komputerow, z ktorych wysylana jest duza ilosc spamu czesto blokowane sa na firewallu spamerzy znajduja inne sposoby na dostarczenie swojego poslania do skrzynek przymusowych odbiorcow.

Jednym z takich sposob jest naduzycie serwerow pocztowych, ktore nie sa odpowiednio zabezpieczone i pozwalaja byle komu na relay dokadkolwiek. Spamer, ktorego IP jest odrzucany przez docelowy system moze wyslac swoj szmelc laczac sie nie z docelowym systemem, lecz z ktoryms ze zle skonfigurowanych serwerow pocztowych, ktore z kolei przekaza jego "wiadomosc" do systemu docelowego korzystajac z faktu, ze czesto IP takiego zle skonfigurowanego serwera pocztowego nie jest blokowany przez firewall systemu docelowego.

Umozliwiajac wiec relay dowolnym uzytkownikom, ktorzy tylko zdolaja sie polaczyc z portem 25 danego systemu ryzykuje sie, ze po jakims czasie jego IP znajdzie sie na liscie antyspamowej, gdyz administratorzy systemow, ktore byly spamowane z wykorzystaniem tego zle zabezpieczonego systemu jako SMTP relay zablokuja jego IP na firewallu uniemozliwiajac wysylanie maili rowniez uzytkownikom nie majacym zlych intencji.

Czesto jednak nie mozna wylaczyc SMTP relay calkowicie gdyz jest on powszechnie stosowany przez ludzi, ktorzy nie sa sklonni czytac swojej poczty bezposrednio na serwerze i preferuja uzywac programow uruchamianych na ich lokalnym komputerze i wykorzystujacych SMTP relay i POP3 do wysylania i odbierania maili.

Najlepszym sposobem zabezpieczenia sie w takim przypadku jest zezwolenie na SMTP relay jedynie tym uzytkownikom, ktorzy dokonaja uprzednio autoryzacji (patrz rozdzial 4).

Spis tresci 3.2. Fake-mail

Jak widzielismy w rozdziale 2.3 dane umieszczane w naglowku wiadomosci email nie zawsze musza odpowiadac prawdzie. W zasadzie jedynym polem, ktoremu naprawde mozna ufac jest pole Received i to tez jedynie ostatnie dopisane przez nasz wlasny serwer pocztowy. Informuje ono o tym skad nadeszla dana wiadomosc. Wszystkie pozostale dane moga byc sfabrykowane dokladnie tak jak bylo to pokazane w poprzednim rozdziale.

Jedynym pewnym sposobem weryfikacji rzeczywistego autorstwa poczty elektronicznej jest podpis cyfrowy pod ta wiadomoscia (opisany w rozdziale 5.1.3).

Spis tresci 3.3. Prywatnosc

Wszystkie wiadomosci email wysylane przez standardowy SMTP bez rozszerzen sa transmitowane otwartym tekstem. Oznacza to, ze kazdy kto ma dostep do wezlow sieci posredniczacych w transmisji lub do segmentow sieci, poprzez ktore wiadomosc jest transmitowana moze zapoznac sie z jej zawartoscia lub nawet ja zmodyfikowac.

Ochrone przed modyfikacja zapewnic moze podpisywanie elektroniczne wiadomosci. Prywatnosc korespondencji mozna zapewnic poprzez stosowanie szyfrowania. Obie funkcjonalnosci sa zapewniane przez rozszerzenie standardu MIME pozwalajace na stosowanie technik kryptograficznych - S/MIME (ang. Secure Multipurpose Internet Mail Extensions) opipsany w rozdziale 5.1.

Istnieje rowniez rozszerzenie protkolu SMTP pozwalajace na szyfrowanie dialogu SMTP wykorzystujace SSL (ang. Secure Socket Layer). Rozszerzenie to opisane jest w rozdziale 4.7.

Spis tresci 4. Metody uwierzytelniania i szyfrowania w protokole SMTP

Spis tresci 4.1. SMTP AUTH

Aby umozliwic uwierzytelnianie w protokole SMTP zdefiniowane zostalo rozszerzenie tego protokolu o nazwie AUTH. Pozwala ono na uzycie kilku metod uwierzytelniania, z ktorych nie kazda musi byc zaimplementowana przez serwer i wykorzystywana przez klienta. Rozszerzenia wspierane przez serwer sa przezen sygnalizowane w odpowiedzi na inicjujaca dialog SMTP komende EHLO. W ponizszym przykladzie serwer informuje klienta, ze wspiera nastepujace metody autoryzacji:

[jan.kowalski@elf]$ telnet vidmo.net 25
Trying 83.16.216.214...
Connected to vidmo.net.
Escape character is '^]'.
220 vidmo.net ESMTP Postfix
EHLO elf.ii.uj.edu.pl
250-vidmo.net
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250-AUTH=LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250 8BITMIME
QUIT
221 Bye
Connection closed by foreign host.
[jan.kowalski@elf]$
W ogolnym przypadku uwierzytelnianie polega na wyslaniu przez klienta komendy AUTH i wymianie miedzy serwerm a klientem kilku porcji informacji zakodowanych za pomoca base64. Jesli to klient zaczyna wymiane (jak to dzieje sie na przyklad w metodzie PLAIN) to moze on swoja porcje informacji wyslac od razu jako argument komendy AUTH.

Spis tresci 4.2. Metoda PLAIN

W metodzie PLAIN klient wysyla serwerowi jeden komunikat zawierajacy trzy informacje:

Poniewaz z reguly niewiele systemow jest sklonnych nadac uzytkownikowi uprawnienia innego uzytkownika niz tego, ktorego haslo zostalo uzyte do uwierzytelnienia to zwykle authid=userid.

Komunikat wysylany przez klienta do serwera w metodzie PLAIN oblicza sie w nastepujacy sposob:

authtoken = base64('authid', 0, 'userid', 0, 'password')
gdzie '0' oznacza znak o kodzie zero. Oto przyklad:
[jan.kowalski@elf]$ telnet vidmo.net 25
Trying 83.16.216.214...
Connected to vidmo.net.
Escape character is '^]'.
220 vidmo.net ESMTP Postfix
EHLO elf.ii.uj.edu.pl
250-vidmo.net
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250-AUTH=LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250 8BITMIME
AUTH PLAIN fhjksdhfkjhsdfhklsdh
535 Error: authentication failed
AUTH PLAIN amtvd2Fsc2tpAGprb3dhbHNraQBibGVibGU=
235 Authentication successful
[jkowalski@vidmo]$ echo -n 'jkowalski#jkowalski#bleble' | tr '#' "\000" | base64
amtvd2Fsc2tpAGprb3dhbHNraQBibGVibGU=
[jkowalski@vidmo]$
















Spis tresci 4.3. Metoda LOGIN

Metoda login wyglada podobnie do zwyklego logowania w protokole telnet lub ssh.

  1. Serwer zadaje pytanie o username uzytkownika.
  2. Uzytkownik odpowiada podajac swoj login.
  3. Serwer zadaje pytanie o haslo uzytkownika.
  4. Uzytkownik odpowiada podajac swoje haslo.
Roznica jest jedynie taka, ze wszystkie komunikaty zakodowane sa base64. Oto przyklad:
[jan.kowalski@elf]$ telnet vidmo.net 25
Trying 83.16.216.214...
Connected to vidmo.net.
Escape character is '^]'.
220 vidmo.net ESMTP Postfix
EHLO elf.ii.uj.edu.pl
250-vidmo.net
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250-AUTH=LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250 8BITMIME
AUTH LOGIN
334 VXNlcm5hbWU6
amtvd2Fsc2tp
334 UGFzc3dvcmQ6
aGFzZWxrbw==
235 Authentication successful
[jkowalski@vidmo]$ echo VXNlcm5hbWU6 | base64 -d
Username:[jkowalski@vidmo]$ echo -n jkowalski | base64
amtvd2Fsc2tp
[jkowalski@vidmo]$ echo UGFzc3dvcmQ6 | base64 -d
Password:[jkowalski@vidmo]$ echo -n haselko | base64
aGFzZWxrbw==
[jkowalski@vidmo]$














Spis tresci 4.4. Zastosowanie hasel jednorazowych

Jak widac metody PLAIN i LOGIN pozostawiaja wiele do zyczenia jesli chodzi o bezpieczenstwo. Przesylanie hasel uzytkownika zakodowanych jedynie za pomoca base64, ktory mozna bardzo latwo odkodowac jest duzym ryzykiem. To powoduje, ze metody te powinny byc stosowane jedynie w dwoch przypadkach:

W celu umozliwienia stosowania hasel OPIE w SMTP stosownych zmian konfiguracyjnych dokonac nalezy w PAM (ang. Pluggable Authentication Modules) i SASL (ang. Simple Authentication and Security Layer).

W przypadku gdy nie jest stosowane szyfrowanie dialogu SMTP (przy uzyciu rozszerzenia STARTTLS) a hasla uzywane przez uzytkownikow nie sa haslami jednorazowymi nie nalezy stosowac metod PLAIN ani LOGIN, lecz zastosowac jedna z bezpiecznych metod uwierzytelniania opisanych w nastepnych rozdzialach. Niestety bardzo wielu uzytkownikow poczty zapomina skonfigurowac swoje programy tak by korzystaly z SSL tym samym zarazajac sie na ryzyko przechwycenia ich hasel.

Spis tresci 4.5. Metoda CRAM-MD5

Metoda uwierzytelniania CRAM-MD5 polega na wykazaniu przez klienta, ze zna pewien sekret (haslo), ktore jest rowniez znane serwerowi. Podczas przeprowadzania tego dowodu sekret nie jest jednak wysylany poprzez siec co gwarantuje bezpieczenstwo tej metody.

Uwierzytelnianie metoda CRAM-MD5 odbywa sie wg nastepujacej procedury:

  1. Serwer losuje ciag bajtow zw. challenge, koduje go base64 i wysyla klientowi.
  2. Klient oblicza wartosc HMAC (opartego na MD5, patrz rozdzial 1.8) z wartosci odkodowanego base64 challenge przy uzyciu sekretu jako klucza.
    authtoken=HMAC(sekret, challenge)
    authtoken=MD5(sekret XOR opad . MD5(sekret XOR ipad . challenge))
    Tak obliczony authtoken jest zapisywany jako ciag 32 cyfr szesnastkowych w ASCII
  3. Klient konstruuje ciag znakow 'username authtoken' (odsperowane spacja) i po zakodowaniu go base64 odsyla do serwera.

[jkowalski@vidmo]$ telnet vidmo.net 25
Trying 83.16.216.214...
Connected to vidmo.net.
Escape character is '^]'.
220 vidmo.net ESMTP Postfix
EHLO vidmo.net
250-vidmo.net
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN CRAM-MD5
250-AUTH=LOGIN PLAIN CRAM-MD5
250 8BITMIME
AUTH CRAM-MD5
334 PDEzODQyMzA3NDUuMTAwNzg2MDVAdmlkbW8ubmV0Pg==
amtvd2Fsc2tpIGFjN2QwYTRjNjM1ZjhjNGY1ZmRmNjU4OTIzOTRjZjIx
235 Authentication successful
[jkowalski@vidmo]# ls -l
total 10
-rw-r--r--  1 jkowalski  wheel  64 May 29 15:45 ipad
-rw-r--r--  1 jkowalski  wheel  64 May 29 15:48 ipadxored
-rw-r--r--  1 jkowalski  wheel  64 May 29 15:45 opad
-rw-r--r--  1 jkowalski  wheel  64 May 29 15:48 opadxored
-rw-r--r--  1 jkowalski  wheel  64 May 29 15:47 secret
[jkowalski@vidmo]# base64 -d > challenge
PDEzODQyMzA3NDUuMTAwNzg2MDVAdmlkbW8ubmV0Pg==
[jkowalski@vidmo]# cat ipadxored challenge > ipadchall
[jkowalski@vidmo]# cat ipadchall | md5 | dehex > innerhash
[jkowalski@vidmo]# cat opadxored innerhash | md5
ac7d0a4c635f8c4f5fdf65892394cf21
[jkowalski@vidmo]# echo -n 'jkowalski ac7d0a4c635f8c4f5fdf65892394cf21' | base64
amtvd2Fsc2tpIGFjN2QwYTRjNjM1ZjhjNGY1ZmRmNjU4OTIzOTRjZjIx
[jkowalski@vidmo]#


(Komenda dehex jest programem, ktory zamienia ciag cyfr szesnastkowych zapisanych w ASCII na dane binarne.)

Wada metody CRAM-MD5 jest to, ze nie uwierzytelnia serwera wzgledem klienta a jedynie klienta wzgledem serwera, a zatem ktos moze sie pod niego podszywac jesli zdola oszukac routing lub DNS. Jest wiec podatna na atak podszywania.

Inna wada tej metody jest to, ze serwer musi znac haslo klienta, co powoduje, ze nie mozna jej stosowac w polaczeniu ze standardowym mechanizmem hasel w UNIXie gdyz w nim serwer nie zna hasel a jedynie wartosc pewnej funkcji haszujacej obliczonej dla hasla uzytkownika.

Spis tresci 4.6. Metoda DIGEST-MD5

Metoda DIGEST-MD5 podobnie jak CRAM-MD5 bazuje na funkcji haszujacej i MAC (ang. Message Authentication Code) by nie wysylac sekretu sluzacego do uwierzytelniania poprzez siec. Dokonuje ona jednak uwierzytelnienia nie tylko klienta ale i serwer uniemozliwiajac tym samym atak podszywania.

Podobnie jak w metodzie CRAM-MD5 serwer musi znac haslo klienta co powoduje trudnosci w integracji tej metody ze standardowym systemem hasel w UNIXie.

Jest to zdecydowanie najbezpieczniejsza metoda uwierzytelniania z czterech opisanych w tym rozdziale.

Spis tresci 4.7. Rozszerzenie STARTTLS

Poniewaz dialog SMTP odbywa sie standardwowo jako wymiana komunikatow i danych tekstem otwartym, jest on narazony na podsluch, ktory w przypadku korespondencji utrudnia zachowanie prywatnosci. Aby poprawic ta sytuacje stworzono rozszerzenie protokolu SMTP, ktore pozwala na szyfrowanie wymienianych komunikatow.

Rozszerzenie to nazywa sie STARTTLS, tak samo jak komenda, ktora powoduje uaktywnienie warstwy SSL, ktora dokonuje szyfrowania wszystkich wymienianych komunikatow.

Wykorzystanie STARTTLS wyglada nastepujaco:

[jan.kowalski@elf]$ telnet vidmo.net 25
Trying 83.16.216.214...
Connected to vidmo.net.
Escape character is '^]'.
220 vidmo.net ESMTP Postfix
EHLO vidmo.net
250-vidmo.net
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250-AUTH=LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250 8BITMIME
STARTTLS
220 Ready to start TLS
Po odebraniu odpowiedzi '220' przez klienta rozpoczyna sie klasyczny handshake SSL i dalszy dialog jest zaszyfrowany uniemozliwiajac podluch transmisji.

Oczywiscie by mozna bylo uzyc tej komendy serwer musi ja wspierac, a wiec musi ona wystapic na liscie wspieranych rozszerzen wyslanych przez serwer w odpowiedzi na komende EHLO.

Spis tresci 5. Prywatnosc w poczcie elektronicznej

Spis tresci 5.1. S/MIME

S/MIME (ang. Secure Multipurpose Internet Mail Extensions) jest standardem rozszerzajacym mozliwosci MIME tak by wspierac prywatnosc i uwierzytelnianie korespondencji. Standard S/MIME definiuje dodatkowe typy danych sluzacych do opisu danych zaszyfrowanych, podpisanych, samych podpisow (tzw. podpisow zewnetrznych) oraz certyfikatow i list CRL (ang. Certificate Revokation List):

Spis tresci 5.1.1. CMS

Zaszyfrowana lub podpisana wiadomosc umieszczana wewnatrz komunikatu S/MIME musi zostac stworzona zgodnie ze standardem CMS (ang. Cryptographic Message Syntax), ktory definiuje sposob organizacji danych umieszczanych w takiej wiadomosci. Wiadomosc taka ma bowiem dosc skomplikowana strukture wewnatrzna - musi zawierac certyfikaty uzytych kluczy, wartosci podpisow cyfrowych oraz sama informacja, ktora ma otrzymac jej odbiorca.

CMS definiuje kilka rodzajow informacji, z ktorych S/MIME wykorzystuje dwa:

S/MIME definiuje parametr o nazwie smime-type, ktorego wartoscia jest nazwa rodzaju obiektu CMS znajdujacego sie po naglowku S/MIME. Pole to moze przyjmowac m.in. nastepujace wartosci: 'signed-data' i 'enveloped-data' w zaleznosci od tego jaki obiekt CMS jest przenoszony w wiadomosci.

Obiekty CMS przenoszone w wiadomosciach S/MIME sa kodowane base64.

Spis tresci 5.1.1.1. SignedData

Obiekt CMS zwany SignedData zawiera m.in. nastepujace informacje:

Dane w takim obiekcie CMS nie sa chronione przed niepowolanym odczytem.

Istnieje mozliwosc stworzenia obiektu CMS SignedData bez danych zawierajacego sam podpis elektroniczny. Zaklada sie wtedy, ze dane, ktore sa podpisane beda dostepne dla weryfikujacego podpis w inny sposob. Wykorzystuje sie to przy tzw. "zewnetrznych" podpisach opisanych w rozdziale 5.1.3.2.

Obiekt CMS SignedData moze rowniez sluzyc do przenoszenia certyfikatow lub CRLow (ang. Certificate Revokation List). W takim przypadku nie zawiera danych, a pole z podpisem jest puste. Ta mozliwosc S/MIME wykorzystuje do konstrukcji wiadomosci przenoszacych certyfikaty i CRLe (patrz. rozdzial 5.1.4).

Spis tresci 5.1.1.2. EnvelopedData

Obiekt EnvelopedData sluzy ochronie prywatnosci danych i zawiera nastepujace informacje:

Spis tresci 5.1.2. Poczta zaszyfrowana

Zaszyfrowana wiadomosc, ktora ma zostac przeslana zgodnie ze standardem S/MIME powinna zostac przetworzona zgodnie z CMS w obiekt EnvelopedData, a nastepnie zakodowana base64. Nastepnie dodaje sie do niej naglowek S/MIME z Content-Type ustawionym na application/pkcs7-mime z parametrem smim-type o wartosci "enveloped-data".

Oto przyklad takiej wiadomosc:

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

Spis tresci 5.1.3. Poczta podpisana

Standard S/MIME przewiduje dwa sposoby transmisji wiadomosci podpisanej elektronicznie. W pierwszym z nich wiadomosc i podpis ukrywane sa wewnatrz obiektu CMS SignedData przesylanego nastepnie odbiorcy. W drugim tworzony jest obiekt CMS SignedData zawierajacy jedynie podpis wiadomosci. Nastepnie wiadomosc i podpis w postaci obiektu SignedData sa wysylane jako odrebne czesci jednej wiadomosci. Drugi z tych sposobow ma ta przewage nad pierwszym, ze wiadomosc tak wyslana jest czytelna rowniez dla odbiorcow, ktorzy nie moga przetwarzac S/MIME i CMS (chociaz sa oni w stanie odczytac taka wiadomosc nie moga oczywiscie zweryfikowac podpisu pod nia). Wada tego sposobu transmisji podpisanej elektronicznie wiadomosci jest to, ze niektore bramy pocztowe moga tak zmodyfikowac jej postac, ze weryfikacja podpisu moze sie nie powiesc.

Spis tresci 5.1.3.1. Podpis zintegrowany z listem

Wiadomosc S/MIME z podpisem i wiadomoscia ukryta razem wewnatrz obiektu CMS SignedData podobnie jak wiadomosc zaszyfrowana wykorzystuje Content-Type application/pkcs7-mime. Roznia sie one wartoscia parametru smime-type, ktory w przypadku wiadomosci podpisanej ma wartosc "signed-data". Pod kazdym innym wzgledem jest ona konstruowana podobnie do wiadomosci zaszyfrowanej.

Oto przyklad:

Content-Type: application/pkcs7-mime; smime-type=signed-data;
     name=smime.p7m
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=smime.p7m

567GhIGfHfYT6ghyHhHUujpfyF4f8HHGTrfvhJhjH776tbB9HG4VQbnj7
77n8HHGT9HG4VQpfyF467GhIGfHfYT6rfvbnj756tbBghyHhHUujhJhjH
HUujhJh4VQpfyF467GhIGfHfYGTrfvbnjT6jH7756tbB9H7n8HHGghyHh
6YT64V0GhIGfHfQbnj75

Spis tresci 5.1.3.2. Podpis "zewnetrzny"

Wiadomosc S/MIME, ktora ma byc czytelna dla odbiorcy niezaleznie od tego czy jego oprogramowanie wspiera S/MIME czy nie musi byc skonstruowana tak by wiadomosc nie byla ukryta wewnatrz obiektu CMS SignedData. Jest to wiec wiadomosc dwuczesciowa skladajaca sie z

  1. Wiadomosci w czytelnej postaci przenoszonej jak kazda inna wiadomosc zgodna z MIME.
  2. Podpisu elektronicznego w postaci obiektu CMS SignedData, ktory nie zawiera wiadomosci.

Pierwsza czesc moze byc dowolna wiadomoscia MIME. Druga musi miec Content-Type application/pkcs7-signature i zawierac zakodowany base64 obiekt CMS SignedData z podpisem pierwszej czesci. Obie te wiadomosci sa laczone w wiekosza wiadomosc S/MIME z Content-Type multipart/signed. Ta ostatnia wartosc pola Content-Type wymaga podania dwoch parametrow: protocol, ktory powinien zawsze miec wartosc "application/pkcs7-signature" oraz micalg, ktorego wartoscia powinno byc "md5" jesli podpis elektroniczny korzysta z funkcji haszujacej MD5, "sha1" jesli korzysta z SHA-1 lub "unknown" w przypadku gdy zadna z powyzszych funkcji haszujacych nie jest wykorzystywana. Parametr micalg pozwala na weryfikacje podpisu bez dwukrotnego czytania wiadomosci.

Oto przyklad wiadomosci S/MIME z "zewnetrznym" podpisem. Jak wiadac tresc wiadomosci nie jest ukryta wewnatrz obiektu CMS.

Content-Type: multipart/signed;
   protocol="application/pkcs7-signature";
   micalg=sha1; boundary=boundary42

--boundary42
Content-Type: text/plain

This is a clear-signed message.

--boundary42
Content-Type: application/pkcs7-signature; name=smime.p7s
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=smime.p7s

ghyHhHUujhJhjH77n8HHGTrfvbnj756tbB9HG4VQpfyF467GhIGfHfYT6
4VQpfyF467GhIGfHfYT6jH77n8HHGghyHhHUujhJh756tbB9HGTrfvbnj
n8HHGTrfvhJhjH776tbB9HG4VQbnj7567GhIGfHfYT6ghyHhHUujpfyF4
7GhIGfHfYT64VQbnj756

--boundary42--

Spis tresci 5.1.4. Wiadomosci przenoszace certyfikaty

Jak wspomniano przy opisie obiektow CMS SignedData moga one nie przenosic podpisu i danych, lecz same certyfikate lub listy certyfikatow odrzuconych (CRL). Wiadomosc taka wyglada dokladnie jak wiadomosc application/pkcs7-mime przenoszaca podpisane lub zaszyfrowane informacje z ta roznica, ze parametr smime-type ma wartosc "certs-only" (a nazwa pliku podana w parametrze name i filename maja rozszerzenie ".p7c").

Spis tresci 5.1.5. Ochrona naglowka

Informacje, ktore sa przekazywane do podpisania lub zaszyfrowania do modulu realizujacego operacje tworzenia obiektow CMS skladaja sie z wiadomosci wraz z naglowkiem MIME. Naglowek RFC 822 normalnie nie jest brany pod uwage przy tworzeniu podpisu lub szyfrowaniu. Oznacza to, ze jest on narazony na modyfikacje.

Mozna jednak sie przed tym uchronic tworzac z wiadomosci i jej naglowka RFC 822 komunikat MIME typu message/rfc822 i szyfrujac badz podpisujac tak utworzona nowa wiadomosc.

Oczywiscie ten sam badz inny naglowek RFC 822 i tak bedzie musial zostac dodany na zewnatrz obiektu CMS ujawniajac wszystkie informacje w nim zawarte. Nie ma jednak mozliwosci ukrycia ich, gdyz sa to informacje wykorzystywane do przesylania wiadomosci - musza one byc dostepne dla systemow przenoszacyc wiadomosc, by wiedzialy one jak i dokad ja dostarczyc.