_______ __ __________ \ \ _____/ |\______ \__ __ ____ ____ ___________ ______ / | \_/ __ \ __\ _/ | \/ \ / \_/ __ \_ __ / ___/ / | \ ___/| | | | \ | / | \ | \ ___/| | \|___ \ \____|__ /\___ >__| |____|_ /____/|___| /___| /\___ >__| /____ > \/ \/ \/ \/ \/ \/ \/(r) 4 0 4 -------------------------------------------------------------------------- FrOm Spp to tHe NeT NumEro DiEcI SpeCiAl ChrIsTmaS DeDiCaTed To GiOrGiA -------------------------------------------------------------------------- Sommario: --------- Editoriale ---------- By Brigante Metodo per la creazione dei generatori di password a permutazione con contatore ----------------------- By Master Linux VS Windows ----------------------- By Azathoth L'arte della crittografia --------------------- By ADaM "Unno" Il sistema GSM -------------------- By Nick1 Le card, ma come sono fatte? --------------------- By RigoR MorteM Idee per una backdoor --------------------- By Devil -=HTML SECTION=- Come rendere un processo invisibile ------------------------ By NikDH e GuestNet Reversing Netbus 2.0b Pro ------------------------- By Quequero =========================================================================================== Editoriale ---------- by Brigante ---------- Ciao ragazzi, eccoci finalmente pronti a sfogliare questo mitico numero 10 di Netrunners. Innanzitutto lasciatemi dire che sono molto contento dal momento che il traguardo di 10 uscite di una e-zine non è da tutti....spero che i nostri lettori aumentino sempre in modo esponenziale, e ne approfitto per sa- lutare e ringraziare tutti i collaboratori interni ed esterni, che si adoperano per farci giungere sempre nuovi ed interessantissimi articoli. Cmq....come qualcuno mi faceva notare qualche sera fa in chat....sarebbe meglio mettere un disclaimer detto fatto :-))) DISCLAIMER I redattori e collaboratori di Netrunners non si assumono alcuna responsabilità per le azioni od omissioni che avverranno in seguito alla lettura degli articoli presenti nella rivista Netrunners. Tutti gli argomenti di cui si parla negli articoli sono facilmente reperibili in rete, e non hanno alcun fine di spingere il lettore ad infrangere le leggi. Ricordo inoltre che, a norma dell'art. 21 della Cost. Italiana, "tutti hanno diritto di manifestare liberamente il proprio pensiero con la parola, lo scritto ed ogni altro mezzo di diffusione. La sta- mpa non può essere soggetta a limitazioni o censure". Direi che come disclaimer possa andare no?? :-))) Ok...salto la tradizionale presentazione degli articoli, dal momento che sono tanti e così interessanti che ci vorrebbe un numero di Netrunners solo per l'indice. Segnalo invece che questo numero si discosta da tutti gli altri, dal momento che sono presenti articoli nel tradizionale formato txt ed in HTML . Ciò è dovuto al fatto che i nostri collaboratori spesso scrivono direttamente in HTML....e quindi la conversione risulta complessa. Anzi, se qualcuno mi sa dire come cacchio si converte da PDF a TXT, gliene sarei grato :-))) L'altra sera ho ricevuto da Vecna (che saluto affettuosamente) una critica per come è formattata la ns e-zine. Notoriamente io sono molto aperto alle critiche, solo però quando sanno essere costruttive. Mi aspetto quindi una mano da Vecna per studiare la formattazione dei prox numeri (ti ho fregato eh?? :-)). Passiamo alle notizie da SpiPPoLaNdIa: innanzitutto il caro Tira ha finito la conversione di tutti i numeri di Netrunners in PDF...collegatevi al ns sito per scaricarli. Inoltre, con nostro sommo piacere, sia RigoR che Nick1 sono ritornati a farsi vivi un pò più spesso. Grazie ragazzi....sentivamo la nostra mancanza :-)))) (chissà quando si deciderà a ritornare Chrome hihihihihi). Annuncio anche, dopo diverse peripezie, la riapertura ufficiale del famoso FTP degli SPP, dove è contenuto ogni ben di Dio, compresa una rarissima immagine ISO del SignalOS....il tool indispensabile per l'hacker di successo (detto così sembra un profumo....cmq...il concetto è quello :-))). Ed infine, con nostra somma gioia, annunciamo che la famiglia SPP si è accresciuta, con ben tre nuove entrate. Innanzitutto 2 Spippolatori grandi e grossi, che tutti già conoscerete, ovvero ErGoline e Nob0dy88, ai quali facciamo i migliori auguri e speriamo che si trovino bene con noi. E poi, evento lietissimo, una piccola SpiPPolAtRiCe.....la piccola Giorgia che è venuta ad allietare la casa del nostro caro fratellino Misha. Da tutti noi tantissimi auguri e.......aspettiamo i confetti :-)))) Sto scadendo nel logorroico, quindi, prima di farmi odiare, vi saluto e vi auguro un buonissimo natale ed un felicissimo Millenium Bug ehehehehehehehe. Ciauz :-))))))) -SPP MeMbeR- Brigante -SPP MeMbeR- =========================================================================================== -= Master *** =- SPP MEMBER Master@spippolatori.com www.spippolatori.com METODO GENERALE PER LA CREAZIONE DEI GENERATORI DI PASSWORDS A PERMUTAZIONE CON CONTATORE. Ovvero: la' dove sbaglia Umberto Eco. Uno degli strumenti piu' utili in assoluto per la decifrazione dei messaggi cifrati, per il cracking o il bruteforce di sitemi protetti da password e' il generatore di dizionario. I generatori di dizionario sono programmi che sulla base di alcune premesse iniziali creano ex novo una lista di vocaboli composti da un insieme limitato di sequenze atomiche di caratteri permutandole tra di loro secondo le varie occorrenze singolari. Ad esempio considerando la lista sp o s t ae il dizionario creato sarebbe composto dalle parole "sosta","posta","soste", "poste". L'utilita' di questi generatori e' varia a seconda delle esigenze. Questi infatti possono essere usati per crare tutte le permutazioni di una parola con o senza ripetizioni, per trovare liste di password, per trovare gli anagrammi completi di una parola oppure [ nel caso piu' pratico di tutti ] per trovare tutte le possibili parole simili ad una vocabolo conosciuto del quale pero' non si sia certi della giusta sintassi. Nell'ultimo caso se si volesse costruire un dizionario per il bruteforce di un oggetto protetto del quale si sapesse che la password e' formata da una parola tipo : "sosta" o "posta" .. plurale o singolare con 'aggiunta in fondo di un numero di 2 cifre seguito da una vocale.. si procederebbe impostando le premesse : sp o s t ae 0123456789 0123456789 aioue il generatore creerebbe una lista contenente le parole : sosta00a, sosta00i, sosta00o, sosta00u, sosta00e, sosta01a ,sosta01i sosta01o, sosta01u, sosta01e, sosta02a, sosta02i, sosta02o ,sosta02u sosta02e ... ... poste99a, poste99i, poste99o, poste99u, poste99e La difficolta' nella costruzione di questi generatori risiede in misura notevole nella visione 'lineare' del problema quando invece occorrerebbe affrontarlo in maniera piu' meccanica e/o logica a seconda dei casi. Il tipico errore che viene perpetrato costantemente e' stato rappresentato benissimo da Uberto Eco nel suo libro "Il pendolo di Focault". Umberto Eco si pone il problema di trovare tutte le possibili permutazioni del nome del Signore in ebraico: Iahveh .. o forse IHVH dato che in ebraico non si scrivono le vocali. Allo scopo butta giu' un programino veramente 'esemplare' di cio' che un buon programmatore non dovrebbe mai fare .. riporta su carta il suo pensiero cercando di adattare un sistema automatico alle proprie esigenze di comprensione la dove sarebbe meglio in 99 casi su 100 fare esattamente l'opposto. Inizia col programma (in basic) per trovare le permutazioni di 4 caratteri 10 REM anagrammi 20 INPUT L$(1),L$(2),L$(3),L$(4) 30 PRINT 40 FOR I1=1 to 4 50 FOR I2=1 to 4 60 IF I2=I1 THEN 130 70 FOR I3=1 TO 4 80 IF I3=I1 THEN 120 90 IF I3=I2 THEN 120 100 LET I4=10-(I1+I2+I3) 110 LPRINT L$(I1),L$(I2),L$(I3),L$(I4) 120 NEXT I3 130 NEXT I2 140 NEXT I1 150 END Glissando sulle qualita' tecniche del grande scrittore per mia sincera e profonda devozione alla sua conoscenza in 'altre' discipline :)) .. si vedono subito gli errori di concetto nella formulazione di un programma che possa fornire un metodo generale per risolvere il problema: Errore 1: bisogna sapere in precedenza il numero di caratteri della parola da permutare Errore 2: per ogni parola di N caratteri sono necessari almeno N-1 cicli diversi e (n-2)! controlli logici da riscrivere direttamente nel listato ogni qual volta si presenti una parola piu' lunga del previsto. Errore 3: e' necessario scrivere almeno N programmi diversi per N parole di lunghezza diversa. Ma allora esiste un sistema per generalizare la cosa? Ebbene si. Il modello piu' frequentemente usato (almeno da me) e' quello semplice del modulo contatore digitale. Chiunque si sia avvicinato per la prima volta all'elttronica digitale sa come sia facile autocostruirsi con pochissimo sforzo di progettazione un orologio recante la visura di ore, minuti e secondi. Esistono infatti display dotati di counter interno che alla ricezione di un impulso elettrico fanno aumentare la cifra da loro visualizzata di 1. Superando il massimo impostato (9 o 2 o 5 a seconda dei casi) ritornano alla cifra iniziale emettendo a loro volta un impulso di conferma. Mettiamo di volere costruire ipoteticamente questo orologio.. prenderemmo 6 display con contatore interno. Un display a massimo valore "9" e uno a massimo valore "5" per i secondi, altri due display a max "9" max "5" per i minuti e due display uno a max "2" e l'altro a max "3" per le ore. max 2 max 3 max 5 max 9 max 5 max 9 +-------+ +-------+ +-------+ +-------+ +-------+ +-------+ | ----| | ----| | ----| | ----| | ----| | ----| | / /| | / /| | / /| | / /| | / /| | / /| | --- | | --- | | --- | | --- | | --- | | --- | |/ / |_|/ / |___|/ / |_|/ / |___|/ / |_|/ / |__< impulso 1Hz |---- | |---- | |---- | |---- | |---- | |---- | +-------+ +-------+ +-------+ +-------+ +-------+ +-------+ 1 2 3 4 5 6 Mettiamo che tutti i contatori siano a zero. Immettendo un impulso nel contatore sei lo stesso scalerebbe a "1", cn un altro impulso scalerebbe a "2" e cosi' via fino a "9" .. alla ricezione del decimo impulso il contatore si riporterebbe sullo "0" emettendo un impulso per il contatore 5 che scalerebbe a sua volta a "1". Mettiamo ora di avere i diplay nella posizione 18: 59: 59 Un impulso al contatore 6 farebbe andare quest'ultimo su "0" emettendo un imulso per il contatore 5 che essendo a massimo 5 andrebbe pure lui a zero emettendo un impulso per il contatore 4 che da 9 (max 9) andrebbe a zero emettendo a sua volta un impulso per il contatore 3 (max 5) che essendo a 5 andrebbe a zero emettendo (ed e' l'ultimo!) l'impulso per il contatore 2 che da 8 andrebbe a 9.. quindi un impulso dopo la situazione 18:59:59 .. si leggerebbe su i display 19:00:00. Dove sono le affinita' col generatore di password ? ..sempice. Il motore meccanico che muove i due sistemi dovra' essere esattamente lo stesso. Facciamo il dovuto parallelo con la solita password conosciuta solo in parte. Supponiamo ad esempio che la password da trovare sia una vocale seguita da un numero, il tutto seguito dalla parola pippo seguito da tre vocali. quindi una cosa tipo VNpippoVVV con V==una vocale a caso, N== un numero a caso. la premessa da impostare risulterebbe aeiou 0123456789 p i p p o aeiou aeiou aeiou un totale di 6250 permutazioni libere ( 5*10*1*1*1*1*1*5*5*5 ) e (5+10+1+1+1+1+1+5+5+5) 35 caratteri diversi che richiederebbero col sistema di Eco almeno 34 cicli FOR e una marea smisurata di condizioni logiche. Usando invece semplicemente il sistema del contatore si considerano DISPLAY i caratteri della prima colonna a 0 p i p p o a a a il massimo valore di ogni display sara' il numero di caratteri presenti sulla riga. il primo display "a" avra' massimo 5 (-aeiou- sono 5 caratteri diversi), il secondo display 0 avra' massimo 10 (-0123456789- sono 10 caratteri diversi) e cosi' via.. si da impulso al diplay finale .. ovvero si prende in considerazione il carattere successivo a quello considerato. Quando dovremo considerare il caratter succesivo al quinto torneremo a considerare il primo ed aumentero di uno quello del display appena sopra. Si presenta il problema di conoscere il 'totale' degli impulsi da fornire al sistema per sonsiderare tutte le permutazioni .. ma questo e' semplice e lo abbiamo gia trovato: sono appunto (per il caso considerato) 6250 impulsi. Un esempio piu' semplice da considerare senza calcoli troppo complessi e' quello di sp o s t ae i display sono : max ..2 ..1 ..1 ..1 ..2 +---+ +---+ +---+ +---+ +---+ | s |_| o |_| s |_| t |_| a | +---+ +---+ +---+ +---+ +---+ 1 2 3 4 5 al primo impulso fornito al diaply 5 avremmo s o s t e al secondo impulso il display 5 ha raggiunto il massimo quindi torna ad "a" fornendo un impulso al display 4 che pero' essendo max 1 resta dov'e' e fornisce l'impulso al display 3 che per gli stessi motivi lo replica al display 4 che lo replica al dispaly 5 che passa da "s" a "p" mostrando cosi' p o s t a un ulteriore ed ultimo impulso fornito al display 6 mostrera' la situazione finale p o s t e avremo cosi' ottenuto tutte le possibili permutazioni della passord impostata usando praticamente un solo ciclo e nessuna condizione logica preimpostata. Un programma tipo in C++ per verificare il sistema potrebbe essere il seguente: --------------------------------------------- dic.c #include main(int nf,char **file) { FILE *f; long t=1,g,x,y,n,k=0; char s[0xff],p[0x20][0xff]; long u[0xff],r[0xff]; if((f=fopen(file[1],"rb"))==NULL)exit(0); #define c(a,b)\ for(a=0;au[g]){ r[g]=1; r[--g]++;} putchar(10);} fclose(f); } --------------------------------------------- DIC per quanto possa sembrare piccolo e semplice e' un completo ed organizzato generatore di dizionari su premesse. DIC accetta in input il nome di un file contenente la lsita dei caratteri da provare. Ad esempio la lista.txt potrebbe essere la solita --------------------------------------------- lista.txt ps o s t ae --------------------------------------------- con DIC lista.txt > dizio.txt otterremo un secondo file dizio.txt contenente : --------------------------------------------- sosta soste posta poste --------------------------------------------- la cosa potrebbe essere usata per gli scopi piu' vari.. ad esempio per generare una lista di IP da provare. Per generare tutti gli IP della classe C 194.185.55 dovremmo impostare un file lista.txt cosi': --------------------------------------------- lista.txt 1 9 4 . 1 8 4 . 5 5 . 012 012345 0123456789 --------------------------------------------- con DIC lista.txt > dizio.txt otterremo un secondo file dizio.txt contenente gli IP cercati --------------------------------------------- 194.184.55.000 194.184.55.001 194.184.55.002 194.184.55.003 194.184.55.004 194.184.55.005 194.184.55.006 194.184.55.007 194.184.55.008 ... 194.184.55.254 194.184.55.255 194.184.55.256 194.184.55.257 194.184.55.258 194.184.55.259 --------------------------------------------- la procedura che simula il sistema del contatore digitale e' tutta qui c(y,k)putchar(p[y][r[y]-1]); r[g]++; while(r[g]>u[g]){ r[g]=1; r[--g]++;} p[] rappresenta i caratteri del contatore. r[] lo stato numerico del contatore stesso g e' il contatore considerato. per questo: c(y,k)putchar(p[y][r[y]-1]); visualizza tutti i caratteri p[] in posizione r[] per k contatori r[g]++ incrementa il contatore finale di uno. while(r[g]>u[g]){ nel caso lo stato numerico del contatore superi il suo massimo r[g]=1 quest'ultimo viene rimesso allo stato iniziale r[--g]++ e viene incrementato lo stato del contatore successivo. Il while permette di ripetere la stessa verifica fatta in precedenza sul nuovo contatore senza nulla aggiungere in termini di nuovi cicli o di condizioni logiche. La bellezza e la funzionalita' di questo sistema risiede principalmente nel fatto che indipendentemente dalla lunghezza e dalle condizioni impostate i cicli necessari alla formulazione delle permutazioni sono sempre gli stessi -uno solo- .. e allo stesso modo il quantitativo di condizioni logiche di valutazione. Nel caso si volesse invece provvedere ad un generatore di permutazioni senza ripetizioni si avrebbe cmq la possibilita' di intervenire esternemanete al ciclo while di controllo (quindi direttamente sulla fornitura dell'impulso) ottenendo ottimi risultati con l'aggiunta di un paio di righe di programma. Questo e' un esempio dello stesso programma per ottenere un serie non ripetuta di permutazioni di una parola di una lunghezza qualsiasi (sempre con lo schema del generatore di dizionari a premesse) --------------------------------------------- per.c #include main(int nf,char **file) { FILE *f; long h,t=1,g,x,y,n,m,k=0; char s[0xff],p[0x20][0xff]; long u[0xff],r[0xff]; if((f=fopen(file[1],"rb"))==NULL)exit(0); #define c(a,b)\ for(a=0;au[g]){ r[g]=1; r[--g]++;}} fclose(f); } --------------------------------------------- Il programma e' esattamente lo stesso di DIC.C con l'aggiunta del controllo sulla valutazione di contatori ad identico stato. h=0;c(n,k)c(m,k)if(r[n]==r[m]&&n!=m)h=1; if(h==0){c(y,k)putchar(p[y][r[y]-1]);putchar(10);} viene semplicemente messa una variabile di controllo a zero h=0; quindi: c(n,k)c(m,k)if(r[n]==r[m]&&n!=m)h=1 nel caso lo stato dei contatori considerati sia uguale (ed ovviamente i due contatori siano diversi) la variabile di controllo viene messa ad 1. if(h==0){c(y,k)putchar(p[y][r[y]-1]);putchar(10);} .. solo nel caso in cui non si stiano considerando contatori a stato simile si stampa il risultato del dispaly. Esempio: .. si vuole ottenere tutte le permutazioni senza ripetizioni di dizionario della parola IHAVEH si crea il file lista.txt --------------------------------------------- lista.txt IHAVEH IHAVEH IHAVEH IHAVEH IHAVEH IHAVEH ---------------------------------------------- nel caso di DIC.C avremmo ottenuto con DIC lista.txt > dizio.txt di 6^6 == 46656 permutazioni libere diverse con PRE lista.txt > dizio.txt si otterranno invece le (N-1)! == 6! == 720 permutazioni senza ripetizione. Ancora una volta senza usare cicli in piu' del solito while ed implementando un solo doppio ciclo generale per la valutazione delle condizioni logiche di filtraggio .. con buona pace di Umberto Eco e del suo Abulafia. ;-) La simulazione di modelli meccanici e di sistemi analogici e' una delle principali risorse della programmazione ma come i problemi della ricerca operativa spesso e' semplice da implementarsi quanto difficile da 'vedersi'. Nel caso si riesca a penetrare con lo sguardo al di la' del normale incedere lineare (unico strumento razionale a noi familiare) i risultati in termini di velocita' e semplicita' non tarderanno a venire. ;-) Come ultima cosa riporto un esempio di applicazione leggermente piu' complesso concettualmente sebbene sempre di semplice stesura: personalmente ho rilevato spesso l'esigenza di avere un generatore di dizionario che non assembli soltanto caratteri singolari ma bensi' liste di sequenze di caratteri tanto da poter definere delle premesse di questo tipo: post a o ergato i ino ato avo oppure ro ra ri re ru ma mo me mi mu no na per avere dizionari in uscita come ---------- posta posto postergato posti postino postato postavo ---------- nel primo caso e ---------- romano romana romono romona romeno romena romino ... ... ... rumeno rumena rumino rumina rumuno rumuna ----------- nel secondo. Il programma che segue accetta in input un file di testo contenente le premesse che dovranno pero' essere dichiarate nel seguente modo: -> ogni premessa deve iniziare col simbolo "\:" e terminare con "\." quindi sara' possibile dichiarare i due esempi precedenti con file input.txt tipo questi: -------------------------------input1.txt \: post \. \: a o ergato i ino ato avo \. ------------------------------ oppure ------------------------------ input2.txt \: ro ra ri re ru \. \: ma mo me mi mu \. \: no na \. ------------------------------ la sintassi per l'uso e' analoga ai programmi precedenti: DIC4 input.txt > dizio.txt il programma: --------------------------------------------- DIC4.c #include main(int nf,char **file) { FILE *f; long t=1,g,x,y,n,k=0,w=0; char s[0xff],p[0x20][0x20][0x20]; long u[0x20],r[0x20]; if((f=fopen(file[1],"rb"))==NULL)exit(0); #define c(a,b)\ for(a=0;au[g]){ r[g]=1; r[--g]++;} putchar(10);} fclose(f); } --------------------------------------------- - . - -= Master *** =- SPP MEMBER Master@spippolatori.com www.spippolatori.com I vari programmi in C per chi li volesse gia compilati sono acclusi di seguito in formato UUCODE. begin 644 prog.zip M4$L#!!0``@`(`+9262GU\5$6V M8-W/[MS.1P,A?$EL0((8C4C&*"3$".$"*K$%[=`@X>$*HB*XG7L3YFWH=*8= M0Z<(@^(`[NJJHV]49/CA>_$9<`>:!!+-"":H$%"!(2BWN4%BD'1(.EWOU+V= M#YSWYNU_^]O?;G7Z=M6I4^><.E5U/NIFX=+5:#1BD`,E(D(^9WW(++GP95"O M\QD/^CN%0?^__-]=]I>R&8&4:K9FVM$).(-%./5VM.7TVR^CS>)6%$C=C`(9 M[R&M@CF<6X5P(V[=1\HCG7O:5LY)NU=0NWQ'?>%3@<0JM(]!7[;YZZW^MNY` MZA:T^73Z)9R;P5<0Q!9;#B(V0!N-#PB>6[E,7[H0(K% M#U"D)AY$]NPKI1;S!;G[?`T+Z%Y&KN_RYH[GDDGF^W)<1Y\DKM?ARMZ%4SSVU MS))/6'1T@N>VFJ=PZF@.:HZ:^9\P%#0J[^WWT'P@O0`:$L5$`"[F0LN8&G1T M;"!E.PHD[D124(FOS4-;@I\\C](:+$SF98/W@78>V&O-B&1M@N^+\'T!:3,8 MI[:;-Q!Z#90_H15%]:Y"`Y@9Q!W[[D1I+._["LGGPW<\GJ#$[1N#]M^) MM&\I'FZO>:A*9H].V)>(]L]'H:]1:BVZ^^B$0*H"*U.":GFCL0$:_XAJ!:-1 M!@TOJA6-A@\:OT&U:/+FIBVG][_)')UPSAWZ'54_:(6=:[Y$W)I(P%!7+/7A&B+)@(Z M(,"Y@6!O4#UWBY5BS_B%WM@7EL M8)1?UAB_ZQ+2;S6(8+G=+[<#Y$=TZ)R`7=JA\Q+7#%U>KGF1MGT"<`CGLPZD M4XNT-3>Y_?+/@-N%L-R%73]G MRY?*=E`$S;-U"+];<5''(*6'67PS=D6Q'-&"7,`5#<:#HP0F%+@#V)9B_OXZ,)"0@]P1P/( M4%D,L`5F?BI['EN^1^6S1Y6^1T2-V6C'J9T,$3N9O=(F2PW2;6LTYAE)FVH* M=:->HQNY4")1K=FN"!@.GKBTQ"X>[$\<+A(#29E!G7=J9U&L[#H, M7;0/#HK5UJ6FZHDD\1@RR9,=W3QEBE1=*^LE*<<938AHO^WU>T6DC@!L*TGY MBB$I)QA2PFN_[W47+:\3$1#+##J=%/1'8O`%B9T`HI!7``+5&$3[+:FG5:/^ M:Q*3@[=UE8WT1Y=XN0.%*)`UGZMZX0%N)^[0$\)G_-%)Y:%&<3X'.R'K%51+ M"/!D46R@2_M?!#?T0VI1/BX"5;P\V6?.W]\^T54H8J^4:L%%5G_O+:5+?+VL M9S&6XW%!HNVSC<-\,#/%UB#<,2]\*MSJ/X6J2\ZT);V4?CQ\]:7PU4W)`:C9CL..>(?365SG=&G/Q+O=3FTKJ7V/@]:]X]UN M0QW&HOC;P8.`.<1>W@7"^&<1&,DBG8,58`0,3/XGP1W5K[_&M)F?U]Z#NT/^`Y9[TXS!91G'JOS]@17K\`0GIE@-V MI+.97>%&L.5Q?K)$X2F!:KG;62WW@!OHFDS*G2XZ*V/[:!LX_^%$O[<;>4=3 M8FH2`0/[8<&]A5:S0R=LO MQC:`!>0?+@4WQ&TS]L8VKT`*NLI/B@,3LL",C&$WXS/`Y4?* MY2_'OW_AF1/;MRE6&&!7K'J2\1MG##^\2S]THQ[D[)*NC6:G"%.B"BF/&,!X M$P@0@,,8,+GF,+\W`MXQ@L#.14(0K0XY>=X10_2N?._V'^+(7Y5NMWXP_?@^ M'L$ZE,U=],C@"/=2&'-W]+.RNZHTW^5IGMM\?9)GE._R,(_#UR=Z)-]EAR<% M:L7#?$>DEO/FA_U:_]?TH.\Z1)`F`W=H!3',57VWC7[.6T/6*]9#4F9<9MRL M.$;BXI+BXN(RXE9)1)H0=V_/B%OOT:9Z)OMZXDN&^WMM*!9]NT3F? M/H5";#-/%5OR\[L_ADVY[+IIOT17(345_3:,0:9:8H9IS#T%=M=^4L[*!+(9_W&J8/!0K>:J[A=0 M=LIHKC@=GVYI:P2'@Q`^#>E?6T/EMPS!=5^>$UH9?/K+MD#E#\QLBNKY^LUO MF9U.[:QFX5%H- M>",8_DI$ZER'@W,=%B-8_J.VF^BAT-=3E?'RKM]A=$ M&;V95B]#E=6/T.IYG_=:NL)M>AS?"3H[]+>A6$YRH*/`)CU M(T;?%LKD(&C)PH)?YEE?'UL\W!;\M0@[".@%Y.Z/N-!ZXNOCU9,!N2MZ)/0$ M;10W?<03N2OT&'GY]FD[85#IF(_82KD;#EQ+RSG7R3J\>44K=_+#6`90"H"7AUWKQ`B0B3LB-%R,(CH>GEJ[V?P$HE0/P6Y_=V M(=426A,%9OPB9V%5XTYG%3C2Q=J":RD6[.JR'8>LH!.%^B@G(%7MW0\!5A:Y M9\Z<0!$/A!U(L6?A448SQ:*]WK=WYJX4RU+ME;ZL!@&!,`AD[ZTNV)]^O?(+ M()C=4L[BEM`;X%C$`3&I=JD+^V3ZA:R`L(]!H;K!?H.)FI"%9U&T5(N-Z+8L M&K/Q_.:@K5$54BT'I_':8WW9!5TE'"[H"OUV<#`T(;KF]HFH\)'JHD\6+X*C M,DFF.6[T?<0H<>#U@9"D0^3'6VM%R.`[>4,2X&I%RFCLZK8=]P[3PI$TWZP[ M5&9!>HL7,LI.VE)L5?(UV,G)#Z=M$OS>3N258NQ(0:=V)(+#=+<7=4-D"BQG M"9"Y5*WN]476JPD4NQS.2B=8@7&^R`9%\$66J,-@%?(>?-"_KI/=*!B))E?0 M:>[(>%WS3Y5W`2@/DH6]T[3G(E5RK_94!+LZ0/JIM-W]9X_3ID7.=]B^\<;A MOP"/L8`26AH)&.&ZJ7O;@.YU2TSSM4YTF]S.R3^F!01S>UGFS4MK%"!(&@R=JP73KK:[?.V.S=RVF>]%K_W$FQ$,+4ZA^4?S0C?BFZU#[S1$5N-S[WV7#O-1@I!.@CR MM*G#W+@CCR8XA=H2"?)WW,A!ZF`80$A2\5<5EQ";75=L>?LUR%3UN$;Q%62E MV=L`ADODQ->HR<>?PI&P5QQ"K$?*_KQ8K`3P+P=0"_L.O<_M?Y_<)*'8]M&\*VO\'OB;OZ(30UYR61[7 MZ2*US__MI^7U,*V?\>.B7^<]B=FIGT.$JLV&/$GCZ'W:C-0F7IF$2]DNGE'$ M0-;GO.[(S@)8`CZC/8KP//9M`$$C,_AV$P_UMX_QB[6NZ+)ZDI1-QXZ&L9A_ M#P)WSA+@\7U<;T!E\1F@/QW1%A;>8Q2FGK'@,-<1>)S%9W&YF'U620SD'N-Q M*1]0^4"96-\H'N,1JL=9QR!?5NRX3`P\+@:6\X%R,5#*UP=2C_&!%?`GFM/) M%\&Z+1($Y,F:'"6SK*B8HZ0$>-`-Z\S?PN*$>MR]V/N+41I)EN!6F M>7.J)8*[<4D4QT._RQ\26D)7_RD@1[5;HLMP413V9SVN\]=9LUM*[\8M=(G5 MI("%6+AZ$.1!$$1/Q;U<=V`YF]X\=12L0V>@C)T=&(G_@L]J]T3Q*9`)U&HD MOU9(\X'G/:"_.V#'X*0%N-E?)_C/1_T]UF)NOQ5E-WGB2P48HENU2CASVL,$ MU^L)3FU55!<7:UO[,H/+EH,>2=H%GJ3]`%\-OI=@=7\G?L7_3CP!WU8^8W/J M(Z,"6:?Y0.ZW?&2+N!4=\*'I%])VYVT^4GEB&\ZJ0K(,1MN\L!ZV1=R,X^CQ8>QQ)[_8\CB^*-Z=8'EEP]9WIP5U;OJOLK#R%ZW'S M'&T,*K5X\K3AJ/0Z6"]K3@)8L#A5FQ[4+\`T+;-W@2UAYKQX;GKP>MO(W0MN MGZ@D\1-S'EW[`WPC=&0&`S(RT#',#\/\2%8K?$_P;S7S;[^`WCK.OPT) M1MI7/-5X@;5F#CW`1E3%O40/;<-ETQ2X>"/JBS-7]:3!2'$1G%[38-3D M&K="GOC^+C,P^\WEV`4%#Q8E6P0R(B6C+QNXW^@/&!_JOUCRY';5^=2[:YG9 MF9_A%FAG+'+6LK%&0(X$7-&E;L^86C0;^H9GNZ*>N%(A6XYX6/UCDVG"91K8 M]EO2`X3,V)BHKO!O%)%RDW\6VAA7J+D0C4,?#,]EZ=L-HEJU%;UNWT8>E=FJ MYO(0J`H$;&_C7'IG.5>$!UC_AKD\\6^,1TJR$8^J\5K]9:?V7Z^Y&^?&0]#< M;YD-IC:B"MHZI*\&UJ93*`+.95.!H16I$FX$FS%CKJ3*E/!`ZUX\UQJ8*^G3 M]`P\5^2$/-PQ]6ZG"72:(&XB1_T-=MSX,$S^(L0)9@HP>(UE-8>>D:N2J@[E M>%3K?@8=A,5Q^*Z7JL)^EM.MONLKU83];!Q@^M!!B-II"/YT5;SLNYZN)/G` M+]_LNZZ`T[_^A#H28"I;%>\_'_$W\70$8F MHZ"M&=>]CWP*Y_\BKU'\BIDRA5ZXCJ)^18X&++C1]*NQJS?>A4LD<(_T>JU: MCCBU7Y%`/@L'RN$KX]'&*:0D`L-L,D^O3;05'*AN4SXO!3*R0@],"ZM#?ZW'I=8[ZQ\C%?[P)] M4\9E(]X:S4$*961.)T#AV76E%XT.JBL6\*G*M2\(;H9UH+"$1>!\82+TQO86 MTQM7R];^J\VW)CMK]XQW:LGM_L-2_QXKX?TY:*.$'Q6YY-FX1[=A_M7,NO0Z M2""Z0?0\I-Z.'Y(HSG@];@$^Y;M/4IEYN.X!8-FAV_&I^V^`4,WVW_E2XM@K MN;1I?89*Z/:=YZ=75$#.:W-I9>35J;(XQF6M>))=$6T$FXKSK8%\J="\G3+U MN?$2Z,K?0U0)')!J$&&'[%.Z=KR).;K3'7N1`=@"=5?CJ=P)+FT$>961(\-< M41VXBI1K9(PK:K[^,+:NJ_!@,J+;?`3.9RBU^I]DS\*2I(((:B*E6AY-<"#85[J5SM3_ M$&O_Q04YX5T:C]Q%RP>OVE41<$([$%58`HG'CTLD7ZJRA/P44O8H"&)GU(7P M`[Y=ABWG0_XR,$_Q+FTQ`94?U8/Z9_W2CB4T!ZZ5A9BLDZFL,+%)9O.-'O?PXWO^QC50F>H/7;1[XT2=9(_=S['*A+) MFL]I]U\,74;A1A]2Z#FAM^HP7(\'`KQR#T3J3OW;<$,'4L8`=7IZ(`J`;!02 MNX]0H;;ZNEL?;IRLJ)9E=JP-O89<5)+7D=M-(65+C8O1&=>H8)'W@5%JQ3'D M``8^)74R0:!*X\5*H99R#?2N2]##*GRA%HU"R=;6D+[!C+Q2QW'_MTJDGA7E6SX/%#)H`\3`?B'^8)_%MDX MDPAXN43F2ILLI@/C0M<@))HO2(I$?Q(4+G0!](VN4Z_*A5II3A$ZB4)?(,#? M"FDX_,`D3&_55K&0A;2?NN.YX!05<,>-W71@$SB]<&L@QNO-^<(@NQ=C["P& M.W5#H?8*':*LUW^O/TL]8\LYW&J$$U9E1"UK7AF9'O/:]V"'C-'JS4`.#.-H MXSR=X6,(F^AY@B,4@\\78O#G8W!%,GTM%[J/@%`U*'8L8NK4CD7=[B%.%,Z1 M+-(]3D57INIC"R&<);*UR@(T_P"XACG,#(8>8P"1%-"C_&UH+F/*QH7.(JH: MJ.Q$H(]L62Q^.*:EMXS+LR-_?[HBG:[A.*PFX'V>1@RRZ.%"YY!>&?H&88&3 MQ;)Q0%658*'2YXH!08\OU.ZG]&$IGR#F>##=VKE>FG?2`;`NLLC,E4+_'?U] M"5ZX\`L)IL0D*%X9LA#]<6/E9^EW$F%CLKG4$'A0!?'&>]RD`7TYMC_3'-8(10V!]X2D;\^M/YT+L(R]:\62SR)-P0 MA<*2;$:#[U=^?8&Z!#GZ2\P\5:"'ZPE<$(7#`X8SBL]$=N>,5>Z`J%[8=?YG M_:;S'>)BNI>JY3YCAV104LLLD2JY;U=VK\KJK^H.`R%\:ES0^0A%>;@-E&:^ ML/P=%6=9>N^.`4O0[Y%G*(DJ9-96MERL(*2\Q'`R[T"^>1XL0V)%5&-4:Z-X MGJ?OLOVYYP`87Q%M952Q43P'0'`]2E+_?2HX5WJ;"I[!B(`5J[:\PPT.XFIC MODAC&@A)`X:'I/R47!LIF=DH'F<63C$R^]&%6E\'&$S1..^E!)P/KW.A=83N M_7R)CBP3822C\M!E'?#[KL(('!!0VLGIP7V$=.ZI5@F8&J,:;DF_7AD.-\") M8]]90)-+\$(O#PRDZ:=7Q.'8P'`+$+HZQ$L5;F[=$@189C!B(+P4;IZ_HE]] M12(($+THOZ*!BQ'KW$Z=+>$Q#Q;$&T\> MDB`&J*K;9-$38KJEK7RP)O0ELTFGHGT3,@U(B9B=.[!E<\^!38AMV6*Z2UL0 M]1:QPY?4?_@*-=M?Z1XZ.[!/$V$SNPJU]Q#L/G![M,=\&QXHZ0%ZU)$N)+"+ MBWJ(W%-EV23WY4@JW\`GR+!1-_%R]8L;"#Z1WES1XT-E4]([7,!C&26&FR$# M&6Y$:W2JLX!8.A"[J_I?-Q!PX4A]GPY-[\`-MF#)!!=MP%#'P-!$JJHC,(JK M2V^@UV76@:T^<,Z8_O?>-]?D#7WOG>0?FJ-XKAKQHR['/V="]8I:S-0@;IVK>/Y]4^O4U9Y'"N+ MBY]^:MUSJ]8I"5+^TR5//[G*L])D.Y_8MUZSW,K`=6S_BG/RN<<@/[< MT^M6*D^O7Y<@_>_])^`#P@/"T+;G"32Y&,U$&?#C0!*2)J]]TO'\2L_ZM:LR M'))$.VEQ])<)M#C^IC!Y-Q9VH,0`R4;A_YUB]H\VBO7?*;37\7_^/R@%^D$H MCAV$M3((2>S@?\=J4(49#[2[H3T'=DA_L4+7;#"4_64T^__:_Z$F(^8?6/CP M;[)O_B>H>808OR-8EA=$V`?)(X41)$48QI*A11#(+TH2F<3"`\H(0EA62&+- MJEDFF8\1!#VZT(DR;KGE%F0LFE$86MB_*0:(HP_>:`L#91#'(HV4XN-8UL8F M)QH`*\L.9UD[?&@1+9)D]">PPQ)A2DFQ?J,@^ZWKP`),!?TD,\DCZ4%A43+' M)\<-,$H>+$FCDJSP8TE.&0`E#/;:I:2D)*N4G"PF#[\#& M.(K_R\IUJQTS':O7K@?;L>XIT_0X5E/CHA0[UJU7'&N?7O?LJB?_`Z.28#Q? M2`X8'\2N3(2F??&H?P-02P,$%``"``@`!FI8)ZFI>T5:%```0B````<```!$ M:6,N97AE[3EM>%35F>>>>^?.9"9?\A$$-82O5!I%)346!T*$Y$:Z&J=B9Q@# M87&UB%7PF=R;V#X)3+PM<'-(BM1%Z;HM%MHBC\N#?6;I$'=AR&A&V043:#6@ M"R[QXPX7=>R<)TGW:_;O/[DUFYGR\[WO>\WZ_,P\^N@C=@#A4 MA'(1I>>Y(+*>!MJ M/[UK&]HB;D5:X1:DS=F#]!;NK?)61&*D]R#=D+JXKV_5XN)OVY3^X+%@\I26 MVXH.!R2IL(-FNPBI2<@^C?/=7C78R;/#QCSAREC^M%>X$-G:C5[>BDM[V M2.@[OF/35I[\?+#]!/E\J#0RIUULPX=#^*#(E[R7NK17+>_G)C14!\NW(3Y0 MT6@/EO\,%0;N"7/+WL3HV+3`-T.K26$_!Z.BT/UOA^(+T$)DX& MB6"YGH_7@]LB;SZ+B+CM7^H5Y]J$]['B]&]&R MS?#:"*\?(WT>Y]$#@@G@]1T*F2#_A%;61;T^<[$T0A('[T#%6`C^`4GGDK[`LS/W$P"%*/B!GW&?E&<7!A52^T=P1B^]=S1E" M\;=7MJCIQ4HZ)QROV!?!,Y#8!,2%24[<5T);8;;Q13'WSLC88J3$5$ M#Q:B#B^:TU[8AO7S-,PCC^[A64!Y)W$K\I(&,2:E$8I)*0[>SK.1CM"3>Q&5 ML3X^5WU+(`E71.;CQ]%32+?S_OC;R/LD16T;];1'_]REO@4$OF1H%Q`R[F7+ MI.X"WQMMMT:GMYL5Z4+G.K],D/P7PO\.]S>+S?\ M7K&YI0N-^\U5(NEK(G#D=L=9OM.C-Q8PKNKT(WVX;6/^!WQOK!H#`W8.70?X M+!#+P+5G?\B?TGQ8@_-T..\\2E;B(J3P\;MH3+K(^$\`_[>2NH1)%L![R4.8 M3"7>-)%2^B>\YDUK4DJ5$H!]$4ZZ2+P)MW2^Z1APZM4#73&IGU&YC%!\$D>D M\\2KJYUT(J6:-*AY!ZXYY'$J=J'FVT>.8C<@4H(QSH-@[,`Z`1&10C!UL1MM MMH>0,?O)+O17X#WZ@7R0RY\S^((RDS'8:MQ"Z@;^7&;JV@%.K1M$UVZJ=D[U MX:\MD6I,)F463&&ZJ_&&?8K@GM2XQ[Q/_@C#^YTFRRY@^2FG/LUBZC(PU0], M]1/O9;>4;N;C'Z85A]N;`O?O27OUUQW^NG>CWR,7U/)]J$BQA3EDC">%^U!/ M'Y$$;5,(4W$?*HVL8#"AQ7,CQ"M`%,DB=:*65QHQ!(]^%F4V]W.P26I$V!>L MK;=@B^V!N3M<_4JAD4MS]R&+/'TIA-FA2#'T`T.T8#_2%Z;TPT/J>A$IXP': M00M^AVA!"-$&07]OR%^WHE-$0*PTXO&PI=]0\US@V`-+;.5%6(%A9D7_"8VR MH3G^(0I_GBJIE6XS5DO"/<:/):$O>>^VH_VVHGD7%E'/EW1 MF9V1"6T0009A)_+LA_]5'OTINJ)38)O`9T]?RV\'.#H<6M0J070`+3F(ERD* M&S:/_DEZQXH1-<$RR)X_=!D#-=<)L(CGL8%)I\>K/\'Y_1Y]*PUOQ#"[O$-?I*H8+KUZ4\[(>:3&`]2,X'`/\D?6LXC[.ZLM^]Z!9S4R(J)+R(',]Q1 M"*_(BZ\@]00B[X`V\UN.(!QPNO^]7MP$R] M83N69Y!&W"]PLJB5;<5&D;L,UG+(&?T1!(%N%RS!I#2RJYV-=VW#2_6)M#9* M\]P,]T;`)<(>3LGC[9I`%O)#FH+)&:`_%[$9L>WA9"[*V4F23VC+,3E+-HB0 MU7.U\FV8-`J:(FA-8C0F;H,0'"5EV["K7\XG3:*V7-16"-H&46L4HEKA-JRM M%+25HG6=2A%L]6&;#07*9J7I`@>JY\,.I):W@T5.)0#L^A!N<'*>O7X*62FZ M3RM7].\C8YK>BHR;]9N1,0GT,IXDU"['O'OJX_H/*+63J$U@$C'M0?]>NK9V M%H?DK-(3(.]JF"WSE'ZXU*//A^$"2N4)I!=*3JR!0)=50"*-"B0:K2V-1"VP MB1FP`M+[ZE:L55\'N`P`9]O))?X>DN8'*C0!)`-R4[L$T@55V%+/=SU,R*07 MKCFUT)XB`Z0A3;)AWZO&;3WQ2[_6I+0^,UU+ZL!JQ2CI5#L=[I[&NTD/4[&2 MI]FIG8\"(T\-U]8:A62(']!6X)+NV9-`#Q>U)KQ(FTC^C9S5[TF34\`3B-5T M;`>$,#CS'I#?[6`Q)&\)Z58[;>JYM#KHJ.<[',A]-)#=:`,4PZ%OHJ#GARB) M&CD>_8FT(2[5MPZ71FI7@!P1^JGX,OZI^'-XO8+G;"GL:N$OJ%=W()(^HT-J-#'H<:K M\XMDQ_P<69B?I>AS(\8G<"W[HKW.B,(MWOCQW,C5OHFO+[EMNIPG3)^_7+$' MYT]7\.M+7/W1^*DK?OXHU(C`<.&+>#'_(1CZ,?#PH)THCFH1,<`+W(W`_6O8*O'Z.7WT1[_HQ>G4[W@4%>O'+F$FXQA%: MS!S6###\"\Q)!P'RHW,UP@>V3+BE$' M!C+Y3H`0X1:!C,C(&+6CL7HD=CXPDB0#Y?V=0>7N,+>H]%W2`_,Y#WO".#.! MZ@YJO$?]@Q$+RWR2KL`#]%E4<^KHA?[!90$VNUBH!8K:-0C"-5;'ZJTJ$ M-QM"754"59NSD3S!#,U*MIX<\.C?'_3'JK(A?XR$6O-0%Z0T_3@RO@]'P_TH M->K@Y*;9<*`#*4X2@Q@QK\JI2(SPZ.S;I,JA53F-.XTYI$KD;14D,?MNC[7H ML?BJ9<6\NTO.`4H(*Z+Z(,XW?ED:&3V\]`0<;_";)U:K@TZYF-:(ZZ>!_]"\ MIFS2Z*35SE8!"C\[;7#HS_-^T@W10#FA#E(ER[U>4%AJF=!E@ZK2D:S&^4AF M"SSH+D/?3-UF,T*@MSQT`!GCH$;GD>SPZICZJ916N_))["$0[N=$2ILY.SJ6 M\AT6ZAFI-:_UR/R`XNC@T&%0?E'P:J-BZ\"\X0A>7:7D=.`L@`RBPY`@&0=K M6K.EX-42.2\XOT29&KPJR[;@U<>4B;"FX-9L]5Q*/2HP#.XPCV`;DNU15&'< MPH#8,&CDO5J$9Z&(JYMTOH:",J^^5Q$3?X<6W,2*TTDL3TEIS4YB5I61*5,$ M*'*4'>[."F\:_V"9R_3U*ND$/;"WG M81'?,EL3)7D?+XWAE.B;`-2L=6J73!Y($1BV1K;T"XF"VZ616:A+! MHZ9NJ4>P((_V^S.]'T#;6(:[A?&=X]7'TQVH3Z.SX+4"X$%)9=1W9#.*4)@.H:#W51]`.=?UR]0Z!@$Y*];,=9Y M*"+`Q%]"3&`Y-)LL=])*9ZL]KK*5ID>`D7Q.>1`^H!R0P*J"2&V"")?MU9=2 M$/DQ(V*\.\+M%,HJRC#F,[SF,E[A8C.LZ?)!_P*@(C+&#.U:AN,_HL%RS.C+'LI-"SZ7,OQK]`R5@P$\P`#M"-;"`@ MR/>$/9"-/DIV)9`\&:@S!X'"8<`5@>[WGY%/GW'5;XPSG2>MEUD;3\=?05[& MR3\BZ&I@I>E10//IXA7&6.HU.*BPY3@J@@.";_E'!UP=3]L MH5I70MRC$-G.]O1I+PUPF2"6";O0:->(R2,8LLY^G#PB(`7O1Y#3WTA,KQ&= M1T(+0"530"!$$F?1<`X*0ND&="`S0VACJKJ4&,FFH!2:[6V5S/P(=Q_+=R(L M_DK@H9-KOI?:R`HGK7)NMEO)CH]?@?))X)VRDWWDR'S\$Q#L'P98!N;CO:RA MB'^`XN\A@-^*%(8&W%J9K:_E08PX,W5700*5(77_@XEX%!)DLE?+G+53X,>. MVY@YSFX>ISSGTY]D*/(ZX^^-'[`LVO,QZ35+#X<\'EHPL[*VLNMP`@*.B:U, M!7(0`6\T'>=7.`/PL0`Z`5_)K`M\9OV=S+KLM/(R'U](@:D0RM@_:^^83H^G M,QV2E1#!8221&3-C79YM3/&Q5"TY6NU`\U<`:\:]TDC\>Z`-$7(YW/RC>!5G M\<;'SR(F&AB\C$`>;DFL?R@C)27)I/3V7[YN+KNN^5V`PUK@V#6`3("/?XR, M3?$/$;'QDMAT$U!5G*"HDBI1LQG9/GTBHP^J?(Q:^!"C]>00:SH9`NA%$KDJ M9_SGZ"]SL.6KZSC8P%L8*D:B@@F(,'\_BIO5%X0 MQ(8M-%*E.L]:]^D7\MXA(CHH% M&`5ROE:Q@DJV("M5,;6V?,5BOY2^'K)"L3$O>HS4I,%Y($*FR9G4Z_.GR+=# M!V#;>^ZR]U#"C9V&$4F0/+431'/=QF( M[TL0FO5%S4\9.[4E0R^-NOQ(ZITGYRK0=3OP!K&%T@T-9C;9#;WH;]A/"RWI M+J0X8N)O,/L.3RW?#8O9+>D#X'P\N=Q%&^Z-B?O1W]UD=OTW^O3_3$!D%$U_;Z20 M9:!`C:^ES/8KG0RS201,3A%@RW%-+9L"!P&A?3`WTJN M;DHFN\#C\.XEK/&$=+-M%)&UINM%DLP@)GN`T*5KTI%O2V][!-9*(RD3X(5D M]_TKS9V6"YN1Y9@-HKM\U!2^-,#7,J90S[3?@UBXS1AUWHA1^_0W+S#=G!W5 M?RX8B=>G[T&@5<@;;,?Z=DUK&`1Z+!,]2,$ZZ@:I--AJWRP-SW0(X$! M;!:DMHW/4?)^27?+8!`U?:,DX84S:ADQT@U=P#BSW&%UT0(@5@+$[FH[\!R% M'(B4UQAJ28)TN2(-T[QL`JA%HZBY@"J_#5A\9TD7*_$=HR8T:K_)'54=6F+,^;O_D<%LQR M*W\4Y-V+_H<`!GJF"V:#_O5GT;K`TZO6/EZTN*2DZ/:BQ>N>_6%@S>HGY:*[ MYLV[JVAD<\E:^>DYJ$9Y^NFB9]>M62L_$2A:55^_9O7:9YY8*^!Q]A[T,;^$,K"8SL'X.7$8[\-=\$+XS&`]^&U&(\1^XS=&1QMY.G_/__+H#`QO M\(RG%&-;'K:&UC/#>AM/T2,/>M"W9?,C/WQ_=]][O?[V_F\:=[T6V(0SDH`U%ZG0L@^RF$%X<&/2_XT5]Y M./3_S__NI_D];JX^J1$'[S\YGES]R&CGGNO ML`&1*.DX3#<.]1[H6KTD]YL.M2]P,A`_JV$K^TC]%@PVD.#5816K&493E M_K+6289-/O8I1R[PY_3LW<#&7O3&-I37T10.?JO\Y/159SX;:#I-/AO,#\]M M$AOQT2`^+/)Y'PY=W:\5]G$3:DH#A=L1[R^J=08*?XJR_0^%N.7O8G1RNO_K MP34DNX^#44[PT7*,-T8(M\-H$KQ\A8S[G,7(=%H"W_$C0 M`ODM6E49\99;B_EATG/X/I2+A<`?D7PQ?N^*="7E\!34?!\R/F5PI#OX6(., M3TX_G(&:'T6Q/Z'L$'KPY'0]6P'-U*"08$U>ALD_HI##FM3!9`,*B=8D`),? MHA":O?5$T[GFW7#C:1$@,?O]20K<;EIV2(#AR_;0`<,Z>RC",,"&D?K$/JP( M\RZ9.$C)Q^2\^X(R,S>PB"JW6SMB[L-K.%/(_>8:KE;,;5C#D3-:1#3/NC]6 M[B#G`)`)B8J*,Y>NPD[SG5Q:#A_[(\$B2Q&1P]FHV8OF-F4W8N,*#?'(8P@" M"R@?]-^-O*1&C,H#"$7E?@[>+K)1)T+/[T=4P48T0WM/(#VI886/G4(O(.-= MWA=['WF?IZAQ4V?"8_P\37L/"%QA:`9"YL-LF50:?$=@4;KB2HYPW.QAWV\-P6IR8;G.:]DB3X#Y-]N]S>*QM_KSK`2+W&SL%W3N@R_V:W`W8 M7\!)7Q!OMUN^6'<2./5V^ENC(UW#+ ME]FQEQ37"%T.:?(E8.TRL':9>"\QUGYKL_;FB(A'<"_6;;9W`D0>2I43H-T] MZ"8I/$O%5K3^WA%96`S)W4RR/&B.GN=;".B09(,OBFUHBS.(S#G/MZ*_`>\Q MCF>!XOZK!%^QF6FP3LT:(7O091%.!<(ON(RF+$OGUT8/T)R<5HZ1>?_-BV.& MD%P4QB"UJFN<5MF';H9/BOG:J(6`F#<>4`7WY-I]FMP#?/8"G[W$V^.6!];S ML:\E5,GM[8>0=5?":[PM^2J/1[Y#NK7"`RA'=80X9(XGV0=0>Q>1!7US$%/Q M`,H/KV0PP27SPL0K0.1+(96BGID?-@6/<0$E-P]RL$G*1-@7[*WW8(OM@8M* MJ7UJMIE!,PX@FSQ]+8C9H4@U#3Q()QU$!ADT4@>U#2)2QP.T1"?]#M%)041K M!...05_ERA81`;'\L,?#EMZDUKG`L0>6V,JKL`+#Y(KQ8QIA0VO\`YKD0TCM MJYNH)99OX(^4([T@%S?\Z&Z\D_28Z?'S6F+FQEA4S,5@\`6OHA"E<"9&242O M\:^4M(ZLA%`QJ011;)\=L.^O=<_PEHMD@RO;22HE;7!6[?+`(/8O(W(:*.=?>%04,A,@YJ!RZ6CY/`#NJ6)\;0G0XA+`G+H80PHKE#)!]F0&%#D'.J08'EG:?8#A#PTF<#T9Q M/K!Q\!A.*^`L8C@WV:EEJ&L3L&A[S2.V0R4=YNEA6Q'E($=0J)%[FX_T%#'= MEALONB!/D2@/4K.`P#_)'^NO(.QNJ7;N>1VZEO!'G7DQ[C]]27G'NE8'&#+%K"=P'+ M:9:G"J3%%!GKOQQ:"04+N496B)HI^#/$\3&^_9CI<9$VE%A&:Z&>[M@$N$ M?9R:R3MU@2SB!W45D_-`?QYB,^+8QRE8_5!TSOD>IDT0<`I.(90_&=Q(5%;,YI*3DGP9Y ME\)LN2?_DV4>8P$,%U*J3"`=4"9C'02ZO`B2?T0@D4A%?CAB@TU,@DTB'6]L MPWKI+8#+`7".DUSE'R()OK](%T`R(#>M52"M4#DN\WS;PX1,.N":T[*=0Z2? MU"1(&NQ[M9BC/7;UU[J<,&8E*D@E6*T8(2U:B^1NKWV0M#,5JYFZDSKY"##R MPG!%A9E-!OE^?27.:YLS&?30J]?AQ?I$\@=RP7@H0&*E2!'A'XB[L0_$7\&K]?QW*W9KZ7I!;^`-F(W'FJ"SN1(`,V[E/MV MT=;W-W_T4U+0@&096A"[[+^M2=R*2.*=C?/"T*E4!?ZRT4..\9$BT#49RNOW MKR"?B=,F.;^]].K>>>']3?^^N7?S61(A;4N,*:C6Z2\RQJ':&PMR%&E!NB(L M2%&->6'S$ES+N7B_*ZQR2S9US@O?Z)KX]M)[9BB9PHP%*U1G8,$,%;^]-+4O M$IM]W<>?@+H6&,Y^%2_A/P&#Z\XS_9?)G_6Y.W!7AEZ#M/=QP=NN<.>`TI,? MUF5D@1.X'X'[T8+7X?4S_,:K>,^/T!L[\!YH*G)W8B;A,BFXA#FL%6#X5YB3 M#O0G?5FP`F!*2(00]>=^,W,L:#X)WFI[?+#0RG#^M)$M.T8=ZD_F.P%"A%L$ M,B(C8U:,QNJ1V/G82)+T%_:U!-0'0]SB_..D'>9SG_2$<'*BRT.Z-_&TSS\E MA!;#WCBW-^%/J87:>0BB^^_M0Q_IATPQ&AJ/4#I_?8:Z2EL/&?5.;2%:GU)N M>!$+R7\7+\$"](A4E8QU@[[`>@'5I3:4"!"S'12":;2$E5UQG&7^,C\\>GC^:3C>Y+=,+-4&7$HN+1,W3`?_H9EU::3614M= M#0)4F4Y:(QD_Y'VD#:*!>EH;H&J*>X.@LM0RH=4!1:,4+\592&$+/.@N2=]* MW58)3J`?/G((F>.@K^"1(GD-3'U43FBM623Z!`CW,R(GK)P=&4OYDHUZ7F[( M;#BVP*]*S1PZ"LK/"=RH51W-F#>EP(W5:GHS3@'(`#H*"9)QL+8A30[41;$.R/8&*S+L8$!L&S,PW M8QO4+T8@\/F!.H$M/YKM&8(T%)EPFMQ0*-%F/+ M#1YI*&::Z[O."AE'_6.@-ZL(@.VOU@U>HU""7,\"@M=8-.PS6Z+%EF59/$G( M"_)F!]>-?Z./@VK%*E(^`H&[6VH_LS:8K##`,Y$;'U+2!GI@:^E/0K:&B[#J M=A8=,=,:05N`UKO(4R(_83$9,%.)L"N_):^%M)%^X*X(J?>0QUP,YBXS92DY MRQI;KI2T?`NH]IA9Y.PC7UEAPALI@1EQ*&^]QN=#UJV9!Y1JE%.S@-R&5*]1 M1W?-D<4I7JG^6;PJ$84&G11+>K&K'"0)C-HBJ[H.XF"VZ6)6:A'!HZ9NJT>P M(4_T^2`N0'1@T`Z6X>YB?*=[C?%T%R9-F'"JR$X=FN)-$/B7ARSK])8? MG8"8)8\GQ6`B_$+$JPZO\8TAWZ@I7UY5.=(1V%KCC0_@"-%FV6.ST.P`]>M" M:GB#I#V++X#4LX$%-8-1W9A(ST%@.J;$;JH]AK-NZ1XV$Q[NF+`MQ"HB(PQ4[^9X=@_TD`AYM-5IV40 MR@%VM=V8#R)@U:ISRZC/-B=H938(K*HOD]IC0U=_76[X?%!EP!ZGO#RS<`8F MT;<"G.ID-S3D7FU#@JHSM<))TQ-O06')1=?PKEP`$!)7LV12!*J\\L-[JN@=Q-%^Q@12@W M$HFXG`#!3[4N,\'B(L-J0QGY-?U,2;3N/MCEP850%K-^\E']1=J?VO:DC6I? M"7%/0V2[T-ZEO];/)8-8,NQ"HUTFQH]AR#H'Q?"?"XJ\$ M'CJY]0]3!UGIHB6N+4X[V?&QZU`^";Q+<;&/=(6/70+!_K&?96`^UL$:BMC' M*/8A`OAM2&5HP*V=V;KJ'\>(LU)W"210!5+WSRW$$Y`@XQUZ\JS=`C]VW*;D M<4[K./7E9N#ZM4Q)S576)I?:-Y''>LGV*J&(H()2+"^+,LO>^#SV&T1DJ6@A1O[T MKU2LH)*MR$Y53*WU7[+8+R=NA2Q2'B)`)$<:I"'][L'56SN,G,L@/C9.\*>;S.0\B]` M:/87-3]A[%3D#;XVZO(CJ7>^DJ%"URWAC6(]I1MKK&RR%WK1-]G/(?6)5J1* M4?%-S+[#TPKWPF):?>(0^%U4W`N+D&.4S)&O(;S&UR$629`"K&I9D8Q'>GR0 M":Y&BT56GT#YJENID)VG%*;2FH>CXD$T^4ZKZ[^]W/B/'HB,HN7OM12R#!2H ML2K*;+_8Q3#K1,#D5`&VI)MJV2%P$!#:Q_/"ARGM/="H4@@UUC#>GG=C M"AZ']RYEC2>DF^VCB*PUW2"2>!(QW@Z$KMZ4CLJW=C2%82T_/&0!O!)O>W25 MM5/?O079CEDCN@M'3>$+$WPM:0K53/OMB(7;I%%GCAAUN?%N-]/-A5']9X"1 M>,N-?0BT"GF#[=C?KNDU`T"/9:+'*5A'Y0"5!QJ<6^3A!2Y5:!7293"`+8+< MN.EE2C[*:ZL?"*"ZK^7U>.&,"D:,M$$7,,XJ=UA=M!"(Y0&Q!QH/O4PA!R+U M+8::UT-:4\,UT[UL`J@YHZ@9@*J\#UA\2UXK*_&E41,:M5]NY'NT:<&BF[]' MR_2,65_6LWZF."E:YE34* M_;(J\R-\\]S_# MWK\ALC^$4O#8SB%XN?#8;]FM\,)X#.`C>"W!8\0NLSN#DXT\??_G?C6>@+B_ MQ_`G[,:[_P9H$:76YWB,!8LN326=B>(-G/*48 M.S*Q/;2?F?;;>(J>>MR#YLZ:-0O.R/KO&$BW/_#K$H/8E?:?4$L!`A0`%``" M``@`ME)9)S;6>JLD'@``9BX```@````````````@`````````$1)0S0N15A% M4$L!`A0`%``"``@`!FI8)ZFI>T5:%```0B````<````````````@````2AX` M`$1I8RYE>&502P$"%``4``(`"`#065@GE#^,),$4``#R(```!P`````````` F`"````#),@``4$52+D5815!+!08``````P`#`*````"O1P`````` ` end sum -r/size 22132/18533 =========================================================================================== --------------------- LINUX VERSUS WINDOWS --------------------- Forse questo sarebbe un valido argomento di discussione per una tavola rotonda, ma ci tengo a dire quattro parole rivolte soprattutto a chi non è un grande esperto e si sente ripetere da tutti "Installa Linux, winzoz non serve a niente". Cercherò d'essere imparziale verso entrambe le piattaforme, cercando di descriverne, a larghe linee, i principali svantaggi e vantaggi. Diciamo pure che il 90% (se non di più) degli utenti utilizza Windows (NT, 95, 98 ecc...) quindi, per uno smanettone è indispensabile conoscere il sistema operativo maggiormente diffuso. Il fatto che un po' mi dà fastidio, è che la maggior parte delle persone che sostiene che "Windows fa schifo", è costituita da inesperti che si lasciano trascinare dalle idee degli altri. Prima di affermare una cosa del genere almeno bisognerebbe saper programmare e conoscerne abbastanza bene il funzionamento. Io di musica non ne capisco un cappero, perciò posso solo dire che preferisco un autore ad un altro perché + motivo, ma non che l'altro sia meno o più bravo. Sono entrambi dei sistemi molto validi, ma completamente opposti. Ognuno ha i suoi vantaggi e svantaggi. La cosa migliore sarebbe quella di averli entrambi in due partizioni separate. A proposito di questo discorso, mi è venuta in mente un'altra questione che spesso m'irrita hehehe. La stragrande maggioranza degli utenti decide di installare Linux lo fa perché si è stufato di Windows. L'altra parte invece desidera conoscere nuove cose, poiché conosce già un altro sistema approfonditamente. Beh, ogni individuo appartenente alla prima categoria, subito dopo essere riuscito ad installare il nuovo amico, si ritrova nei guai perché non può usare la shell grafica dato che Linux non gli supporta la scheda e vari altri componenti hardware (ora comunque la situazione sta rapidamente cambiando!). Il bello è che Unix non è nato per essere un ambiente grafico, ma uno simile (solo per aspetto) al vecchio disk operating disk (il dos insomma). Ma allora perché installare un altro sistema? Per farlo assomigliare a quello che già si ha, aggiungendo nuovi e più complessi problemi? Chi usa la shell grafica vuole evidentemente la comodità e maggior semplicità. Per leggere il contenuto di un floppy bisogna scrivere un libro, è più facile perciò farci click sopra. Ma questa non è una caratteristica (la più importante) del prodotto della Microsoft (a dire la verità, a sua volta copiato dal mac)? Anche io ho usato per un pò Linux e mi sono subito imbattuto in una shell dove appariva addirittura anche il menù d'avvio (stesso discorso per kde). Quello che voglio dirvi insomma è di non fare le cose solo perché sono gli altri a dirlo, spesso, infatti, si dice "Windows, ma che ci fai? Installa Linux!" solo per far vedere che si è bravi. Per usare questa piattaforma occorre un'ottima conoscenza dei prottocolli, di C e una voglia di imparare e di tempo libero infinitamente grandi. Ultima considerazione antinewbiecredulone: non è vero che Linux possa fare delle cose su Internet che Win non sia in grado di supportare. E' una menzogna. Infatti tutto dipende dai vari protocolli (TCP, UDP, IP, SMTP...) e non dal sistema. Ad esempio molti credono di dover usare per forza Red Hat o fratelli per usare lo spoofing. Errato: provate a dare un'occhiata alla dll winsock.dll C'è il raw tcp, ovvero l'arte del forgiare i pacchetti a mano. Tutto si può fare, basta saper programmare. Ora che ho finito questa specie di introduzione, possiamo passare avanti. Linux vs Windows: la stabilità. Qui c'è parecchia roba di cui parlare. C'è poco da commentare per quanto riguarda Linux, che è sicuramente più stabile sia di NT, che di 95/98. Unix non si blocca mai, neanche se lo pestate o se date una martellata all'hard disk :-) Window95/98 in questo campo hanno i loro problemi. Molte volte il sistema crasha o diventa instabile. Perché? Beh, perché la Ms ha deciso di sacrificare questo fattore a favore della semplicità d'uso. Sappiamo benissimo che questo sistema riconosce una vastissima gamma di componenti e li rileva automaticamente e inoltre supporta anche direct x e varie altre funzioni. Linux non fa nessuna di queste cose. Inutile ripetere quanto spesso risulti difficile installare del nuovo hardware o aggiornare il sistema operativo stesso. Win costa una bella cifra, mentre l'altro è gratuito, fattore cruciale. WinNt è un po' più stabile e ha, anche se in minor parte, gli stessi problemi di Linux. Staremo a vedere cosa succederà con il nuovissimo Windows 2000. Qui il vincitore è Linux (che batte 5-0 Win95/98, 1-0 WinNT), ma gli altri aspetti non sono assolutamente da sottovalutare. Dipende insomma dai propri gusti e dalle proprie esigenze. Ad esempio per quello che io faccio col pc preferisco il prodotto della casa di Redmond. Il supporto: Linux in questo campo è pessimo. WinNT non molto migliore, Win95/98 superiore ad entrambi. Il discorso però è uguale a prima. Se non ci tenete a giocare con Half Life with Matrox G400 e non possedete un pc ultimo modello, anche Linux può andare, visto che non sarebbe un ambiente grafico. Stessa cosa: dipende dai propri gusti. (Win95/98- Linux = 5-0), (Linux-WinNt = 0-1). Richiesta di risorse: nulla da dire. Linux gira su un 386, a Win95/98 occorre il quadruplo d'ogni cosa. WinNT un po' meglio di Win95, ma sicuramente peggiore dello sfidante diretto. E' un fattore determinate se siete in possesso di un pc vecchiotto, è irrilevante se avete un processore superiore ad un Pentium 200 "liscio". La facilità: terreno ostico per Linux, che è vinto da Win 10 a 0. Ma questo non significa niente, perché noi desideriamo imparare un altro sistema (dato che l'altro, sto facendo un discorso teorico, lo conosciamo) e se è difficile meglio! Sarà più stimolante ;-) Altri aspetti non mi vengono in mente, ma il concetto base e che né uno né l'altro è migliore, perché dipende dalle proprie esigenze. Io consiglio di iniziare con Windows e di imparare a conoscerlo abbastanza approfonditamente. E' inutile imparare due cose in malo modo. Meglio salire i gradini uno per volta. Ci vuole molto tempo per capire Windows. Quanto? Beh, quando saprete creare un'applicazione con più thread, usare file mappati in memoria, semafori, mutex e usare le API della dll gdi, allora potrete passare a Linux. E poi non abbiamo nemmeno accennato ad altri sistemi, che forse sono anche loro molto validi (anzi, lo saranno sicuramente), semplicemente perché io non li ho mai usati. Sto parlando di Os2 (per gli anti-ms: lo sapevate che Os2 è frutto del lavoro di Microsoft ed IBM?), Mac (vabbè, questo è più di un sistema, ma siamo semplicistici), BeOs, Solaris... Insomma, Linux versus Windows è solo un capitolo, ciò che vi ho voluto dire è che dovete ragionare con la vostra testa (e perciò non fidarvi sempre degli altri) e di imparare le cose un po' per volta. Se conoscere vi piace, il tempo lo troverete. Spero di non avervi fatto incavolare più del dovuto :-) Ciao e buona riflessione. -=Azathoth=- =========================================================================================== L'arte della crittografia di ADaM "Unno" unno@softhome.net Sommario Storia della crittografia Algoritmi a chiave simmetrica (o segreta) DES, Data Encrytion Standard Violare il DES IDEA, International Data Encryption Algorithm Algoritmi a chiave pubblica o crittografia asimmetrica Diffie-Hellmann RSA Fattorizzato RSA-129 Fattorizzato RSA-140 Fattorizzato RSA-155 TWINKLE la macchina per fattorizzare Servizi di email criptate web-based L I N K Storia della crittografia La crittografia come modifica volontaria del testo esisteva già al tempo degli egiziani nel 1900 a.C. (tomba del faraone Knumotete II). La parola crittografia ha origine greca e significa "nascosto". Un'altra parola correlata è steganografia che significa scrittura nascosta. Un esempio legato all'antichità è di scrivere messaggi segreti non sull'argilla che ricopriva le tavolette, ma sulle stesse tavolette che venivano poi ricoperte d'argilla e sembravano non usate. Gli Spartani per crittare un messaggio segreto di tipo militare usavano 2500 anni fa una striscia di papiro avvolta a spirale attorno ad un bastone (che costituirà la chiave di decodifica). Una volta scritto il messaggio in verticale sul papiro questo veniva consegnato al destinatario che, con un bastone dello stesso diametro poteva leggere il messaggio in chiaro. Questo metodo è di trasposizione perchè il messagggio è in chiaro ma l'ordine delle lettere è da scoprire. Un altro metodo, questa volta di sostituzione, è stato inventato da Giulio Cesare: la chiave è un numero n stabilito e si sostituisce ogni lettera del messaggio con l'ennesima seguente. Esempio: pippo con chiave 3 diventa snssr. Questo metodo è facilmente attaccabile perchè basta confrontare la frequenza delle lettere nella lingua italiana con la frequenza dei simboli usati nel messaggio cifrato. Bisogna inoltre considerare che le chiavi possibili sono solo 26, quindi al limite con un brute force si potrebbe scovare la chiave. Data la bassa complessità [tanto bassa non è, numero di combinazioni possibili: 26!=4*(10^26)] del metodo usato da Cesare è chiaro che non fosse infallibile, ma dati i risultati militari è stato efficace! Il metodo di Cesare ha ispirato un sistema usato ancora oggi, il ROT-13 dove la chiave è appunto 13, quindi A->N, B->O, etc. Il metodo che usavano gli ebrei è detto ATBASH. La sostituzione avviene utilizzando questa tabella dove le lettere della seconda riga sono scritte in ordine decrescente: 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 z y x w v u t s r q p o n m l k j i h g f e d c b a Messaggio: Il Libro di Geremia Testo Cifrato: Ro Oryil wr Tvivnrz Lo storico greco Polibio inventò una tecnica di codifica legando le lettere a una coppia di numeri che ne indicava la posizione in una tabella. La coppia di numeri era comunicata nella notte attraverso delle torce. Ecco un esempio di tabella: 1 2 3 4 5 1 a b c d e 2 f g h ij k 3 l m n o p 4 q r s t u 5 v w x y z pippo diventa (3,5) (2,4) (3,5) (3,5) (3,4) Se la disposizione delle lettere nella tabella non seguono l'ordine alfabetico si capisce la difficoltà di trovare la chiave che in questo caso è la tabella. L'imperatore romano Augusto usava invece un altro interessante metodo di sostituzione usando come chiave un'altra parola o frase. La chiave e il testo avevano un corrispettivo numerico, il testo cifrato risultava una sfilza di numeri ottenuti come somma fra testo e chiave. Esempio (testo: spippolatori, chiave: decifralo): a b c d e f g h i l m n o p q r s t u v z 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 testo in chiaro s p i p p o l a t o r i chiave d e c i f r a l o d e c valore testo 17 14 9 14 14 13 10 1 18 13 16 9 valore chiave 4 5 3 9 6 16 1 10 13 4 5 3 valore cifrato 21 19 12 23 20 29 11 11 31 17 21 12 testo cifrato z u n b v h m m m s z n Se la somma (valore cifrato) eccede 21 si ricomincia dalla a; ciò equivale a fare una somma modulo 21. La decifrazione è una semplice sottrazione. La criptoanalisi di questo metodo non beneficia della frequenza delle lettere della lingua usata. Questo metodo può essere attaccato con un brute force utilizzando un dizionario di parole. Ovviamente ci si può difendere non usando come chiave parole di senso compiuto, ma un insieme di lettere generate in maniera casuale. E, se ogni volta si cambia la chiave generandola casualmente, stiamo usando un metodo chiamato One-Time Pad, che è difficile da superare senza conoscere la chiave e generando in maniera "davvero" casuale la chiave (e non è facile perchè si può ottenere solo osservando fenomeni casuali naturali). Occorre notare che non bisogna usare questo metodo per due diversi messaggi con la stessa chiave perchè la differenza tra testo cifrato e testo in chiaro è uguale e, in unione a un bruteforce, aiuta di parecchio la criptoanalisi di questo metodo. Infatti, trascurando il discorso della somma modulo 21 per semplificare il discorso risulta che: 1) Cifrato1 = Testo1 + Chiave 2) Cifrato2 = Testo2 + Chiave Sottraendo si ha: Cifrato1 - Cifrato2 = Testo1 + Chiave - (Testo2 + Chiave) = Testo1 - Testo2 Altri metodi usatissimi per centinaia di anni prevedevano la sostituzione delle singole parole con altre che costituivano la chiave. Spesso si usavano più metodi insieme. Siamo nel quindicesimo secolo quando nasce la crittografia moderna con Leon Battista Alberti, artista rinascimentale poliedrico, amico di un funzionario pontificio che gli chiese di inventare un metodo di crittografia. L'idea partì dall'osservazione che un criptoanalista può essere aiutato dalle caratteristiche di una lingua come le frequenza delle lettere, le sillabe impossibili o più frequenti, le sequenze di lettere caratteristiche come le desinenze. Per rendere più difficile il lavoro del criptoanalista altro non c'era da fare se non cambiare durante il procedimento l'alfabeto da cui pescare la lettera cifrata: questo è il sistema polialfabetico. Altro esempio di cifratura con il sistema del polialfabeto è quello inventato da un tedesco contemporaneo dell'Alberti: Johannes Trithemius. Il sistema fa uso di una tabella che si chiama tabula recta, formata da 26 righe (tante quante le lettere dell'alfabeto inglese) riportanti ognuna un alfabeto scalato di una posizione rispetto a quello precedente. La tabella si usa così: la prima lettera da cifrare rimane la stessa, la seconda si cifra con il secondo alfabeto, la terza lettera userà il terzo alfabeto e così via fino a ricominciare dal primo alfabeto dopo la ventiseiesima lettera. Per rendere difficile il lavoro dei criptoanalisti si può usare un alfabeto disordinato o, meglio ancora (è più facile da ricordare e comunicare al destinatario del messaggio) una frase chiave. L'uso della criptografia continua intensificandosi sempre di più e migliorandosi con il tempo fino ad avere importanza tale da cambiare il corso della storia durante le due guerre mondiali quando appaiono le prime macchine elettriche per cifrare i messaggi ma, soprattutto, per la criptoanalisi. I tedeschi usarono per tutta la seconda guerra mondiale una macchia chiamata Enigma che avrebbe dovuto cifrare i messaggi in maniera sicura. Così non successe, perchè inglesi e polacchi unendo le loro forze furono in grado di decifrare quasi tutti i messaggi intercettati. L'Enigma era una macchina elettromeccanica con contatti, lampadine, rotori e una tastiera. Ogni lettera veniva cifrata con un alfabeto diverso dando luogo ad un numero sproposito di combinazioni che rendevano la decodifica teoricamente impossibile per l'epoca. Ma ciò non fermò gli inglesi che trassero grande beneficio dai messaggi decodificati. Per anni la regola generale è stata di creare algoritmi semplici e di impiegare chiave molto lunghe per rendere difficile la vita al criptoanalista. Oggi l'orientamento è opposto data la potenza di calcolo di cui si può disporre per fare un bruteforce, quindi si creano algoritmi complicatissimi da decifrare in modo che anche se il nostro avversario avesse parecchio materiale su cui condurre un'analisi, gli sarebbbe pressocchè inutile. Oggi la crittografia serve per il commercio elettronico, l'autenticazione, la riservatezza delle informazioni, etc. Uno dei presupposti fondamentali è che si suppone che il criptoanalista di turno conosca in generale il nostro metodo di crittografia, questo perchè è davvero un disastro cambiare ogni volta metodo di crittografia ogni qual volta si ha il sospetto che qualcuno sia riuscito a infrangerlo. Da questo presupposto segue che i metodi si basano sulle chiavi di codifica e decodifica. Se la chiave è la stessa sia per la codifica che per la decodifica ricadiamo nel caso delle crittografia classica: questi sono i metodi a chiave simmetrica o segreta. Gli algoritmi a chiave asimmetrica o pubblica (che risalgono agli anni '70) utilizzano coppie di chiavi complementari. Una delle due chiavi è pubblica e conosciuta da tutti e serve per cifrare i messaggi, mentre l'altra è segreta e riservata al destinatario dei messaggi che la utilizzerà per decifrarli. Le chiavi vanno a coppie e quindi solo una chiave può decifrare il messaggio generato utilizzando la chiave a lei complementare. In questo modo possiamo trasmettere tranquillamente la nostra chiave pubblica senza paura che venga intercettata. Spesso ci si orienta per metodi ibridi simmetrici-asimmetrici (come succede nel famoso PGP) perchè il solo metodo asimmetrico non è efficiente (è lento!) per grandi moli di dati e, se dovessimo inviare lo stesso messaggio a più persone, dovremmo cifrarlo ogni volta con la giusta chiave. PGP (Pretty Good Privacy) è un pacchetto freeware (http://www.pgpi.com) che realizza la crittografia a chiave pubblica; permette l'interscambio di documenti elettronici realizzando segretezza, autenticità, integrità dei dati su un canale insicuro. PGP è principalmente pensato per lo scambio di documenti via Internet, ma può essere usato su un qualsiasi canale insicuro; è indubbiamente un prodotto di qualità, e non c'è da dubitare dell'integrità morale del suo autore (che potrebbe come sempre aver lasciato delle trap-door), Philip Zimmerman. Egli infatti lo ha sviluppato con il chiaro intento di permettere la privacy nell'interscambio di posta elettronica su Internet, con un approccio fortemente critico verso la politica di NSA e del Congresso Americano di progettare un monopolio dei sistemi di crittografia; P. Zimmerman è stato sotto inchiesta per due anni e mezzo, accusato di esportazione non autorizzata di materiale crittografico, ed è recente la notizia che le autorità federali statunitensi hanno deciso di non perseguirlo penalmente. Algoritmi a chiave simmetrica (o segreta) DES, Data Encrytion Standard Standard federale ancora oggi ufficiale (nella versione triplo-des) per gli USA, è nato nel 1977 per implementazioni per lo più hardware come derivazione di Lucifer, un algoritmo di IBM nato nel '70, su insistenza del National Bureau of Standard per difendere dati riservati ma non segreti militari. Il DES brevettato nel 1976 da IBM è royalty-free dal 1993. Il DES è un codice cifrato a blocchi (si dice che un codice è cifrato a blocchi quando si applica un codice cifrato a un bit, byte, parola o gruppi di parole alla volta). Il blocco che si usa per crittografare è di 64 bits (8 sottoblocchi da 8 bits). Dato che l'ultimo bit di ogni sottoblocco è di controllo, i bit utili sono 56. Per cifrare il testo si divide in blocchi da 64 bits che sono cifrati in successione. Se un messaggio non riempie i 64 bits si può completare in diversi modi: si possono aggiungere zeri, si possono aggiungere bit random specificando nell'ultimo quanti se ne aggiungono, etc. Il DES è molto usato in ambito commerciale perchè nonostante consti di numerosi passaggi, questi sono tutti relativamenti semplici come XOR, sostituzioni e permutazioni. Occorre ricordare che il DES cambia solo la chiave; questo porta vantaggi economici immediati, ma appena verrà scoperto il modo per forzarlo (senza bruteforce) occorrerà cambiare radicalmente tutto. Un altro difetto fondamentale è lo spazio limitato delle chiavi pari a 2^56. Per ovviare al problema si tenta di allungare le chiavi o di applicare più volte il DES (triplo-DES o TDES). Il progetto originale dell' IMB per il DES prevedeva una chiave più lunga dei 56 bits usati di default. Probabilmente il progetto originario fu influenzato dall'NSA che impose all'IBM una chiave sicura, ma comunque alla portata dei loro potenti mezzi. Violare il DES Nel gennaio 1998 la RSA Laboratories lanciò il "DES challenge II" coordinato e risolto da distributed.net in 39 days. Record presto battuto, nel 17 luglio 1998. L'EFF, Electronic Frontier Foundation's, costruì una macchina (DES Cracker machine) per distruggere il DES e ha scritto un libro (maggio 1998) dove è spiegato nei minimi dettagli come si è proceduto (http://www.eff.org/descracker). La macchina del costo di 210.000 $ (80.000 per lo sviluppo e il rimanente per i materiali impiegati, il software è stato scritto da volontari in 2 settimane) forza un DES-56 bits in meno di 3 giorni. Il progetto è stato completato in 18 mesi. Hanno così dimostrato ai loro "stolti" (così li definiscono nel libro) governanti che il DES può essere forzato con una macchina dedicata. Qualche giorno prima un funzionario del dipartimento di giustizia, Robert Litt, si affannava a dire che non era possibile che l'FBI possesse macchine per craccare il DES. 6 mesi dopo, 19/01/1999, Distributed.Net lavorando con un network mondiale in Internet di 100.000 pc e con il DES Cracker della EFF, vinse l'RSA Data Security's DES Challenge III con il tempo record di 22 ore e 15 minuti! Dal novembre 1998 il DES non è più l'algoritmo standard federale; è sostituito dal triplo-DES finchè il nuovo AES non sarà pronto. IDEA, International Data Encryption Algorithm Creato nel 1991 da Xuejja Lai e James L. Massey, è, come il DES, codice cifrato a blocchi di 64 bits con chiave, però, di 128 bits. Anche IDEA usa calcoli semplici basati su operazioni (addizioni e moltiplicazioni) modulari, scambi e concatenamenti. Le sottochiavi usate nel procedimento sono tutte diversi e a 16 bits. Algoritmi a chiave pubblica o crittografia asimmetrica Con questo tipo di crittogafia è stato risolto il problema della gestione delle chiavi che non occorre più trasmettere al destinatario del messaggio per la decodifica. Il concetto di crittografia simmetrica è stato introdotto nel 1976 da Whitfield Diffie e Martin Hellman e si basa sul concetto fondamentale che un messaggio codificato con una precisa chiave pubblica può essere decodificato SOLO dalla corrispondente chiave privata che è unica ed associata strettamente a quella pubblica; ciò si basa anche su un dato matematico per cui, impiegando 1024 bits, per ottenere la (unica) chiave segreta da quella pubblica occorrerebbe una potenza di calcolo pari a una rete di milioni di computer al lavoro per 1000 anni! Gli algoritmi a chiave pubblica, per la loro lentezza, sono usati spesso per cifrare la chiave di sessione con cui verrà codificato il messaggio usando la crittografia simmetrica. Diffie-Hellmann Nel 1976 due crittologi americani, Diffie ed Hellmann, pubblicarono un fondamentale lavoro teorico nel quale, ipotizzando di poter disporre di un cifrario "asimmetrico", dimostravano la fattibilità di sistemi crittografici di nuovo tipo, adatti alla crittografia di massa mediante il concetto delle "chiavi pubbliche". Questo algoritmo è stato sotto brevetto fino al 29/4/97. Basa la sua difficoltà di decodifica sui problemi logaritmici. E' considerato sicuro con chiavi lunghe e generatori adatti. RSA Nato a due anni dal Diffie-Hellman (e brevettato il 29/9/1983 , scadenza nel 2000 in USA, libero nel resto del mondo), questo algoritmo è ancora oggi molto usato (dato in licensa a 350 compagnie, conta un numero di motori di codifica installati pari a circa 300 milioni). L'acronimo individua le iniziali degli inventori, i tre ricercatori del MIT Ron Rivest, Adi Shamir e Leonard Adleman. La sua potenza si basa sull'estrema difficoltà di ricreare la chiave segreta da quella pubblica basandosi su funzioni unidirezioni e quindi invertibili ma tali che la funzione diretta sia banale, ma quella inversa sia estremamente difficoltosa. Ecco un esempio che dovrebbe chiarire e che è appunto l'idea su cui si basa l'RSA: è facilissimo trovare il prodotto di due numeri molto grandi, ma dato il prodotto sarà estremamente difficoltoso trovarne i 2 fattori primi. Illustriamo i passaggi e l'esempio (che sarà fatto con numeri piccoli per non complicare): 1) Prendiamo due numeri primi p(=3) e q(=11) molto grandi ed n(=33) sia il loro prodotto. 2) Prendiamo e(=3) che deve essere: minore di n, dispari e primo con (p-1)(q-1). [ (p-1)(q-1)=(3-1)(11-1)=2*10=20 ] 3) Calcolare d(=7) in modo che: d*e=1 MODULO (p-1)(q-1). Significa che d*e diviso (divisione intera) (p-1)(q-1) dà come risultato 1. Infatti d*e=3*7=21/20=1. 4) Cifriamo il testo con c=(t^e) MODULO p*q. t, intero positivo, è il testo in chiaro. il risultato c è il testo cifrato. La chiave pubblica conterrà n ed e(esponente pubblico), quella privata n e d(esponente privato). Se t sono i numeri da 0 ad 8, li cifreremo elevandoli alla terza e facendo il risultato modulo 33. plain-text cipher-text 0 _____________ 0 1 _____________ 1 2 _____________ 8 3 _____________ 27 4 _____________ 31 4*4*4=64 MODULO 33 = 31 5 _____________ 26 5*5*5=125 MODULO 33 = 125-(33*3)=26 6 _____________ 18 6^3=216-(33*6)=18 7 _____________ 13 7^3=343-(33*10)=13 8 _____________ 17 8^3=512-(33*15)=17 La chiave per l'RSA è il modulo n. Più è grande la chiave, più sarà sicura (ma lenta) la cifratura. Con 1024 bits si è abbastanza (molto?) sicuri. Per craccare un RSA a 256 bits basta un potente home computer; andando a 384 bits servirebbe un'organizzazione universitaria o una grande azienda; la crittografia a 512 bits può essere superata da agenzie statali. Solo chiavi a 2048 bits possono ritenersi sicure per qualche anno a ogni livello (e chissà...). Se volessimo usare un sistema ibrido si potrebbero usare RSA e DES. Con il DES produciamo una chiave casuale (che cifreremo con l'RSA) che servirà per crittare il messaggio in maniera simmetrica. Spedisco poi il messaggio e la chiave DES cifrata con la chiave pubblica RSA al suo proprietario che con la sua chiave segreta decritterà prima la chiave che impiegherà per decodificare il messaggio. Questo si fa perchè DES è da due (a livello software) a 4/5 ordini (a livello hardware) di grandezza più veloce dell'RSA. Fattorizzato RSA-129 Nel marzo 1994, usando 1600 computer connessi a Internet, Atkins e altri fattorizzarono un numero di 129 cifre (426 bits) in 8 mesi di lavoro. Una studio del 1997 stimava in un milione di dollari il costo per forzare un RSA con chiave a 512 bits. Curiosità: il numero di numeri primi minori o uguali a n è asintotico a n/ln n. Quindi il numero di numeri primi di lunghezza minore o uguale a 512 bits è di circa 10^150, cioè più grande del numero degli atomi dell'universo conosciuto. Questo la dice lunga sull'enorme disponibilità di chiavi diverse. Fattorizzato RSA-140 Notizia del marzo 1999 apparsa sul mensile Crypto-Gram: è stato fattorizzato un RSA-140. Un nuovo record è stato stabilito da Herman Riele e il suo gruppo ad Amsterdam avendo fattorizzato un numero di 140 cifre (456 bit). Questo numero è stato una delle sfide dell'RSA, era il prodotto di due numeri primi molto grandi, proprio il tipo di numeri usati nel criptosistema RSA. La mole di lavoro è stata stimata in 2000 anni-mips (mips=milioni di istruzioni al secondo, un anno-mips corrisponde alla potenza di calcolo di una macchina che macina per un anno un milione di istruzioni al secondo. Un DEC 11/780 è una macchina mips. Un Pentium II di fascia alta è una macchina da 200 mips. Il supercomputer per simulare esplosioni nucleari installato al Sandia National Laboratory è una macchina da 1.8 milioni di mips). Per l'impresa è stato usato un algoritmo detto "a setaccio di numeri", lo stesso usato per fattorizzare un RSA-130 impiegherebbe 1000 mips-anni, per un RSA-150 1500 mips-anni. L'algoritmo non scala come ci si aspetterebbe, ma le tecniche di fattorizzazione diventano sempre più efficienti e veloci perchè i computer diventano sempre più veloci, le macchine possono lavorare in rete, gli algoritmi migliorano continuamente di pari passo alle ricerche di matematica. E' stato già avviato un progetto per fattorizzare un RSA-155 (512 bit) che sarà pronto per fine 1999. Fattorizzato RSA-155 Sono stati un pò più veloci della fine d'anno promessa e così è il 22 agosto quando il solito Herman Riele annuncia l'impresa compiuta ad Amsterdam su un numero da 155 cifre (512 bit) del tipo degli stessi usati per l'RSA in quanto prodotto di due fattori primi da 78 cifre. 300 macchine tra workstation SGI e PC Pentium hanno lavorato alacremente per sette mesi durante la notte e i weekend. Usando il solito algoritmo a setaccio si sono impiegati 8000 anni-mips in 3.7 mesi per la fase cosiddetta "di setaccio" e 224 ore-CPU e 3.2 Gigabytes di memoria per la seconda fase di riduzione matriciale su un Cray C916. Lo sforzo è stato 50 volte più facile che craccare il DES. Fattorizzare le chiavi usate per il commercio elettronico è sempre più facile e lo sarà ancor di più in futuro. Questa impresa deve mettere in allarme perchè la maggior parte dei protocolli sicuri usati in Internet usano RSA a 512 bits. Grosse e medie società come Compaq e Microsoft usano ancora per i loro magazzini on-line l'RSA a 512 bit. Occorre inoltre riflettere sul fatto che è probabile che qualche organizzazione in segreto già forzi abitualmente comunicazioni private e/o segrete. TWINKLE la macchina per fattorizzare All'Eurocrypt '99, Adi Shamir (la S dell'acronimo RSA) presenta l'idea per una macchina che potrebbe incrementare la velocità di fattorizzazione attuale di 100-1000 volte. Chiamata TWINKLE (The Weizmann INstitute Key Locating Engine), fattorizza chiavi di 512 bits. La macchina opera essenziamente in due passi: il primo fa da setaccio e attua una massiccia ricerca parallela di equazioni con una certa relazione. Appena un certo numero di relazioni è trovato, c'è una massiccia operazione matriciale per risolvere un'equazione lineare e produrre i fattori primi. Shamir ha teorizzato l'uso di tecniche elettro-ottiche per la prima fase di setaccio, idea peraltro non nuova perchè si rifà a quella di D.H. Lehmer che pensò nel 1930 di usare tecniche meccanico-ottiche. La macchina sembra non sia ancora stata costruita. E' da notare che questa nuova macchina non risolve il problema di prestazione del secondo passaggio che riguarda operazioni sulla matrici. La complessità del secondo passaggio esplode nella fattorizzazione di numeri enormi: con un numero a 1024 bit, per esempio, il secondo passaggio richiederebbe 10 terabytes di memoria (non di memoria di immagazzinamento ma di vera memoria per il computer). Questa macchina non introduce nessun concetto matematico innovativo, ma semplicemente esegue operazioni già conosciute più velocemente. Servizi di email criptate web-based L'idea è semplice: così come si entra in Hotmail e si spediscono e ricevono messaggi, allo stesso modo lo si può fare, utilizzando però email criptate senza dover scaricare nessun software. HushMail http://www.hushmail.com, basato su PGP e S/MIME-like, sfrutta java. Il mittente entra in HushMail e, attraverso un'applet java, può mandare un'email criptata. Anche il destinatario deve avere un account su HushMail. Gli account possono essere anonimi. Gli algoritmi sono ElGamal a 1024 bit e Blowfish. La chiave privata personale è immagazzinata sul server di HushMail e l'unica cosa che la protegge da accessi più o meno illegali al server è una passphrase. L'altra debolezza è costituita dall'applet java che non si può mai sapere se è quella corretta o un cavallo di Troia. Anche certificando l'applet ci sarebbero dei problemi. L'ultimo problema è legato alla collocazione fisica del server, che nonstante la compagnia che lo gestisce sia di Antigua, è collocato in Canada, che notoriamente è molto più suscettibile ad azioni legali. Nonostante tutto HushMail sembra una ragionevole implementazione dell'idea. Esistono altri servizi come http://www.ziplip.com, http://www.ynnmail.com, http://www.zixmail.com che sono molto meno sicuri fornendo una protezione davvero blanda e facilmente attaccabile. Insomma, le email web-based criptate sono più sicure di una email non criptata, ma meno sicure di una email criptata con PGP per molti motivi: i server sono obiettivi di attacchi, le connessioni anche se SSL non sono immuni da spoofing, etc. L I N K La Guida Introduttiva al Programma di Crittografia a Chiave Pubblica PGP, di Giorgio Chinnici, chiara e completa. http://www.ecn.org/crypto/crypto/guidapgp.htm Cracking DES: Secrets of Encryption Research, Wiretap Politics, and Chip Design by the Electronic Frontier Foundation http://www.eff.org/descracker/ http://cryptome.org/cracking-des.htm RSA DES Challenge II http://www.rsa.com/rsalabs/des2/ Cryptographic Algorithms http://www.cs.hut.fi/ssh/crypto/algorithms.html CRYPTO-GRAM A free monthly newsletter providing summaries, analyses, insights, and commentaries on computer security and cryptography. CRYPTO-GRAM is written by Bruce Schneier. Schneier is founder and CTO of Counterpane Internet Security Inc., the author of "Applied Cryptography" (John Wiley & Sons, Inc., 1996) and an inventor of the Blowfish, Twofish, and Yarrow algorithms. He served on the board of the International Association for Cryptologic Research, EPIC, and VTW. http://www.counterpane.com/crypto-gram.html Crypto++ is a fine, free crypto source code library. You can find download instructions on the Crypto++ home page at: http://www.eskimo.com/~weidai/cryptlib.html Crittografia e Sicurezza su Reti - UNISA http://www.dia.unisa.it/ads.dir/index.htm =========================================================================================== Il sistema GSM Il sistema GSM e' stato attivato ufficialmente in Italia nel'ottobre 1992, gli apparati sono Ericsson, Siemens, Italtel. (Omnitel usa Nokia) Il GSM e' un sistema cellulare simile al TACS, ma mentre quest'ultimo e' analogico il sistema GSM e' "digitale"; alcuni dei vantaggi del GSM sono: - possibilita' di effettuare e ricevere chiamate all'estero dove il sistema e' attivo. - Segretezza delle informazioni (non e' possibili ascoltare le chiamate) - Trasmissione dati - Il numero abbonato e altri numeri per l'identificazione non risiedono nel telefono come nel tacs, bensi' in una carta chiamata SIM (Subscriber Identity Module) - migliore qualita' della conversazione (ricostruzione dati persi) - capacita' di traffico molto piu' ampie di quelle tacs - molti servizi aggiuntivi (non elencati per ora) Gli svantaggi sono dovuti alla gestione del sistema che e' molto piu' complessa di quella tacs, problemi d'interferenza dovuti alla ripetizione dei cluster (gruppi di frequenze che identificano una serie di celle), poche frequenze disponibili, problemi ancora tra apparati di case costruttrici diverse, l'area di copertura di una cella ridotta al massimo a 35 chilometri, ecc. Struttura fisica del sistema mooolto riassunta e' la seguente: MSC (Mobile Services Switching Centre) | +-------+-------+ | | BSC BSC (Base Station Controller) | | +-------+-------+ +-------+ | | | | | BTS BTS BTS BTS BTS (Base Transceiver Station) Diverse radio basi (BTS) sono collegate ad un unico BSC che ha il compito di gestire handover, power control ed altre funzioni; diversi BSC sono collegati ad un unico MSC che gestisce, tra le altre, il collegamento tra la rete GSM e la rete pubblica. MSC e' collegato a database che gestiscono le informazioni degli abbonati che 'entrano nell'area' (VLR Visitor Location Register) o che si sono registrati nell'area (HLR Home.... che contiene inoltre informazioni relative all'abbonamento) Un telefono (MS) che si sposta in comunicazione tra un'area di copertura ed un'altra effettua un 'handover', il livello dell'handover puo' essere tra due BTS dello stesso BSC o tra due con BSC diverse, o tra due MSC; in quest'ultimo caso esistono ancora problemi (cadute). A Livello logico una serie di radio basi vengono raggruppate sotto un'unica area chiamata LA (Location Area). Ogni singola cella ha un nome univoco in tutto il sistema GSM esistente; la cella si identifica attaverso il CGI (Cell Global Identity) che contiene l'identificativo della nazione, rete, LA e numero cella. In ogni istante si conosce la posizione di ogni telefono presente sulla rete; il telefono in fase di accensione e di spegnimento si registra nella rete (vedremo poi come). alcuni fra i termini tecnici piu' ricorrenti: - idle telefono acceso in 'ascolto' - dedicated telefono in conversazione - assignment occupazione del canale voce, inizio conversazione - handover passaggio tra due BTS in fase di conversazione - release rilascio di una conversazione - location upd. in fase di accensione vengono inviate informazioni alla rete relative all'abbonamento. - power control la BTS dice al MS con quale potenza deve accedere nella sua area di copertura, questo limita il consumo delle batterie e crea minori interferenze - SMS short msg sono messaggi che gli utenti si possono scambiare senza attivare la conversazione - freq. hopping e' la possibilita' di 'saltare' da un canale all'altro all'interno di una singola cella DATI TECNICI Il sistema GSM e' un sistema cellulare, cioe' logicamente suddiviso in celle; di solito una cella e' composta da tre gruppi antenne messi 120 gradi l'uno dall'altro (3 BTS), ogni antenna e' composta da 2 RX che sono le piu' esterne per il diversity e una centrale TX (2 se esiste anche il tacs sullo stesso traliccio). Una serie di celle che contengano tutte le frequenze disponibili formano un cluster; i cluster si ripetono, per cui le frequenze vengono ripetute su tutto il territorio. Ogni singola BTS puo' trasmettere su piu' frequenze (vedremo in seguito) Ogni frequenza GSM ha una larghezza di banda di 200 KHz suddivisa logicamente in 8 parti, cioe' e' in grado di gestire 8 conversazioni contemporaneamente. La larghezza di banda viene sfruttata per trasmettere delle informazioni in pacchetti (frame), ogni frame contiene informazioni relative alle 8 call. La frame di base cioe' quella piu' piccola si chiama burst, e' composta da 142 bit + 14.25 bit di inizio/fine per un totale di 156.25 bits. La durata di ogni singola frame e' di 0.577 ms. Esistono vari tipi di burst, di correzione, di sincronizzazione, di accesso ecc; 51 burst formano frame di 235 msec che e' la configurazione standard; frame dello stesso tipo vengono raggruppate per creare le informazioni che circolano in ogni singolo canale logico del GSM. 51 burst formano una multiframe 26 multiframe formano una superframe 2048 superframe formano una hyperframe 890-915 MHz range usato da MS per Tx 935-960 MHz range usato da MS per Rx numero di frequenze : 124 numero di call = 124*8 Ogni singolo burst o frame viene chiamato TDMA burst o frame, questo perche' contiene informazioni relative alle 8 call suddivise per divisione di tempo (TDMA Time Division Multiple Access) In ogni stato del telefono (idle, dedicated ecc), il MS sa che tipo di informazioni andare a prendere dalle frames generali; queste informazioni relative ad un singolo stato del MS vengono raggruppate sottoforma di canali GSM. --Esistono canali di traffico (TCH) --Esistono canali di controllo (BCCH Broadcast Control Channel) SCH = Sync channel BCCH = broadcast, informazioni generali sulla BTS --Esistono canali di controllo comune (CCCH) PCH = paging channel RACH = random access channel, usato per richiedere accesso AGCH = Access Grant..., usato per accedere all'SDDCH --Esistono canali di controllo dedicati (DCCH) SDCCH = Stand Alone Ded. Control Channel, usato durante una call setup SACCH = Slow Associated ... (misure inviate dal telefono) FACCH = Fast Associated ... usato per alte velocita' La BTS invia al telefono il ritardo o l'anticipo con cui puo' accedere alle informazioni che circolano nelle frame (TA Time Advance) Il TA va da 1 a 63 che corrisponde a circa 35 Km di distanza dalla BTS; ogni valore indica i bit di ritardo con cui il MS deve accedere alla frame. In centrale esiste un parametro collegato al TA che se modificato limita la dimensione della cella; e' il valore massimo a cui TA puo' arrivare (TALIM) raggiunto il limite viene richiesto un handover incondizionato al telefono. Abbiamo visto che col range di frequenze 900 MHz disponibili otteniamo 124 frequenze utilizzate dal sistema; ogni frequenza ha 8 TS per cui 124*8 chiamate effettuabili contemporaneamente (in realta' sono meno) Ogni radio base, che chiamiamo BTS e' una cella, un sito e' invece composto da 2 o 3 BTS; per essere chiari: quando si vedono in giro tralicci con 3 gruppi di 3 o 4 antenne direttive, quello e' un sito composto da 3 radio basi o BTS e la copertura e' pari a 3 celle. A volte si identifica col nome cella l'insieme delle 3 celle formate da un sito. Ogni BTS ha la possibilita' di gestire piu' di una frequenza chiamate portanti, TI ne ha almeno 2 per radio base, in Grecia ne hanno anche 6 per radio base; se ampliamo il discorso a molti altri siti, si puo' capire quale lavoro di pianificazione di copertura e di assegnamento di frequenze esista dietro il sistema cellulare GSM. Se poi si riscontrano interferenze e, quindi, la variazione di alcune frequenze in uno o piu' siti, si devono ripianificare tutte le frequenze dei cluster adiacenti. ESEMPIO: ipotizziamo una BTS con 2 portanti portante 1 : 8 timeslot (da 0 a 7) 0 1 2 3 4 5 6 7 detta portante BCCH portante 2 : 8 timeslot (da 0 a 7) 0 1 2 3 4 5 6 7 detta 1 portante TCH portante 3 : 8 timeslot (da 0 a 7) 0 1 2 3 4 5 6 7 detta 2 portante TCH In teoria la BTS in questione puo' gestire 24 conversazioni contemporaneamente in realta' gestisce 22 conversazioni perche' il TS 0 della portante BCCH e' dedicato al canale di controllo BCCH, il TS 1 della portante BCCH e' dedicato al canale SDCCH. Vediamo i 5 canali piu' significativi del sistema GSM: - BCCH Canale di controllo sempre presente in idle mode; porta informazioni relative alla cella servente ed alle celle adiacenti: CGI (identificativo cella), TXPWR potenza che deve avere il telefono per accedere alla cella, DTX se trasmissione discontinua attiva ed altre info minori. - PCH Canale di paging, riporta tutti i telefoni che stanno ricevendo chiamate, se il telefono si accorge di essere presente nella lista si attiva la progedura di paging. - SDCCH Autentificazioni e registrazioni dei vari telefoni. - TCH Canale di traffico che trasporta tra le altre le informazioni della conversazione cioe' le parole crittografate. - SACCH Canale per scambio messaggi, misure di campo, Time Advance ecc. DESCRIZIONE CONCETTI GENERALI (Le varie procedure verranno descritte successivamente). ROAMING (solo in idle mode) Quando un telefono (MS) si sposta da una cella a cui e' connesso nell'area di copertura di un'altra cella, il telefono stesso decide di cambiare la frequenza (senza per questo avvisare la radio base). Questo e' il ROAMING. Il MS e' in continua misura delle celle adicenti che gli vengono inviate dalla BTS attraverso il canale BCCH. La procedura viene anche detta RESELECTION CAMBIO LOCATION AREA Il telefono monitorizza sempre durante lo stato di idle mode il canale BCCH, quando si accorge di essere passato su celle che hanno un identificativo dell'area diverso da quello che lui aveva in precedenza viene effettuata una procedura chiamata LOCATION UPDATING. REGISTRAZIONE Questa registrazione viene fatta per aggiornare i database connessi all'MSC di appartenenza, viene effettuata una procedura di rilascio con la vecchia stazione (detta IMSI detach) e una registrazione presso la nuova (IMSI attach). Esiste la possibilita' di imporre al telefono una procedura di registrazione periodica es. ogni 30 minuti; se non si ricevono informazioni dal MS durante questo periodo, l'MSC si impone una procedura di detach. PAGING Il telefono monitorizza sempre in idle mode il canale di paging; se si accorge che e' in arrivo una chiamata per lui parte la procedura di assegnamento del canale voce (chiamata). Il messaggio di paging non cambia all'interno di una stessa area. ASSEGNAMENTO Quando inizo una telefonata sia fatta dal MS che ricevuta, si attiva una procedura di assegnamento del canale voce detta ASSIGNEMENT HANDOVER Detto in parole povere e' la procedura di ROAMING effettuata in conversazione La conversazione passa su un'altra portante di un'altra BTS; non e' detto che venga mantenuto lo stesso timeslot. Viene attivata la procedura omonima. INTRACELL HANDOVER Dopo aver effettuato l'assegnamento del canale voce, e' possibile un nuovo assegnamento su un'altra portante della stessa cella. Se la BTS ha solo una portante, viene cambiato timeslot. FREQUENCY HOPPING Durante una conversazione puo' accadere di fare un HANDOVER; se il sistema gestisce il freq. hopping, l'handover puo' essere effettuato su un'altra portante della stessa BTS; il timeslot rimane lo stesso anche dopo l'avvenuto handover. Attualmente il sistema non lo gestisce. RELEASE E' la chiusura della conversazione. Viene attivata la procedura omonima. DISCONTINUOUS TRANSMISSION E' la trasmissione discontinua; il MS in comunicazione puo' comporre delle frame complete di informazioni sulla codifica della voce anche se tra gli utenti non vengono scambiate parole; questo occupa inutilmente il canale voce. La trasmissione discontinua durante una 'pausa' nella conversazione permette al MS di comporre delle frame di dimensioni ridotte. *Nel sistema GSM gestito da TI e' attiva la trasmissione discontinua. POWER CONTROL la BTS dice al MS in conversazione con quale potenza deve accedere nella sua area di copertura, questo limita il consumo delle batterie e crea minori interferenze. Questa informazione viene inviata ogni 480 millisec. TRASMISSIONE DATI La strasmissione dati e' a tutti gli effetti una conversazione tra due utenti, viene impiegato lo stesso canale voce; la differenza e' che viene abilitata una 'porta' (SAPI) dedicata alla trasmissione dati diversa da quella attivata per una conversazione normale. Di seguito le principali procedure radio tra MS e BTS suddivise in stati; ogni stato e' composto da diversi messaggi che non verranno spiegati. **E' fondamentale, spiegare prima alcuni concetti: Lo scambio di informazioni avviene su due livelli di messaggi; il primo chiamato LAYER 2 porta informazioni piu' a basso livello, alcune delle quali inerenti la struttura della frame inviata o ricevuta. Il secondo tipo di messaggio si chiama LAYER 3 e porta le informazioni sia dal MS alla BTS (detto UPLOAD), sia dalla BTS al MS (detto DOWNLOAD) Il LAYER 2, inoltre, puo' contenere al suo interno il messaggio di livello 3; sara' compito della BTS o MS scompattare il messaggio per elaborare il LAYER 3. LAYER 2 UP MS -> BTS (puo' contenere un LAYER 3 UP) LAYER 2 DOWN BTS -> MS (puo' contenere un LAYER 3 DOWN) LAYER 3 UP MS -> BTS LAYER 3 DOWN BTS -> MS Tutti i messaggi sono binari, noi riusciamo a leggerli in un formato stabilito dalle raccomandazioni GSM solo perche' la BTS o MS li scompattano. A livello radio non abbiamo accesso a tutte le informazioni (almeno... teoricamente...), quello che stabilisce l'MSC o il BSC non lo possiamo vedere; possiamo solo sapere se le varie procedure sono state accettate (in alcune procedure e' implicita la decisione del BSC o MSC, vedi handover completato o altro). La stessa presenza o meno del LAYER 2 o 3 nella sequenza dei messaggi in una qualsiasi procedura indica se si sta svolgendo correttamente oppure no. Le raccomandazioni GSM dividono una procedura in tre fasi: 1. RR CONNECTION connessione radio stabilita (composta da vari messaggi a seconda del tipo di procedura) RR sta per radio resource 2. MM CONNECTION connessione di livello 2 stabilita (cioe'se tra MS e BTS esiste realmente uno scambio di informazioni) MM sta per mobility menagment 3. EVENTO passata la fase RR e MM viene identificata la procedura A qualsiasi livello puo' esserci un failure. IDLE (IL TELEFONO NON E' IN CONVERSAZIONE) Questa non e' una procedura; e' uno stato del telefono. Il telefono analizza il canale di paging per vedere se una chiamata e' in arrivo; contemporaneamente vengono inviate al telefono informazioni relative alle celle adiacenti. LOCATION UPDATING Questa procedura viene attivata durante l'accensione del telefono oppure quando si passa da un'area di copertura (Location Area) ad un'altra 1- il telefono e' nello stato di idle 2- UP viene richiesto un canale (channel request) 3- DOWN viene assegnato (non realmente ancora) un canale (immediate assignment) 4- UP viene attivata la procedura location updating (request) (stabilito IMSI) 5- connessione a livello 2 6- DOWN location updating accettata o reject 7- UP scollegamento richiesto (channel release) 8- il telefono e' nello stato di idle ASSEGNAMENTO - INIZIO CONVERSAZIONE MS -> BTS 1- il telefono e' nello stato di idle 2- UP viene richiesto un canale (channel request) 3- DOWN viene assegnato (non realmente ancora) un canale (immediate assignment) 4- connessione a livello 2 5- viene stabilita l'identita' del telefono IMEI e algoritmo di codifica 6- se tutto e' andato bene in DOWN viene confermato il servizio (CM service) 7- viene emesso un record di informazioni (setup) che contiene anche il numero del telefono da chiamare 8- DOWN la radio base conferma l'assegnamento del canale voce 9- UP il telefono conferma assegnamento del canale voce 10- connessione a livello 2 per controllare connessione 11- sono in conversazione ASSEGNAMENTO - INIZIO CONVERSAZIONE BTS -> MS 1- il telefono e' nello stato di idle 2- DOWN arriva un paging per il telefono 3- UP viene richiesto un canale (channel request) 4- DOWN viene assegnato (non realmente ancora) un canale (immediate assignment) 5- connessione a livello 2 6- viene stabilita l'identita' del telefono IMEI e algoritmo di codifica 7- se tutto e' andato bene in DOWN viene confermato il servizio (CM service) 8- viene emesso un record di informazioni (setup) che contiene anche il numero del telefono da chiamare 9- DOWN la radio base conferma l'assegnamento del canale voce 10- UP il telefono conferma assegnamento del canale voce 11- connessione a livello 2 per controllare connessione 12- il telefono squilla DEDICATED (CONVERSAZIONE) Questa non e' una procedura; e' uno stato del telefono. Ogni 480 millisec. il telefono manda in UP le misure delle celle adiacenti, TA, TxPower, canale, bsic, timeslot, livello, qualita' (Bit Error Rate) ecc. la BTS invia sempre con la stessa tempistica informazioni relative al segnale ed alla cella ricevuta, CGI, Power Control, Tipo di trasmissione ecc; in piu' la BTS invia il valore di due contatori chiamati rlink; il primo indica sempre il valore massimo del contatore impostato in centrale; il secondo viene decrementato di una unita' se in UP il messaggio non e' stato correttamente decodificato, mentre viene incrementato di due unita' fino al valore massimo se il messaggio in UP viene codificato. Il secondo contatore detto 'current rlink counter' se raggiunge il valore 0 fa cadere la conversazione. HANDOVER 1- il telefono e' in conversazione (dedicated mode) 2- la BTS si accorge che uno dei criteri per handover (qualita' cattiva, segnale debole, distanza dalla BTS che supera i limiti impostati in centrale ecc) si e' verificato, di conseguenza comanda al telefono di effettuare handover (handover command DOWN) 3- UP il telefono converma la ricezione del comando 4- UP il telefono invia il messaggio di handover completato o fallito 5- Connessione a livello 2 con la nuova cella se handover completo oppure con la vecchia cella se handover fallito. Se la connessione a livello 2 con la nuova cella fallisce, si tenta la connessione con la vecchia cella; se la connessione con la vecchia cella fallisce, cade la conversazione 6- il telefono continua la conversazione sulla nuova cella oppure rimane sulla vecchia se l'handover e' fallito RELEASE RICHIESTA DA MS (chiamante che chiude non Microsoft!) 1- il telefono e' in conversazione (dedicated mode) 2- UP messaggio di disconnect dal telefono 3- DOWN messaggio di release 4- UP il telefono invia release completata 5- DOWN viene inviato comando di channel release 6- UP il telefono conferma abbandono di canale (disconnect) 7- telefono nello stato di idle RELEASE RICHIESTA DA BTS (chiamato che chiude) 1- il telefono e' in conversazione (dedicated mode) 2- DOWN messaggio di disconnect dalla BTS 3- UP messaggio di release 4- DOWN release completata dalla BTS 5- DOWN viene inviato comando di channel release 6- UP il telefono conferma abbandono di canale (disconnect) 7- telefono nello stato di idle I ponti radio utilizzati per trasmettere fasci di canali telefonici per giunzione tra centrali interurbane sono di due tipi: - analogici: convogliano con modulazione SS-FM (single sideband a modulazione di frequenza) piu' fasci di canali (normalmente l'untia' di misura e' il supergruppo pari a 60 canali telefonici) multiplati a divisione di frequenza. - digitali: convogliano con modulazione normalmente QAM (come i modem) fasci di canali telefonici multiplati secondo la gererarchia plesiocrona (parola difficile che significa con sincronismo asservito ad un orologio master) tipica della multiplazione PCM. Bande di frequenza standardizzate CCIR e CCITT ed assegnate al Gestore pubblico in Italia: Ponti Radio Analogici 1350 - 1650 MHz utilizzata da ponti radio di piccola capacita' (4 supergruppi) negli anni passati da ASST ora confluita in TI. Utilizzata anche dalla RAI per iponti di trasfimento dei canali audio e musicali tra le varie sedi regionali. 1700 - 2300 MHz dovrebbe essere ormai completamente smantellata, era usata per ponti di piccola capacita' (1 supergruppo) da SIP e RAI. 3600 - 4200 MHz utilizzata dalla rete primaria nazionale con fasci radio ciascuno da 16 supergruppi. 5925 - 6450 MHz ponti radio a grandissima capacita' da 45 supergruppi utilizzato solo dalla ex-ASST ora TI. 6575 - 7125 MHz per tratte comuni a piu' direzioni normalmente sooporta fasci radio a 5 supergruppi. 7125 - 7445 MHz riservata negli anni passati a SIP per la rete secondaria. 7445 - 7750 MHz come sopra. 10700 - 11700 a disposizione ma non utilizzata. Ponti Radio Digitali gamma 7 GHz modulazione QAM con costellazione a 64 punti usato per fasci 140 Mbit/sec e piu' raramente per fasci a 70 Mbit/sec gamma 11 GHz modulazione QAM con costellazione a 16 punti usato anche questo per fasci a 140 Mbit/sec gamma 13 GHz modulazione PSK a 4 fasi per fasci a 8 o 34 Mbit/sec gamma 18 GHz modulazione PSK a 2 fasi per fasci a 2 o 8 Mbit/sec I ponti radio normalmente devono poter avere visibilita' ottica e di conseguenza le tratte non possono coprire grandi distanze. Mediamente vengono ripetuti ogni 50/60 Km e quindi una dorsale nazionale da nord a sud comporta la costruzione di molte stazioni ripetitrici. La saturazione delle gamme di frequenza, l'accresciuta richiesta di bande trasmissive ed in notevoli progressi nel campo della fibra ottica ha reso i ponti radio piu' costosi e meno affidabili dei sistemi in fibra che stanno progressivvamente sostituendo le dorsali primarie. I canali su ponte radio presentano qualita' inferiore rispetto a canali in cavo o in fibra ottica. Evoluzione dei sistemi mobili UMTS: (ke e'???) UTMS: Universal Mobile Telecommunication System, portera' l'utente delle telecomunicazioni nella nuova societa' dell'informazione. Portera' informazioni, disegni e grafici direttamente alla gente e fornira' l'accesso alla prossima generaziona basata sui servizi d'informazione. Muovera' le comunicazioni mobili e personali verso i sistemi di seconda generazione che gia' stanno portando masse di mercato verso servizi a basso costo. Prospettiva ideale A medio/lungo termine UTMS dovrebbe unificare, integrandoli, i diversi sistemi esistenti con un'unica interfaccia radio che consenta l'accesso a reti diverse, pubbliche o private, attraverso un unico terminale. Prospettiva realistica Visione orientata al mercato. Continuita' con l'attuale tendenza che prevede lo sviluppo di sistemi non necessariamente unificati a livello di interfaccia radio, ma ritagliati sulle esigenze specifiche dei diversi livelli di utenza Il sistema UMTS ú Servizi voce e dati per utenti mobili in qualunque tipo di ambiente (indoor outdoor, urbano/rurale); con le stesse potenzialita', in termini di servizio e penetrazione di mercato, offerte dai sistemi attuali. ú Ampio spettro di servizi offerti con velocita' fino a 2Mb/s, anche in ambienti ad alta densita' di traffico. ú Servizi a bit-rate variabile con alto grado di flessibilita'. ú Estesa varieta' di terminali: dal personal communicator alle workstation mobili. ú Ambiente multi-operatore e con copertura mista (macro, micro e pico celle) per garantire il servizio ad utenti con caratteristiche di mobilita' e di traffico diverse. ú Roaming nazionale, internazionale e globale. Migrazione verso UMTS ___ | MOBITEX|-------------+ pacchetto dati ------ ___| +----------------------------->| | | | ___ | | | circuito globale a bassa densita' | | TACS/GSM/DCS |------------------------------------------->| UMTS | ___| | | +--------------->| | ___ | +->| | | circuito globale ad alta | densita' | ------ CT2/DECT |---------------------------+ | ___| | | ___ | | distributivo | ERMES |-----------------------------------------+ ___| Migrazione verso UMTS: Protocolli radio GSM ú canali di segnalazione associati a velocita' fissa. ú capacita' del canale di traffico ridotta in modo non controllato a causa di segnalazione "fast". ú nessuna possibilita' di connessioni "multiple bearer" o asimmetriche. ú corrispondenza biunivoca tra chiamata e connessione. ú gestione delle risorse radio a livello 3. DECT ú canali di segnalazione associati a velocita' fissa. ú capacita' del canale di traffico ridotta in modo prefissato. ú separazione tra controllo e dati d'utente. ú separazione tra chiamata e connessione. ú gestione delle risorse audio a livello 2. UMTS ú canali di seganalazione associati a velocita' variabile. ú capacita' del canale di traffico non ridotta (o ridotta in modo controllato) a causa della segnalazione. ú separazione tra controllo e dati d'utente. ú separazione tra chiamata e connessione. ú gestione delle risorse radio a livello 2. Migrazione verso UMTS: Handover GSM ú Mobile assisted. ú Backward handover. ú Hard handover. ú Handover tra entita' di rete per mantenere la continuita' della conversazione. DECT ú Mobile controlled. ú Forward handover. ú Seamless handover. ú Handover tra livelli di protocollo per mantenere la continuita' della conversazione. UMTS ú Network managed: ú Network evaluated. ú Mobile evaluated. ú Forward/backward handover. ú Soft handover + microdiverity. ú Seamless handover per mantenere la continuita' e migliorare la qualita' della conversazione. Migrazione verso UMTS: Servizi dati GSM ú servizi dati solo simmetrici ú velocita' fino a 9.6 kb/s ú una sola connessione per ogni chiamata ú chiamate multiple su connessioni indipendenti ú variazione lenta della velocita' DECT ú servizi dati simmetrici e asimmetrici ú velocita' fino a 384 kb/s (oltre 730 kb/s unidirezionali teorici) ú connessioni multiple ú chiamate multiple con connessioni condivise ú variazione lenta della velocita' UMTS ú servizi simmetrici e asimmetrici ú velocita' fino a 2Mb/s ú connessioni multiple con connessioni condivise ú variazione veloce della velocita' Migrazione verso UMTS: Servizi dati a velocita' variabile GSM ú variazione solo da parte dell'utente (o del terminale) ú variazione all'interno della singola connessione ú variazione lenta ú nessun impatto sulla disponibilita' delle risorse radio DECT ú variazione da parte del sistema e dell'utente ú variazione all'interno della singola connessione con instaurazione/rilascio di bearers piu' modificata della larghezza di banda ú variazione lenta ú impatto sulla disponibilita' delle risorse radio solo nel caso di instaurazione/rilascio dei bearers UMTS ú variazione da parte dell'utente e del sistema ú variazione all'interno della singola connessione con instaurazione/rilascio di bearers piu' modificata della larghezza di banda ú variazione veloce (frame by frame) ú impatto sulla disponibilita' delle risorse radio Se qualcuno ha ulteriori curiosita' domandate pure... in mail! Cya. -=Nick1=- -=SPPGroup=- =================================================================================================== Le card , ma come sono fatte? Tutti voi sapete cosa sono le card o,se non lo sapete,adesso lo imparate! Le card sono tessere di plastica , di forma rettangolare , che al loro interno incorporano un chip in grado di dialogare con il mondo.Esistono molteplici tipi di card e molteplici metodologie di accesso ai dati in esse contenute , vediamo di spiegare brevemente come sono fatte e a cosa servono. Gli Standard Come ogni cosa che si rispetti anche le card hanno uno standard al quale adeguarsi. In specifico , lo standard citato è il numero 7810 dei documenti creati dall' ISO (International Standard Group , www.iso.ch).Questo documento specifica la dimensione della tessera e tutti i valori di flessione,resistenza al calore ad agli urti per questo tipo di carta.Invece lo standard ISO 7811 spiega quali sono le aree che possono avere caratteri in rilievo e dove può essere messa la banda magnetica (se necessaria).Ma quello che ci interessa davvero è l'ISO7816 che ci spiega la dimensione dei contatti, la posizione dei contatti che altro non sono che i pin di un'integrato. Le caratteristiche fisiche Le dimensioni sono le seguenti: lunghezza: 85 millimetri larghezza: 54 millimetri spessore: 0.8 millimetri Sono realizzate in due materiali : ABS e PVC. Le differenze fra un mateiale e l'altro sono semplici: ABS :non può essere stampato ma è riciclabile PVC :non può essere riciclato ma è stampabile Inoltre la posizione del chip è determinata dalle applicazioni che si vogliono realizzare e viene identificata con ID-1 ID-2 ID-3 ed ID-000.Quelle più diffuse sono le ID-1 e le ID-0.Nella posizione ID-1 il chip è posizionato al centro mentre nell'ID-0 (detta anche ID-000) il chip è posizionato al centro , ma di una piccola tesserina plastica (detta anche SIM/SAM).Non è inconsueto trovare una tessera ID-1 che incorpora una ID-0 , vedete l'esempio delle schede GSM che a seconda del telefono possono essere usate in full-size oppure , staccandole, in formato ID-0. Le differenze fra le varie card Esistono come ho detto molti tipi di card, lcune basate su microprocessori che possono dialogare con l'esterno,ed è quello che interessa a noi!Infatti, se una persona disponesse di un programmatore di chipcard (dette anche smartcard) potrebbe farsi le proprie applicazioni basate su di essa ,ma non c'è bisogno che ve lo suggerisca io , vero? Bene, adesso , a voi i tipi principali di card: -contact smart card -contactless smart card -combi card Le contact smart card sono le classiche card stile GSM che comunicano con le altre apparecchiature tramite contatto fisico, me contactless invece hanno incorporato un trasponder che comunica quindi via radio mentre le combi card eseguono entrambi i tipi di connessione. Come possono venire lette e scritte le card? Tutto dipende da come sono state create, infatti sono molteplici i metodi di lettura e di scrittura. In linea di massima le card possono essere letta da: -tutti Questo tipo di card non ha password e poò essere letta da tutti, un esempio italiano è la card della quale sono dotati i malati di schemio in cura a Napoli che hanno una card con tutta la loro storia medica. -solo dal possessore Metodologia applicata massicciamente alle card GSM e richiede l'immissione del codice PIN (Personal Identification Number).Dopo un numero X (spesso 3) di tentativi infruttuosi la card si blocca e chiede un codice ulteriore di sblocco. -solo da terze parti Esempio classico è quello delle carte di credito a scalare.Quando la tessere è esaurita solo chi la ha emessa è in grado di ricaricarla (in teoria:_] ) E adesso viene il bello ovvero come può essere configurata una card: -in sola lettura (non permette l'aggiornamento) -in solo aggiornamento (non permette la lettura) -in sola aggiunta (non permette la lettura nè l'aggiornamento , solo la riscrittura totale) -inaccessibile (non ci si potrebbe fare nulla...) Tutti questi diversi stati di lettura e scrittura sono ovviamente comandati dal micro che è integrato nella carta , che vedremo in specifico più avanti. Le diverse metodologie di incapsulamento dei chip nelle card Beh, non è che ci sia molto da scegliere, le metodologie sono solo due! Sono conosciute con il nome di 'Wire Bonding' e di 'Tape Automatic Bonding'. Qui di seguito vi schematizzo la metodologia del 'Wire Bonding': contatti dorati / | \ / | \ ------| ______ ________ _______ | - lato con contatti | |_* \ * |___| * / * _| | | | \--- / \---/ | | | |______________________| | |__________________________________| nicchia ricavata dalla card GLi asterischi sono la superficie adesiva alla quale aderiscono i contatti , il rettangolo al centro è il micro fissato anche lui con adesivo , le linee che partono dal micro e che si collegano ai contatti dorati sono i fili di connessione del micro con le piazzole. La metodologia del 'Tape Automatic Bonding' invece prevede la seguente disposizione del chip: (------) strato di plastica protettivo _________ _________ contatti dorati ------------ * * ----------- | card | --------- | card | ------------ | | ----------- --------- chip Come sopra , gli asterischi sono l'adesivo del chip. Sostanzialmente le metodologie non sono molto differenti come funzionalità ,ma si tende a preferire la tecnica del Wire Bonding per il semplice fatto che il chip è molto più protetto dagli urti rispetto al Tape Automatic Bonding, dato che resta dietro ad uno dei contatti e non protetto solo da un pochino di plastica protettiva. La posizione dei contatti elettrici Come già detto i contatti elettrici sono 8 e sono in posizione standard.Qui di seguito vi riporto un paio di misure per le card che vengono usate per i telefoni GSM : -------- alto | | 1 5 lato inserimento | 2 6 | 3 7 | 4 8 | -------- basso I contatti dal numero 1 al numero 4 rispetto al lato inserimento sono distanti 11 mm.Il contatto 1 rispetto al lato alto è alla distanza di 18.02 mm e tutte le piazzole sono di forma quadrata aventi 2 mm di lato. La funzione dei contatti elettrici Contatto 1: VCC, consente di applicare tensione alla scheda, normalmente +5V con scostamento del 10% in + o in -.L'amperaggio massimo secondo lo standard Iso7816-2 è di 200mA ma le schede attuali consumano al massimo 15mA. Contatto 2: RST, reset del micro,il tipo di segnale cambia a seconda del chip . Contatto 3: CLK, qui viene applicato il segnale di clock di riferimento per la sincronizzazione. Contatto 4: Riservato ad applicazioni future. Contatto 5: GND, massa comune , sia elettrica che logica. Contatto 6: VPP, ormai inutile, ma viene conservato per la compatibilità con il passato, il quanto le prime sim usavano una memoria EEProm che necessitava di una seconda tensione (+12,+21 o +25) per operare correttamente. Contatto 7: I/O, contatto di input/output per le informazioni elaborate dal chip. Contatto 8: Riservato ad applicazioni future. Il metodo di trasmissione dei dati fra la card ed il lettore Come da regolamentazione ISO il metodo di trasmissione è sincrono in half-duplex a caratteri.Questo metodo è siglato dall'ISO come T0.Invece la metodologia asincrona in half duplex a blocchi prende il nome di T1.Tutte le card che usano metodi di trasferimento dati diverso hanno come sigla del metodo T14.Ciò vuol dire che le card T14 non sono compatibili con le direttive ISO7816, ovvero che sono card proprietarie (sviluppate da chi vende hardware particolare, in modo da dovervi sempre rivolgere ad un unico fornitore oppure per applicazioni specializzate tipo card ad uso medico). Come si leggono? Lo so che volevate solo questo! Beh, di hardware in commercio ce n'è parecchio, ma il migliore è sempre quello autocostruito... Quindi ,io vi passo i link , poi sta a voi dilettarvi! Faq sulle smart card: http://www.ioc.ee/atsc/faq.html Dumb Mouse , lettore scrittore di smart card: http://cuba.xs4all.nl/hip/dumbmouse.html Smart Card Industry association Website: http://www.scia.org/ PC Smart Cards: http://www.cyberflex.austin.et.slb.com/cyberflex/pcsc/pcsc.html Goran Vlaski : di tutto , di +! http://vlaski.virtualave.net/ Tanto per iniziare... Poi, se volete magari saperne di +, beh, di programmatori ne è piena la rete,ma per 'farsi le ossa' vanno bene anche quelli per il satellite...Magari su http://neworder.box.sk c'è qualcosa.... Ma io no vi ho detto nulla, ok? Bene, per adesso ragionateci un po su ,magari in futuro vi spiego qualcosina di nuovo , ok? Buon divertimento, RigoR MorteM, SPP Webmaster , www.spippolatori.com , rigormortem@spippolatori.com ================================================================================================== Idee per una backdoor by Devil SPP Member L'IDEA DI BASE --------------- Piccola domanda: quale' il problema principale delle backdoors ? Prima risposta: Il fatto che le porte su cui sono attive sono facilmente identificabili. Giusto ! Ma a questo una soluzione ,seppure non definitiva al 100% c'e' ( eheh sapete a cosa mi riferisco no ? ). Seconda Risposta: L'eseguibile della backdoor e' visibile nella lista dei tasks. Piu' che giusto, anzi direi che e' proprio questo il punto. Ok, ok siamo d'accordo che esistono dei piccoli trucchi per nascondere il processo agli occhi del task manager di win9X ma la cosa non e'vera per WinNt, e comunque basta un piu' serio programma di analisi di processi (il PVIEW ad esempio) per rivelare l' "ospite indesiderato" in tutta la sua identita' di semplice programma Win32. Cosa fare in questo caso ? La soluzione a cui si puo' pensare, in prima battuta e': scrivere un kernel driver (KD). I KD, una volta installati, girano al piu' alto livello di privilegio , non appaiono nella lista dei task ed hanno accesso completo a tutte le risorse hardware della macchina. Ma (tutte le belle cose hanno un ma) scrivere un KD non e' molto agevole, soprattutto non e' trasportabile da WinNt a Win9X a causa delle profonde differenze "interne" tra i due SO. E allora ? Chiudiamo il PC ed andiamo a pescare ? No, o meglio , si, se questo vi aiuta a pensare ma poi si ritorna alla tastiera a fare le prove. Prova qui, incarta li' una soluzione appare, seppure in forma sbiadita ai nostri occhi: DLL. Ebbene si, DLL, praticamente il 98% della infrastruttura dei sistemi Micro$oft. Pensate un po': socket api, Win32 api, COM (ocx,vbx ecc..) , system api tutto realizzato con librerie a link dinamico e tutte , rigorosamente , invisibili al task manager. Vabbe' e allora ? Come costringo un programma a caricare una DLL di cui non sospetta nemmeno l'esistenza ? Beh di sistemi ce ne sarebbero basta dare un' occhiata ai libri ma si basano tutti, piu' o meno liberamente, su un semplice algoritmo: 1) Lancio un eseguibile scritto da me (Eseguibile A) 2) questo eseguibile lancia l'eseguibile da forzare (Eseguibile B) 3) prima che l' eseguibile B cominci a girare l'eseguibile A "inietta" una DLL nello spazio di indirizzamento di B. (trascuro come si fa tanto non e' rilevante) Questo metodo e' ottimo. Gia', e' ottimo se uno deve scrivere una DLL per spiare le chiamate di sistema di un programma, oppure se deve scrivere un debugger, ma a noi non serve a un casso. Perche' ? Supponiamo di aver scritto una backdoor, in forma di DLL, e di volerla iniettare in un programma. Primo inconveniente: dobbiamo scrivere un exe che inietti la DLL e quest'ultimo, essendo un semplice EXE, sara' visibile nella lista dei task. Secondo inconveniente (molto piu' grave del primo): finche' l'exe "iniettante" e' in esecuzione la backdoor funziona che e' una meraviglia. Appena lo chiudiamo, perche' non vogliamo essere visibili al task manager, il sistema scarica anche la DLL iniettata mandando a puttane la nostra backdoor ed anche il programma ospitante. Ok, ritorniamo a pescare, pensiamo, ci lasciamo scappare dalle 2 alle 3000 trote ma, alla fine, la soluzione e' chiara e limpida: Shell Extensions. Vi vedo perplessi. Ma come non sentite una musica trionfale nelle orecchie ? Ho detto proprio Shell Extensions, quel meccanismo un po' oscuro per cui si puo' modificare il comportamento di explorer per fargli visualizzare un menu' di contesto (tasto destro) "personalizzato". Ad esempio Winzip usa questa tecnica in modo che se voi da Gestione Risorse andate su un file e premete il tasto destro appaiono, oltre alle voci standard previste da Micro$oft, anche delle voci in piu' tipo "Aggiungi all' archivio ZIP", o "Crea un nuovo ZIP". Se un comune mortale tenta di avvicinarsi alla documentazione MSDN per capire meglio il meccanismo rimane annichilito dalla mole di argomenti di cui (teoricamente) dovrebbe essere a conoscenza, primo fra tutti COM (Component Object Model). A questo suono, che purtroppo nulla ha a che fare con le seriali, molti programmatori provano un senso di disagio che sfocia in violenza repressa e manie di persecuzione. Ma (i "ma" hanno a volte anche risvolti positivi !) fondamentalmente una ShellExtension, depurata da tutto il surplus dei termini che tanto piacciono ai commerciali, e' una DLL. Esattamente, e' una DLL che esporta almeno 4 funzioni : DllRegisterServer() DllUnregisterServer() DllGetClassObject(...) DllCanUnloadNow() Queste funzioni sono l'interfaccia standard che explorer si aspetta da una Shell Ext. Le prime due sono ovvie. Sono funzioni speciali che un eseguibile (tipo regsvr32) deve chiamare per registrare la DLL come ShellExtension (vedremo dopo come si realizza). La terza funzione e' il punto di ingresso della Shell ovvero la prima funzione che explorer chiama appena caricata in memoria. Dovrebbe restituire un' interfaccia che poi explorer chiamera' per realizzare l' estensione vera e propria, ma ovviamente puo' (e deve) essere utilizzata per tutto un altro scopo: sara' il punto di ingresso della backdoor. La quarta e' la piu' importante, almeno per noi, indovinate che fa ? Esatto , viene periodicamente chiamata da explorer. Se restituisce S_OK la Shell Ext viene prontamente scaricata dalla memoria. Se restituisce S_FALSE no. La sentite la musica adesso vero ? COME SI REGISTRA UNA SHELL EXTENSION ------------------------------------ Una volta registrata la ShellExt entra "ufficialmente" a far parte del circuito "pezzi aggiunti , di pubblica utilita'", nel senso che viene chiamata diligentemente dal sistema tutte le volte che ne ha bisogno. Ma prima di questo vediamo i passi necessari per fare in modo che tutto cio' accada. Innanzitutto bisogna generare un UUID per la nostra creatura. La cosa si realizza facilmente con il UUIDGEN.EXE gentilmente offerto da Micro$oft. Basta lanciarlo una volta ed il programma generera' un numero apparentemente casuale, lunghino, e unico in tutto il mondo. (confesso che la prima volta che lanciai questo programma ero scettico sulla effettiva unicita' del numero. Poi negli anni ho constatato che la cosa e' effettivamente vera... e nemmeno difficilissima da realizzare) Questo ID e' il cuore del meccanismo ad interfacce di COM. E' il numero (esatto quelle sfilze di numeri nei registry) che identifica un componente OLE. Una volta ottenuto,chiamiamolo LaNostraChiaveID, bisogna aggiungere delle chiavi ai registry: HKEY_CLASSES_ROOT\CLSID\LaNostrachiaveID All' interno di questa chiave inseriamo il nome della shell (se vogliamo) sottoforma di REG_SZ HKEY_CLASSES_ROOT\CLSID\LaNostrachiaveID\InProcServer32 Allinterno 2 chiavi: Default il percorso e il nome della DLL (REG_SZ) ThreadingModel Apartment (REG_SZ) HKEY_CLASSES_ROOT\*\shellex\ ContextMenuHandlers\LaNostrachiaveID Questo permettera' al sistema di sapere che c'e' una shell extension con id dato. A questo punto la shell e' registrata cosa succede ? Appena l'utente premera' il tasto destro su un file, magari per saperne le proprieta', explorer analizzera' la chiave shellex per caricare tutte le eventuali estensioni del menu' di contesto presenti, tra cui anche la nostra. La prima funzione invocata e' DllGetClassObject. Teoricamente dovremmo restituire un' interfaccia che successivamente explorer possa chiamare. Invece creiamo un thread con il codice della nostra backdoor e restituiamo CLASS_E_CLASSNOTAVAILABLE. Avuta questa risposta explorer tentera' di scaricarci dalla memoria ma prima chiamera' DllCanUnloadNow, un po' come dire :"scusa posso cacciarti via perche' non servi a nulla ?". Noi ritorneremo un S_FALSE ovvero "non rompere i coglioni, non vedi che sono occupato ?". La stessa risposta la daremo sempre, tutte le volte che explorer chiamera' questa funzione e lo fara' ad intervalli regolari (se non vado errato, salvo impostazioni speciali possibili, ogni 10 minuti circa) Quindi explorer non si liberera' piu' della DLL a meno che l'utente non faccia uno shutdown o un logoff (un kill di explorer). Carino vero ? VANTAGGI E SVANTAGGI -------------------- Beh i vantaggi non sono pochi, alcuni li abbiamo gia' intuiti: 1) La backdoor non e' visibile come processo attivo perche' in realta' il processo attivo e' explorer. Questo e' molto confortante per l'utente. 2) L'installazione e' semplicissima basta chiamare le funzioni stesse della DLL. 3) Un eventuale personal firewall individuerebbe la porta TCP (o UDP) uscente come richiesta da explorer. Una cosa non molto comune certo, ma comunque piu' rassicurante che un eventuale eseguibile di cui l'utente non ha mai sentito parlare. E poi si confonde spesso EXPORER con IEXPLORER (eheh) 4) Si nasconde piu' facilmente di un qualunque programma che si installi nella chiave RunAsService perche' il nascondiglio ce lo fornisce il registry con le sue diverse centinaia di ID. Ci sono tuttavia alcuni punti deboli di cui bisogna essere consci: 1) La shell non e' attiva da subito ma solo se l'utente preme, almeno una volta il tasto destro su un file (cosa abbastanza comune in verita'). 2) E' visibile con un programma che fa la lista delle DLL di un processo. (quindi okkio a dargli un nome rassicurante) 3) Si chiude quando l'utente fa il logoff dal desktop. (questa cosa forse con un po' di applicazione si puo' evitare..) 4) Sotto NT se l'amministratore e' un maniaco della sicurezza puo' prevenire il caricamento di una shell extension diciamo cosi' "non trusted". E' possibile infatti creare una chiave (EnforceShellExtensionSecurity) in HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer e settarla ad 1. A quel punto il sistema carichera' solo le shell extensions presenti in HKEY_LOCALMACHINE\Software\Microsoft\Windows\CurrentVersion\ShellExt\Approved a cui solo l'amministratore ha accesso, ma ho uno spunto di riflessione su cui vorrei concentrare la vostra attenzione. Questa protezione fornita da Microsoft (che ha intuito il problema) mi sembra francamente labile: Alzi la mano chi prima di installare ha mai controllato le shell extensions (peraltro nascoste nel setup) di un programma. Credo nessuno: se devo installare Office mi loggo come amministratore e lancio Setup. E se poi office e' truccato che ne so ? Spero nella forza degli AV. (male ,molto male :)) Forzare il sistema con questo livello di sicurezza significa impazzire ogni volta dietro ai messaggi di errore (a volte incomprensibili) dei programmi di setup perche' non sono riusciti ad installare completamente il software, risultato netto: questa feature e' disabilitata per default in tutti i sistemi NT (beh si a meno che non avete lanciato qualche programmino di settaggio automatico al security level C2) IL PROGRAMMA DI ESEMPIO ----------------------- Per mostrare la cosa ho scritto un programmello semplice che fa tutte le cose che vi ho esposto. La DLL si chiama ShellDoor e puo' essere registrata e deregistrata con regsvr32.exe . Per registrare basta digitare da riga di comando: regsvr32 ShellDoor. RegSvr32 chiamera' la funzione DllRegisterServer esportata e se questa restituisce S_OK aprira' una finestra di avvenuta installazione. Una volta registrata verifichiamo l'effettivo funzionamento. Apriamo Gestione Risorse, andiamo su un file e premiamo tasto destro. La ShellDoor entrera' in azione e si mettera' in ascolto sulla porta 2205. Niente di pericoloso tranquilli. L'unico scopo e' quello di stampare un messaggio di benvenuto. Per vederlo basta fare un Telnet 127.0.0.1 2205. Prontamente vedrete la risposta e la disconnessione un po' come il quote of the day.. Quando ci saremo stufati per toglierla bastera' chiamare regsvr32 /u ShellDoor e fare il logoff dalla macchina (Chiudi sessione e accedi come altro utente). In questo modo, distruggendo l'istanza di explorer e togliendo le chiavi di registrazione dal registry la shell sara' disattivata. Creare una backdoor autoinstallante che utilizza questa tecnica e' un gioco da ragazzi (soprattutto se si utilizza lo SI2 di Master) ma non vi fate prendere troppo la mano ... non vorrei vedermi costretto a inviarvi arance e limette nascoste ;-) Mi pare piu' o meno tutto. Per dubbi, perplessita' parolacce e insulti (non esagerate sono suscettibile :-)) il mio indirizzo lo conoscete Saluti Devil PS: non sono mai andato a pesca.. -----BEGIN PGP PUBLIC KEY BLOCK----- Version: PGPfreeware 6.0.2i mQGhBDcLDXsRBADN3pfrTF1wyHr3i2mSb6jbmltz+v1peHH7QR2U4w1ol35LZrad 6eFJ8pDomYsB5EzOvuNvcBW85lYNuPt0sBzP7XM40nR+3KRFVRyx8iXWpwVySCxi GNHE8KlyqOUjkKvTq5ONT5okLKxteg+UP1SWqXPDWE2gNX/mrQb9i+JINwCg/6fW i7gfN/BQ3ZmB/AAH51l9AjED/j/1+LvDSM4+COza45032fDw4XJqirDez9L9WbVB Tkakook/TVvZYgSP2Fjl0S3bGcPmxhoWDDUhkf5y1zDjORh5LlQJsy2oU0xty6Ts 8Phugs3i663sbqoiuDm4o3t3INcpGclJEcMdSzCV9vpodCM/O/dvuOx1BnPuzAO0 dApGA/jVq7eElzsFpwvXfjmBVi2+/3YAtTqXRc25qzMyFF69O8LNCBOSrdRYgp/V AIrmTydf8lrZ+DvKKgvowW5ugBTPU4/8O50EFFu22F7qzmJg/zBVYVZJNKgZqn/x Uv2lyK1EGx/q3e0+MPFeYLCOsexYhcVjtjx/ppyPctjQm9bHtBtEZXZpbCA8ZHNk ZXZpbEBob3RtYWlsLmNvbT6JAEsEEBECAAsFAjcLDXsECwMCAQAKCRCXlhwyz7jI PG0VAJ0fmRZifO2Yj9+vZn/C9bwGRMFnDwCg3EeqVBjMZ/mHbmTx1SNv4TA6+Gq5 Ag0ENwsNexAIAPZCV7cIfwgXcqK61qlC8wXo+VMROU+28W65Szgg2gGnVqMU6Y9A VfPQB8bLQ6mUrfdMZIZJ+AyDvWXpF9Sh01D49Vlf3HZSTz09jdvOmeFXklnN/biu dE/F/Ha8g8VHMGHOfMlm/xX5u/2RXscBqtNbno2gpXI61Brwv0YAWCvl9Ij9WE5J 280gtJ3kkQc2azNsOA1FHQ98iLMcfFstjvbzySPAQ/ClWxiNjrtVjLhdONM0/XwX V0OjHRhs3jMhLLUq/zzhsSlAGBGNfISnCnLWhsQDGcgHKXrKlQzZlp+r0ApQmwJG 0wg9ZqRdQZ+cfL2JSyIZJrqrol7DVekyCzsAAgIH/09TSmtAEjEn93/Kfe1WOhyh NZ4mBkzLN9ipTvFXDtkWZF38VPG2I9JGrf/yIExPDziVSK61R4D2GRLBjF3oUmAM 5RNSL0WvWKhq3dDBHAqz72wT6pDWqnKkl/rx/ezoS8CsqowwMfrn6RovFw0sBzDa WO5ij0OBDU+OSQ5WwsH7es4Ze29OFp6K1hM7ZFR42Y/ydsBBWuXllx3Al80FleHs gATXYPiJnwj26PJ9X5OuJjCppM5KoLZE4kvYwG+Fjnmmu3KpDMYq4tZiI0MXlQU0 Z2GM7l/aKFKcaRBdBctSPOr/8Pgy2jbWHjVlavXZ1w3VtVsRPOopzTWM8OLpkaqJ AEYEGBECAAYFAjcLDXsACgkQl5YcMs+4yDwQSACg6PVdTEbF/bDws6NoE4BqiaF9 aEYAoINORHKbMJeML94MxrK8SjDWpPg/ =9cnn -----END PGP PUBLIC KEY BLOCK-----