Elektronickß poÜta v TCP/IP Φas¥ Ütvrtß


MIME (Multipurpose Internet Mail Extensions)

Elektronickou poÜtou okrem be₧n²ch textov²ch sprßv m⌠₧eme posiela¥ aj ╛ubovo╛nΘ binßrne s·bory. SystΘmovΘ rieÜenie, pomocou ktorΘho sa toto dosiahlo sa naz²va MIME (Multipurpose Internet Mail Extensions) a je definovanΘ v normßch RFC 1521 a RFC 1522.

HlaviΦkovΘ pole MIME-Version
Toto je jedinΘ pole MIME, ktorΘ nezaΦφna re¥azcom "Content-". Polo₧ka Üpecifikuje verziu MIME. D⌠vodom zavedenia tohoto k╛·ΦovΘho slova je zabezpeΦenie kompatibility, t.j. pod╛a prφtomnosti tejto polo₧ky v sprßve klient rozpoznß, ₧e ide o sprßvu rozÜφren· pod╛a MIME a verziu MIME, pod╛a ktorΘho bola sprßva rozÜφrenß. V s·Φasnosti sa pou₧φva MIME verzia 1.0. V bud·cnosti m⌠₧u prφs¥ ∩alÜie verzie MIME, s in²mi typmi hlaviΦkov²ch polφ. Sprßva zostavenß pod╛a RFC 2045 a₧ RFC 2049 musφ toto hlaviΦkovΘ pole obsahova¥ v₧dy. Toto pole musφ by¥ uvedenΘ pred ostatn²mi hlaviΦkov²mi poliami MIME.

HlaviΦkovΘ pole Content-Type
Pole popisuje typ dßt obsiahnut²ch v tele sprßvy tak, aby klient, ktor² t·to sprßvu obdr₧φ, mohol zvoli¥ vhodn² sp⌠sob prezentßcie obsahu sprßvy. HlaviΦkovΘ pole Üpecifikuje charakter obsahu sprßvy pomocou typu a podtypu, prφpadne pomocou doplnkov²ch informßciφ. DoplnkovΘ informßcie s· uvedenΘ za bodkoΦiarkou ako parametre v tvare parameter=hodnota. Parametrov m⌠₧e by¥ za sebou uveden²ch aj viacej, ale v₧dy musia by¥ oddelenΘ bodkoΦiarkou. Na poradφ t²chto parametrov nezßle₧φ. Content-Type: typ/podtyp; parameter1=hodnota; parameter2=hodnota ... Typ k╛·ΦovΘ slovo, ktorΘ urΦuje o ak² typ dßt ide a podtyp je bli₧Üia Üpecifikßcia obsahu sprßvy. Naprφklad hlaviΦkovΘ pole Content-Type: image/jpeg informuje prφjemcu sprßvy o tom, ₧e obsahom sprßvy je obrßzok vo formßte jpeg. RFC 2045 a₧ RFC 2049 obsahuje nieko╛ko zßkladn²ch typov. ╧alÜie typy m⌠₧u by¥ pod╛a RFC 2048 registrovanΘ odoslanφm prφsluÜnΘho dokumentu na adresu: ietf-types@iana.org.

Typy sa rozde╛uj· na dve skupiny:

HlaviΦkovΘ pole Content-Transfer-Encoding

╚asto sa stßva, ₧e elektronickou poÜtou posielame aj binßrne s·bory (napr. s·bory s koncovkou *.zip, *.jpeg, *.gif a pod.). Tieto s·bory nie je obvykle mo₧nΘ posla¥ priamo. Z toho d⌠vodu musφ by¥ pou₧it² algoritmus, ktor² zak≤duje binßrne dßta do krßtkych riadkov 7-bitovΘho ASCII k≤du. RFC 1521 obsahuje tieto algoritmy k≤dovania:

7-bit
Ide o implicitn· met≤du k≤dovania, ktorß sa predpokladß, pokia╛ nie je hlaviΦkovΘ pole Content-Transfer-Encoding uvedenΘ. Dßta takto spracovanΘ nie s· v⌠bec k≤dovanΘ, s· iba rozdelenΘ do krßtkych riadkov, ktorΘ obsahuj· len znaky us-ascii, t.j. znaky zo zßkladnΘho rozsahu 32 a₧ 126.

8-bit
Dßta transformovanΘ t²mto algoritmom nie s· opΣ¥ k≤dovanΘ, s· iba rozdelenΘ do krßtkych riadkov. M⌠₧u sa tu vyskytn·¥ aj znaky mimo zßkladn² rozsah 32 a₧ 126.

binary
Okrem mo₧nΘho v²skytu znakov mimo rozsahu 32 a₧ 126 nie je zaruΦenß ani dσ₧ka riadkov. Tento algoritmus nepredstavuje ₧iadne k≤dovanie.

quoted-printable
Tento typ k≤dovania je vhodn² pre dßta, ktorΘ z vΣΦÜej Φasti obsahuj· ASCII znaky zo zßkladnΘho rozsahu (32 a₧ 126), no len mal² poΦet z nich treba k≤dova¥. V²sledkom k≤dovania je teda ASCII text, ktor² je aj bez dek≤dovania relatφvne Φitate╛n². K≤dovan² m⌠₧e by¥ aj text, ktor² obsahuje len ASCII znaky. Robφ sa to z d⌠vodu zabezpeΦenia integrity dßt (napr. ak dßta prechßdzaj· cez brßnu (gateway), ktorß vykonßva nßhradu znakov alebo zarovnßvanie riadkov).
Pravidlß k≤dovania:
  • ╝ubovoln² znak (okrem znaku konca riadku) je nahraden² znakom '=', za ktor²m nasleduje hexadecimßlna hodnota znaku.

  • Znaky s desiatkovou hodnotou od 33 do 60 a od 62 do 126 vrßtane s· nahradenΘ ASCII znakmi (od '!' do '<' a od '>' do '~').

  • Znaky s hodnotou 9 a 32 s· nahradenΘ znakmi TAB a SPACE. Tieto znaky sa nesm· vyskytn·¥ na konci riadku.

  • Koniec riadku je vyjadren² znakom CRLF.

  • Zak≤dovan² riadok m⌠₧e ma¥ maximßlne 76 znakov. Pokia╛ je riadok dlhÜφ, vlo₧φ sa na jeho koniec znak '='.
base64
Tento algoritmus (obr. 1) je pravdepodobne najvhodnejÜφm pre k≤dovanie binßrnych s·borov. K≤dovanΘ dßta s· iba o tretinu dlhÜie ne₧ dßta p⌠vodnΘ. K≤dovacφ algoritmus je jednoduch². Pou₧φva tabu╛ku base64, ktorß obsahuje 64 znakov a znak "=". Znak "=" sa pou₧φva pre Üpecißlne ·Φely. Na zaΦiatku k≤dovania sa binßrne dßta rozdelia na skupiny po troch bajtoch a 24 bitov ka₧dej trojice sa prerozdelφ na Ütyri bloky po 6 bitov. Ka₧d²ch 6 bitov je potom nahraden²ch zodpovedaj·cim znakom z tabu╛ky base64 (tab. 1). Takto zak≤dovan² binßrny s·bor sa musφ usporiada¥ do riadkov, ktor²ch maximßlna dσ₧ka je 76 znakov. Pokia╛ nie je dσ₧ka p⌠vodnΘho s·boru delite╛nß tromi, zostane nßm na konci k≤dovania menej ne₧ 24 bitov, teda 8 alebo 16. V prvom prφpade sa poΦet bitov doplnφ sprava nulami na 12, teda dva bloky, ktorΘ sa zak≤duj· pomocou dvoch znakov. Za t²mito znakmi sa eÜte vlo₧φ dvakrßt znak "=". V druhom prφpade sa poΦet bitov doplnφ sprava nulami na 18, z toho dostaneme tri znaky, ktorΘ sa eÜte doplnia znakom "=". Dσ₧ka v²slednΘho k≤dovanΘho binßrneho s·boru je v₧dy delite╛nß Ütyrmi.



Obr. 1: Princφp k≤dovania binßrnych s·borov algoritmom base64


radix-64
Ide o rozÜφrenie k≤dovania base64 o kontroln² s·Φet. Data v sprßve s· k≤dovanΘ algoritmom base64, za nimi vÜak nasleduje nov² riadok (CRLF), znak "=" a 24 bitov dlh² kontroln² s·Φet z p⌠vodn²ch, nek≤dovan²ch dßt. Tento s·Φet je vypoΦφtan² algoritmom CRC-24 a je zak≤dovan² do formßtu base64. Zdrojov² k≤d algoritmu CRC-24 ako i popis k≤dovania radix-64 nßjdete v dokumente RFC 2440.

Prφklad:
  -----BEGIN PGP MESSAGE-----
  Version: OpenPrivacy 0.99

  yDgBO22WxBHv7O8X7O/jygAEzol56iUKiXmV+XmpCtmpqQUKiQrFqclFqUDBovzS
  vBSFjNSiVHsuAA==
  =njUN
  -----END PGP MESSAGE-----
V prφpade, ₧e vßÜ softvΘr nepodporuje k≤dovanie radix-64, staΦφ ak odstrßnite posledn² riadok k≤dovanej sprßvy a na dek≤dovanie pou₧ijete softvΘr, ktor² podporuje algoritmus base64.

x- anything
ètandard RFC 1521 [13] umo₧≥uje pou₧i¥ aj ∩alÜie typy k≤dovania. Ich oznaΦenie v hlaviΦkovom poli Content-Transfer-Encoding musφ zaΦφna¥ prefixom x-. Tieto novΘ typy k≤dovania m⌠₧u by¥ pou₧itΘ pre experimenty. Ak by¥ maj· pou₧φvanΘ v praxi, musia by¥ pod╛a RFC 2048 registrovanΘ odoslanφm prφsluÜnΘho dokumentu na adresu: ietf-types@iana.org. RegistrovanΘ algoritmy s· uverejnenΘ na adrese: http://www.iana.org/assignments/transfer-encodings.
Value Encoding Value Encoding Value Encoding Value Encoding Value Encoding Value Encoding
0 A 12 M 24 Y 36 k 48 w 60 8
1 B 13 N 25 Z 37 l 49 x 61 9
2 C 14 O 26 a 38 m 50 y 62 +
3 D 15 P 27 b 39 n 51 z 63 /
4 E 16 Q 28 c 40 o 52 0 (pad) =
5 F 17 R 29 d 41 p 53 1
6 G 18 S 30 e 42 q 54 2
7 H 19 T 31 f 43 r 55 3
8 I 20 U 32 g 44 s 56 4
9 J 21 V 33 h 45 t 57 5
10 K 22 W 34 i 46 u 58 6
11 L 23 X 35 j 47 v 59 7

Tab. 1: Abeceda base64


HlaviΦkovΘ pole Content-ID

Hodnota tohto po╛a m⌠₧e by¥ pou₧itß pre jednoznaΦn· identifikßciu sprßvy. HlaviΦkovΘ pole je volite╛nΘ; jeho pou₧itie je ale povinnΘ v implementßcii, ktorß generuje dßta typu message/external-body.


HlaviΦkovΘ pole Content-Description

HlaviΦkovΘ pole obsahuje informßcie o prenßÜanej sprßve. Prφkladom m⌠₧e by¥ nßzov obrßzku, ktor² sa nachßdza v tele sprßvy.


╧alÜie hlaviΦkovΘ polia

Aj ke∩ RFC 2045 a₧ RFC 2049 neuvßdzaj· ₧iadne ∩alÜie hlaviΦkovΘ polia Content-, staΦφ odosla¥ naprφklad programom Netscape mail a zistφte, ₧e v praxi sa pou₧φvaj· napr. hlaviΦkovΘ polia Content-Length a Content-Disposition. PrvΘ pole udßva ve╛kos¥ tela sprßvy v bajtoch, druhΘ pole obsahuje obvykle nßzov s·boru, napr.: Content-Disposition: inline; filename="dixie.mid".

Type Subtype Reference
text plain [RFC 1521, Borenstein]
  richtext [RFC 1521, Borenstein]
  enriched [RFC 1896]
  tabûseparatedûvalues [Paul Lindner]
  html [RFC 1866]
  sgml [RFC 1874]
multipart mixed [RFC 1521, Borenstein]
  alternative [RFC 1521, Borenstein]
  digest [RFC 1521, Borenstein]
  parallel [RFC 1521, Borenstein]
  voiceûmessage [RFC 1911]
message rfc822 [RFC 1521, Borenstein]
  partial [RFC 1521, Borenstein]
  externalûbody [RFC 1521, Borenstein]
  news [RFC 1036, Henry Spencer]
application octetûstream [RFC 1521, Borenstein]
  postscript [RFC 1521, Borenstein]
  activemessage [Ehud Shapiro]
  rtf [Paul Lindner]
  applefile [MacMime, Patrick Faltstrom]
  macûbinhex40 [MacMime, Patrick Faltstrom]
  newsûmessageûid [RFC 1036, Henry Spencer]
  newsûtransmission [RFC 1036, Henry Spencer]
  wordperfect5.1 [Paul Lindner]
  pdf [Paul Lindner]
  zip [Paul Lindner]
  macwriteii [Paul Lindner]
  msword [Paul Lindner]
image jpeg [RFC 1521, Borenstein]
  gif [RFC 1521, Borenstein]
  tiff [Tag Image File Format, Rose]
audio basic [RFC 1521, Borenstein]
  32kadpcm [RFC 1911]
video mpeg [RFC 1521, Borenstein]
  quicktime [Paul Lindner]

Tab. 2 RegistrovanΘ MIME typy


Tabu╛ka obsahuje len v²ber registrovan²ch MIME (Multipurpose Internet Mail Extensions) typov. Aktußlny listing, prφpadne detailnejÜie informßcie h╛adajte na serveri: http://www.isi.edu/in-notes/iana/assignments/media-types/media-types resp. na FTP ftp://ftp.isi.edu/in-notes/iana/assignments/media-types.


Vysvetlivky

RFC (Request for Comments) - Sada Φlßnkov, v ktor²ch sa dokumentuj· a zverej≥uj· Ütandardy Internetu, nßvrhy Ütandardov a obecne ods·hlasenΘ myÜlienky.

DNS (Domain Name System) - SystΘm domΘnov²ch mien. Distribuovan² hierarchick² informaΦn² systΘm vyu₧φvan² v IP sie¥ach, umo₧≥uj·ci preklad symbolick²ch domΘnov²ch mien (napr.: www.zoznam.sk) na ΦφselnΘ IP adresy (napr.: 195.85.36.45).

(c) 2004 Ing. Peter GaÜparoviΦ - www.pgasparovic.com

Literat·ra

[1]  Feiber, W.: Encyklopedie poΦφtaΦov²ch sφtφ. Praha, Computer Press, 1996.
[2]  B°ehovsk², P.: Praktick² ·vod TCP/IP. ╚eskΘ Bud∞jovice, KOPP, 1994 .
[3]  Mrßzek, L.: Prvnφ kroky INTERNETEM aneb Je to na WWW!. ╚eskΘ Bud∞jovice, KOPP, 1995.
[4]  èmrha, P. û Rudolf, V.: Internetworking pomocφ TCP/IP. ╚eskΘ Bud∞jovice, KOPP, 1995.
[5]  Hejna, L.: Lokßlnφ poΦφtaΦovΘ sφte. Praha, GRADA, 1994.
[6]  Falk, B.: Pr∙vodce sv∞tem Internetu. Praha, Computer Press, 1995.
[7]  Lhotka, L.: SERVER v INTERNETU. ╚eskΘ Bud∞jovice, KOPP, 1997.
[8]  Peterka, J.: Co je Φφm ... v poΦφtaΦov²ch sφtφch. COMPUTERWORLD, 1994, Φ. 4, 7, 9, 17, 21, 35, 44.
[9]  Sterling, B.: Short History of the Internet. The Magazine of Fantasy and Science Fiction, 1993.
[10]  Dostßlek, L. - Kabelovß, A.: MIME û Multipurpose Internet Mail Extension. http://info.pvt.net/mime.htm, 1997.
[11]  Postel, J. B.: Simple Mail Transfer Protokol. RFC # 821, August 1982.
[12]  Crocker, D. H.: Standard For The Format Of Arpa Internet Text Messages. RFC # 822, August 1982.
[13]  Borenstein, N. - Freed, N.: MIME (Multipurpose Internet Mail Extension) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies. RFC # 1521, September 1993.
[14]  Borenstein, N. - Freed, N.: Multipurpose Internet Mail Extension (MIME) Part One: Format of Internet Message Bodies. RFC # 2045, November 1996.
[15]  Rose, M.: Post Office Protocol û Version 3. RFC # 1225, May 1991.
[16]  Rose, M. - Myers, J.: Post Office Protocol û Version 3. RFC # 1725, November 1994.
[17]  Dresslerovß, B. - Veselsk², J. - Gombik, G.: LINUX DokumentaΦnφ projekt. Praha, Computer Press, 1998.
[18]  èovΦφk, J.: Login. PC Revue, 1995, Φ. 4 a₧ 8.
[19]  Pal·ch, P.: Poznßte LINUX?. PC Revue, 1998, Φ. 2.
[20]  Rivest, R.: The MD5 MessageûDigest Algorithm. RFC # 1321, Aprφl 1992.
[21]  Dostßlek, L. a kol.: Velk² pr∙vodce protokoly TCP-IP BezpeΦnost. Praha, Computer Press, 2001.