18 Marzo 2003 Corso di Laurea in Ingegneria Informatica Corso di Laurea in Ingegneria delle Telecomunicazioni Corso di Telematica A 17 Marzo 2004 A . L azza ri 1 Trasferimento di informazione generica, oltre il plain-text (uuencode, MIME) 2 uuencode, MIME 1 18 Marzo 2003 Inserimento di file binari in un messaggio • SMTP parla in modalità NVT – Caratteri leciti: ASCII – Sequenze di controllo interpretate (es. CRLF) • RFC 822/2822 ammette solo ASCII nelle linee di testo (“Body”) • Problema: Trasferire un flusso di ottetti generici • Soluzione: trasformare una stringa generica in una stringa ASCII “printable” (set G0) • stringa ASCII: 8° bit = 0 (128 combinazioni possibili) • Non tutte sono combinazioni lecite 3 uuencode: alterazione flusso di ottetti (byte) FLUSSO ORIGINARIO Byte 1 6 bit byte 1 Byte 2 6 bit byte 2 Byte 3 6 bit byte 3 6 bit byte 4 FLUSSO DERIVATO (ogni byte = 0 - 63) 4 uuencode, MIME 2 18 Marzo 2003 uuencode • Tecnica per inserire file binari nel “ body” di un messaggio e-mail • Byte derivati = <6bit> (valore = 0 ÷ 63) • Ogni byte derivato viene aumentato di 32 per evitare i caratteri di controllo • Si ottengono byte il cui valore è compreso 32 ÷ 95 (0x20 ÷ 0x5F) • Il byte 32 (0x20) è poi convertito in 0x60 per evitare il carattere non stampabile SP • il flusso derivato aumenta di 4/3 (≅ 35%) 5 Caratteri ASCII stampabili 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 SP 0 ! 1 " 2 # 3 $ 4 % 5 & 6 ' 7 ( 8 ) 9 * : + ; , < - = . > / ? 4 5 @ P A Q B R C S D T E U F V G W H X I Y J Z K [ L \ M ] N ^ O _ 6 ` a b c d e f g h i j k l m n o 7 p q r s t u v w x y z { | } ~ 6 uuencode, MIME 3 18 Marzo 2003 Organizzazione di un file “ uuencoded” • Il file originario è suddiviso in linee di 45 byte • Ogni linea produce una linea derivata di 45×3/4 = 60 caratteri • Ogni linea è preceduta da un byte di lunghezza (anch’esso aumentato di 32) • M < .. 60 caratteri ... > (M ha codifica ASCII 45+32=77) • L’ultima linea è più corta (in genere) • Il flusso di byte ottenuto è preceduto e chiuso da informazioni di controllo • Il risultato è un file di tipo plain-text leggibile e modificabile con un text editor 7 Esempio di generazione di file “ uuencoded” • File originario logo.zip, di 9940 byte • 9940 = 3313 ×3 +1 • Flusso derivato: 3313 ×4 = 13252 +4 • Flusso derivato: 13200(220×60) + 52 + 4 • File costituito da: • Preambolo • 220 linee piene (“M”+ 60 caratteri) • 1 linea breve (“H”+ 56 caratteri, non tutti utili) • H =(¾52 + 1) + 32 = 40+32 =72 =0x48 • Postambolo 8 uuencode, MIME 4 18 Marzo 2003 File logo.zip “ uuencoded” _=_ _=_ Part 001 of 001 of file logo.zip _=_ begin 666 logo.zip M4$L#!!0````(`()28BX7AN<U7B8``)HF```*````;&]G;U!2+FIP9Y6615`< MT-:M&[?@%MP::32X$VB\"0Y!`TEP=PLN"6Y-X\'=W=TUN#LT$B"X2^#EWE?U MZ@W^R?\-3M79>]5:9[`&YW7I=0N`!Y%3E`,@("``_LOK*D`:@(J,@HJ"C(J* . . . . . . . . . . . . . . . . . . . . . . . . . . . . M/?HW>5W^/U!+`0(4`!0````(`()28BX7AN<U7B8``)HF```*```````````` H(`"V@0````!L;V=O4%(N:G!G4$L%!@`````!``$`.````(8F```````` ` end 9 MIME (titolo) Multimedia Internet Mail Extension (MIME) 10 uuencode, MIME 5 18 Marzo 2003 Limitazioni di “uuencode” • • • • • Tipico degli ambienti UNIX Orientato a file binari (non testi con caratteri speciali) Possibili problemi con caratteri nazionali Possibili problemi con caratteri non “ mail safe” Trasparente agli User Agent (UA), quindi richiede interventi manuali degli utenti finali • Tutti questi problemi superati da MIME • Un messaggio MIME è un messaggio RFC2822 caratterizzato da appositi Header • Gli UA che riconoscono MIME gestiscono il body del messaggio in modo appropriato (codifica corretta, separazione allegati, attivazione plug-in ecc.) 11 MIME: nuovi “ Header fields” type • "MIME version" – MIME-Version: 1.0 subtype • “Content-Type” – – – – – Content-Type: Content-Type: Content-Type: Content-Type: Content-Type: text/plain; charset=US-ASCII text/plain; charset=ISO-8859-1 image/... application/... Multipart/subtype; boundary=stringa 12 uuencode, MIME 6 18 Marzo 2003 MIME: codifica e trasporto • Header field “ Content-Transfer-Encoding” – Content-Transfer-Encoding: <mechanism> • Valori principali: – – – – – Content-Transfer-Encoding: Content-Transfer-Encoding: Content-Transfer-Encoding: Content-Transfer-Encoding: Content-Transfer-Encoding: 7bit default 8bit binary quoted-printable base64 Identity (no encoding) • No encoding: usare trasporto corrispondente • 7bit: trasporto standard SMTP • 8bit: SMPT esteso • binary: non supportato per ora 13 MIME: trasporto “ 8bit” ( SMTP esteso –rfc1652) 220 dbc.mtview.ca.us SMTP service ready EHLO ymir.edu 250-dbc.mtview.ca.us says hello 250 8BITMIME MAIL From: ned@ymir BODY=8BITMIME 250 <[email protected]>... Sender and 8BITMIME ok RCPT TO:<[email protected]> 250 <[email protected]>... Recipient ok DATA 354 Send 8BITMIME message, ending in CRLF.CRLF. .... (introduzione testo a 8-bit) . . . . 14 uuencode, MIME 7 18 Marzo 2003 MIME: due tipi di codifiche • Entrambi trasformano nel dominio “ 7bit” • quoted-printable: serve per testi più o meno leggibili prevalentemente a 7 bit, con alcuni caratteri speciali • quoted-printable usa un meccanismo di “ escape” • base64: serve per file binari “densi”, (es. immagini, codice eseguibile) • base64 usa una tecnica di espansione simile a uuencode • Al momento non esistono in Internet sistemi di trasporto per la posta che permettano di inserire contenuto “ binary” (stream senza CRLF) 15 MIME: codifica “ quoted-printable” Messaggio originale: CHISSÀ SE PIOVE Date:... To:... From: Alessandro Lazzari Subject: prova Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable CHISS=C0 SE PIOVE Carattere non-ASCII À sostituito dal suo codice esadecimale 16 uuencode, MIME 8 18 Marzo 2003 MIME: codifica base64 – tabella di conversione Valore dei 6 bit Carattere ASCII Valore dei 6 bit Carattere ASCII Valore dei 6 bit Carattere ASCII 0 1 A B 26 27 a b 52 53 0 1 = (pad) 61 62 63 9 + / 24 Y 50 y 25 Z 51 z Caratteri per “National Version” ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ P ` A B C D E F G H I J K L M N O Q R S T U V W X Y Z [ \ ] ^ _ a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ 17 File codificato “ base64” • Il file originario è suddiviso in blocchi di 3 byte (24 bit) • Ogni 6 bit si genera un carattere, secondo la tabella di conversione • A fine file: – Non ci sono residui: no padding – Avanzano 8 bit: si producono 2 caratteri + “ ==” – Avanzano 16 bit: si producono 3 caratteri + “ =” • Caratteri organizzati in linee lunghe max 76 • Non si usano byte di lunghezza 18 uuencode, MIME 9 18 Marzo 2003 Esempio di file codificato “ base64” ----Content-Transfer-Encoding: base64 Content-Disposition: inline; filename=“Prova.txt" VGVzdCENCg0KR2VudGxlIFJlYWRlcjoNCg0KVGhpcyBpcyBub3RoaW5nIG1vcmUgdGhhbiBh IHRlc3QgZmlsZSBjcmVhdGVkIHRvIHByb3ZpZGUgZm9kZGVyIGZvciB0aGUgdmFyaW91cyBl bmNvZGluZyBzY2hlbWVzLiBJZiB5b3UgYXJlIHVzaW5nIGl0IHRvIHRlc3QsIGNvbmdyYXR1 bGF0aW9ucyBvbiB5b3VyIGFnaWxpdHkgaW4gY3V0dGluZywgcGFzdGluZywgc2F2aW5nLCBh bmQgZGVjb2RpbmcgdXNpbmcgV2luWmlwLg0KDQpFbmpveSE= 16bit ----- 19 MIME – Documenti fondamentali • RFC-2045. Specifica un numero di nuovi campi nell’Header del messaggio (DRAFT STANDARD); • RFC-2046. Definisce 7 nuovi tipi fondamentali di informazione (DRAFT STANDARD); • RFC-2047. Specifica come usare caratteri nonASCII nell’Header del messaggio (DRAFT STANDARD); • RFC-2048. Procedure da usare per registrare nuovi tipi di informazione (BEST CURRENT PRACTICE - BCP); • RFC-2049. Criteri di conformità ed esempi (DRAFT STANDARD). 20 uuencode, MIME 10 18 Marzo 2003 MIME – Media types (RFC2046) • • • • Text (testo scritto) Image (richiede display per essere visto) Audio (richiede un dispositivo audio) Video (richiede visualizzazione immagini in movimento) • Application (altro tipo di dati) • Composito – Multipart (più tipi dei precedenti, in serie) – Message (messaggio incapsulato) 21 MIME: messaggio multiparte (1/2) Messaggio originale: il file arriverà (+allegato) Subject: prova Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=====================_896341200==_" Content-Length: 3344 --=====================_896341200==_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable il file arriver=E0 --=====================_896341200==_ 22 uuencode, MIME 11 18 Marzo 2003 MIME: messaggio multiparte (2/2) --=====================_896341200==_ Content-Type: application/octet-stream; name="Control.exe" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Control.exe" TVoQAAUAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAA AAAAAAAA . . . . . . . . . . AB0ACQBQcm9kdWN0VmVyc2lvbgAANC4wMC45NTAAAAAAJAAAAFZh ckZpbGVJ c2xhdGlvbgAQBOQE --=====================_896341200==_ 23 MIME –Header Extensions (RFC2047) From: =?US-ASCII?Q?Keith_Moore?= [email protected] SPACE INIZIO charset Quoted-printable like FINE To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <[email protected]> Keld Jørn Simonsen Subject: =?ISO-88591?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?= base64 24 uuencode, MIME 12