C/C++. Alte funcții nesigure. Securitatea sistemelor şi a aplicaţiilor. C/C++. Vulnerabilități ale șirurilor de format. Ce este un șir de format?

Similar documents
1.3. OPERAŢII CU NUMERE NEZECIMALE

Pentru clasa a X-a Ştiinţele naturii-sem II

Sisteme cu logica fuzzy

UNITATEA DE ÎNVĂȚARE 3 Analiza algoritmilor

Programarea Dinamica. (si alte chestii adiacente) Andrei Olariu

Divizibilitate în mulțimea numerelor naturale/întregi

Soluţii juniori., unde 1, 2

O V E R V I E W. This study suggests grouping of numbers that do not divide the number

Reactoare chimice cu curgere piston (ideala) cu amestecare completa de tip batch (autoclava)

Teorema Reziduurilor şi Bucuria Integralelor Reale Prezentare de Alexandru Negrescu

Inteligenta Artificiala

GENERATOARE DE SEMNAL DIGITALE

ON THE QUATERNARY QUADRATIC DIOPHANTINE EQUATIONS (II) NICOLAE BRATU 1 ADINA CRETAN 2

Gradul de comutativitate al grupurilor finite 1

LIGHTNING MVP System

FORMULELE LUI STIRLING, WALLIS, GAUSS ŞI APLICAŢII

Cristalul cu N atomi = un sistem de N oscilatori de amplitudini mici;

Prelegerea 7. Sistemul de criptare AES. 7.1 Istoric

Procedeu de demonstrare a unor inegalităţi bazat pe inegalitatea lui Schur

Arhitectura sistemelor de calcul

ȘIRURI (TABLOURI UNIDIMENSIONALE)

Reactoare chimice cu curgere piston (ideala) (Plug Flow Reactor PFR) cu amestecare completa (Mixed Flow Reactor MFR) de tip batch (autoclava)

Habilitation Thesis. Periodic solutions of differential systems: existence, stability and bifurcations

Barem de notare clasa a V-a

Rezolvarea ecuaţiilor şi sistemelor de ecuaţii diferenţiale ordinare (II)

SIMULAREA DECIZIEI FINANCIARE

Legi de distribuţie (principalele distribuţii de probabilitate) Tudor Drugan

Liste. Stive. Cozi SD 2017/2018

Ordin. pentru aprobarea structurii informaţiilor înscrise pe cardul naţional de asigurări sociale de sănătate

Logică și structuri discrete. Marius Minea 25 septembrie 2017

Utilizarea limbajului SQL pentru cereri OLAP. Mihaela Muntean 2015

Alte rezultate din teoria codurilor

METODE NUMERICE: Laborator #4 Eliminare gaussiană cu pivotare totală şi scalare. Algoritmul Thomas pentru rezolvarea sistemului 3-diagonal

Avem 6 tipuri de simboluri in logica predicatelor:

Subiecte geometrie licenta matematica-informatica 4 ani

PRELUCRARI PE IMAGINI BINARE (ALB/NEGRU)

APLICAŢII ALE FORMULELOR LUI NEWTON PENTRU POLINOAME SIMETRICE

Sisteme cu logica fuzzy cu mai multe intrari (MISO)

COMPARATIVE DISCUSSION ABOUT THE DETERMINING METHODS OF THE STRESSES IN PLANE SLABS

INEGALITĂŢI DE TIP HARNACK ŞI SOLUŢII POZITIVE MULTIPLE PENTRU PROBLEME NELINIARE

Universitatea Politehnica Bucureşti Facultatea de Automatică şi Calculatoare Departamentul de Automatică şi Ingineria Sistemelor

Ecuatii si inecuatii de gradul al doilea si reductibile la gradul al doilea. Ecuatii de gradul al doilea

Counties of Romania List

GIDD PENTRU CALCULUL CONSUMULUI DE CA.LOURA AL CONSTRUCTIILOR DOTATE CU ' A SISTEME PASIVE DE INCALZIRE SO LARA INDICATIV GP

Metode clasice. Camelia Chira.

Teoreme de Analiză Matematică - I (teorema Weierstrass-Bolzano) 1

2D AND 3D PROCESSING OF THE INTERDEPENDENCE BETWEEN THE COMFORT MAIN INDICATORS

Curs 6. Discrete Event Simulation

4/68. Mini-comutatoare cu came. Prezentare generalã a sistemului. Întreruptoare Pornit-Oprit TM. Comutatoare de comandã TM.

SpatialHadoop. Tema. U iversitatea Politeh ica Bucureşti Facultatea Electro ică,teleco u icaţii şi Teh ologia I for aţiei. Master IISC

Proiectarea cu Micro-Procesoare

Rezultate în Teoria Punctului Fix şi Procese Iterative cu Aplicaţii

Manual Limba Germana

Despre AGC cuasigrupuri V. Izbaș

Ciphers: Making and Breaking

Cautand originea masei (Cautand bosonul Higgs) Adrian Buzatu. Departmentul de Fizica & Astronomie Universitatea din Glagsow, Regatul Unit

ON THE ASYMPTOTIC BEHAVIOR OF DYNAMICAL SYSTEMS AND APPLICATIONS

Cercet¼ari operaţionale

O U T O F A H U N D R E D P E O P L E : T H O S E W H O A L W AY S K N O W B E T T E R ;

PROBLEME DIVERSE lecţie susţinută la lotul de 13 de Andrei ECKSTEIN Bucureşti, 25 mai 2015

Modelling the Steady State Characteristic of ph Neutralization Process: a Neuro-Fuzzy Approach

Curs 5 ELEMENTE STRUCTURALE SOLICITATE LA RASUCIRE

$IfNot ParametricTable= P_ratio_gas. P ratio,gas = 14; Raport comprimare compresor aer - Pressure ratio for gas compressor (2) $EndIf

Teoreme de compresie-extensie de tip Krasnoselskii şi aplicaţii (Rezumatul tezei de doctorat)

IDENTIFICATION AND OPTIMAL CONTROL OF BLOWING SYSTEM

AN APPROACH TO THE NONLINEAR LOCAL PROBLEMS IN MECHANICAL STRUCTURES

Matematici speciale Variabile aleatoare discrete

Agricultural Engineering

CALITATEA VIEŢII ÎN ORAŞELE ROMÂNEŞTI ÎN CONTEXTUL REFORMEI STATULUI

"IIITO-TEC 'NIKI" & EQUIPME

Figura 7.12 Multiscopul: schema bloc simplificată a părţii specifice osciloscopului hibrid. U Y CS S/T-H ADC MD DAC TC

Utilizarea claselor de echivalenta in analiza asistata de calculator a sistemelor cu evenimente discrete

Laborator 5. Instructiuni de control logic : FOR, IF, WHILE. - Staţii de lucru care au instalat Orcad9.2. si MatLab 7.1

QUASI-ANALYTIC SOLUTIONS OF FIRST-ORDER PARTIAL DIFFERENTIAL EQUATIONS USING THE ACCURATE ELEMENT METHOD

MATEMATICĂ 3 PROBLEME DE REFLECŢIE

Sisteme de Recunoastere a Formelor Lab 12 Clasificare cu Support Vector Machine

ELECTRONIC TECHNIQUES IN TIMING MEASUREMENTS FOR NUCLEAR STRUCTURE

array a[0..n-1] a[0] = v0,..., a[n-1] = vn-1

A GENERALIZATION OF A CLASSICAL MONTE CARLO ALGORITHM TO ESTIMATE π

Definiţie. Pr(X a) - probabilitatea ca X să ia valoarea a ; Pr(a X b) - probabilitatea ca X să ia o valoare în intervalul a,b.

SOI prin smart-cut. Caracterizarea TEM-HRTEM a defectelor structuale induse in Si prin hidrogenare in plasma.

FINITE ELEMENT ANALYSIS OF FRICTIONAL CONTACTS

PERFORMANCE EVALUATION OF BRIDGES IN IAŞI SEISMIC AREA

SISTEME DE OPERARE (SO) CURS 3. Lect. Univ. Dr. Mihai Stancu. Gestiunea utilizatorilor

CURS 11: Programare dinamică - II - Algoritmica - Curs 12 1

Modelarea traficului in cadrul retelelor de radiotelefonie mobila

Self-Small Abelian Groups and Related Problems. (Abstract)

Logică avansată pentru informatică Master Anul I, Semestrul I

Acta Technica Napocensis: Civil Engineering & Architecture Vol. 54 No.1 (2011)

Controlul predictiv bazat pe modele intare-stare-iesire. Cuprins. 2. Modele intrare-stare-iesire :01

INCLUZIUNI OPERATORIALE PRIN TEHNICA PUNCTULUI FIX ÎN SPAŢII METRICE VECTORIALE

ACTA TECHNICA NAPOCENSIS

luca frn Guardip$AroEsf

Câteva rezultate de algebră comutativă

Calcul Numeric. Cursul Anca Ignat

Proiectarea Algoritmilor

Graduări pe algebre de matrice

COMPARATIVE STUDY OF STRUCTURAL ANALYSIS APPLIED TO AGRICULTURAL MACHINES BODIES AND ACCOMPLISHED WITH SOLID WORKS AND AUTODESK INVENTOR PROGRAMS

MONTE CARLO SIMULATION FOR ESTIMATING GEOLOGIC OIL RESERVES. A CASE STUDY FROM KUÇOVA OILFIELD IN ALBANIA

FINDING THE TRACES OF A GIVEN PLANE: ANALYTICALLY AND THROUGH GRAPHICAL CONSTRUCTIONS

Transcription:

C/C++. Alte funcții nesigure Securitatea sistemelor şi a aplicaţiilor Cursul 2. Codul sigur in C/C++ Introducere în criptografie (I) Marius Joldoş U.T. Cluj-Napoca int sprintf(char *s, const char *format, /* args*/...); "s" poate fi depășit int snprintf(char *s, size_t n, const char *format, /* args*/...); Nu garantează terminarea prin nul a lui "s" pe unele platforme(microsoft, Sun) MacOS X: terminarea prin nul este garantată int vsprintf(char * str, const char * format, va_list ap); "str" poate fi depășit 2 C/C++. Vulnerabilități ale șirurilor de format. Ce este un șir de format? Șirurile de format sunt interpretate => similare codului Să înțelegem definiția unei vulnerabilități de format de șir Să știm cum se întâmplă Să știm cum să le facem sigure cu funcții "C" obișnuite Să învățăm alte apărări împotriva exploatărilor șirurilor de format În C, se poate tipări folosind un șir de format: printf(const char *format,...); printf("ana are%d mere", mere); %d specifică un număr zecimal(dintr-un întreg) %s se folosește la șiruir de caractere, %X la hexazecimale cu litere mari(dintr-un întreg) %f se așteapta la un double și-l onevtește în notația zecimală, cu rotunjire specificată de argumentul precizie etc... 3 4

Problemă fundamentală în "C" Rezultat Nu există vreo modalitate de numărare argumentelor trimise unei funcții "C"=> argumentele lipsă nu sunt detectate Șirul de format este interpretat: amestecă cod cu date Ce se întâmpla la execuția codului de mai jos? int main () { printf("ana are %d mere"); } Ana are 6831248 mere Programul citeşte argumente lipsă de pe stivă! și obține reziduuri (sau lucruri interesante dacă doriţi să vă uitaţi pe stivă) 5 6 Sondarea stivei Șirul de format specificat de către utilizator Citire de valori de pe stivă Violări de confidențialitate printf( %08X ) x (X) zecimal fără semn 0: cu umplere la stânga cu zero'0' pe 8 caractere: 0XAA03BF54 4 octeți= pointer pe stivă,canar, etc... Ce se întâmplă dacă se rulează codul următor, presupunând că se dă întotdeauna un argument? int main(int argc, char *argv[]) { printf(argv[1]); exit(0); } Încercați și"%s%s%s%s%s%s%s%s%s" câți de "%s" sunt necesari pentru a-l sparge? 7 8

Rezultatul Programul corectat SProcent"%s%s%s%s%s%s%s" Segmentation fault Programul este terminat de OS Segmentation fault, bus error, etc... pentru ca a încercat să citească ce nu îi era destinat Intrarea este interpretată ca șir de format (d.e., %s, %d etc...) int main(int argc, char *argv[]) { printf("%s", argv[1]); exit(0); } Se poate întâmpla orice în funcție de intrare! Cum se poate corecta programul? SProcentOK "%s%s%s%s%s%s%s" %s%s%s%s%s%s%s 9 10 Vulnerabilități ale șirurilor format Descoperite relativ recent(cca 2000) Limitare a unei familii de limbaje "C" Versatile Pot afecta diferite locații de memorie Se pot folosi pentru depăsiri de zonă Se pot folosi la citirea stivei Nu sunt ușor de exploatat, dar există exemple de scenarii de compromitere a "root" pe web "Modifică și atacă după exemplu" Definiția unei vulnerabilități de șir format Un apel al unei functii cu argument șir de format, unde șirul de format este fie: Posibil sub controlul unui atacator Neurmat de numărul corespunzător de argumente Deoarece este dificil de stabilit dacă un șir a fost modificat de un atacator, se consideră ca practică foarte proastă folosirea unui șir de tipărit ca argument de format. Uneori această practica este confundată cu prezența unei vulnerabilități de acest tip 11 12

Cât de importante sunt aceste vulnerabilități? Funcții care folosesc șiruri format Căutarea pe NVD (http://nvd.nist.gov) după format string : 115 înregstrări în 2002 153 în 2003 173 în aprilie2004 363 in februarie2006 728in martie 2013 Diferite aplicații Baze de date(oracle) Servicii Unix (syslog, ftp,...) Linux super (pentru gestiunea funcțiilor setuid) cfingerd CVE-2001-0609 printf tipărește la"stdout" fprintf - tipărește la stream warn -standard error output err -standard error output setproctitle setează titlul procesului care îl invocă sprintf(char *str, const char *format,...); sprintf tipărește într-o zonă tampon Ce problemă este? O consecința frecventă este execuția de cod arbitrar 13 14 Dubla nefastitate a sprintf Funcții mai bune decât sprintf sprintf(char *str, const char *format,...); Probleme date de șirul de format ȘI depășirea de zonă! Zona tampon și șirul de format sunt de obicei pe stivă Prin depășirea de zonă se rescrie stiva folosind valori din șirul de format Observați că acestea nu previn vulnerabilitățile de șir de format: snprintf(char *str, size_t size, const char *format,...); sprintf cu verificarea lungimii față de "size" asprintf(char **ret, const char *format,...); setează*ret ca pointer la o zonă tampon suficient de mare pentru a păstra șirul formatat (potențială scăpare de memorie). 15 16

Funcții scrise special folosind șiruri format Putem defini funcții specifice care să ia argumente asemănătoare lui printf. wu-ftpd 2.6.1 proto.h void reply(int, char *fmt,...); void lreply(int, char *fmt,...); etc... Pot produce aceleași feluri de vulnerabilități dacă atacatorul poate controla șirul de format Scrie orice oriunde Specificatorul de format "%n"scrie un număr la o locație specificată de un argument de pe stivă Argumentul este tratat ca pointer la un int Adesea fie zona în care cse scrie, fie intrarea brută se află undeva pe stivă. Atacatorul controlează valoarea pointerului! Scrie numărul de caractere scrise până în acel loc Continuă să numere chiar daca s-a atins limita dimensiunii zonei! "Număra aceste caractere%n" Nu e nevoie să știm toate detaliile : Tim Newsham (2000) "Format String Attacks" (http://en.wikipedia.org/wiki/uncontrolled_format_strin g) 17 SSA cursul2 -M. Joldos-T.U. Cluj 18 Studiu de caz: cfingerd 1.4.3 Înlocuitor al lui finger. Rulează ca root Pscan output: (CVE-2001-0609) defines.h:22 SECURITY: printf call should have "%s" as argument 0 main.c:245 SECURITY: syslog call should have "%s" as argument 1 main.c:258 SECURITY: syslog call should have "%s" as argument 1 standard.c:765 SECURITY: printf call should have "%s" as argument 0 etc... (10 instances total) Descoperitor: Megyer Laszlo, a.k.a. "Lez" Analiza cfingerd Majoritatea acestor probleme sunt exploatabile, dar una dintre ele este indirect în algoritm... Algoritmul(simplificat): Se receptionează o conexiune în intrare get the fingered username Se face o verificare ident(rfc 1413) pentru a afla și jurnaliza identitatea utilizatorului la distanță (Udist) Se copiază numele Udist într-o zona tampon Se copiază din nou în "username@remote_address" remote_address ar identifica sursa atacului Se răspunde la cererea finger Se jurnalizează cererea 19 20

Vulnerabilitățile cfingerd O vulnerabilitate de șir de format care dă acces root:: Datele de la distanță(ident_user) se folosesc la cnstruirea șirului de format: snprintf(syslog_str, sizeof(syslog_str), "%s fingered from %s", username, ident_user ); syslog(log_notice, (char *) syslog_str); O vulnerablitate de depășire cu unu la manipularea șirului(depăşire de zonă), care previne jurnalizarea adresei remote_address (lucru folositor la atacul cu eșuat sau doar pentru păstrarea anonimității) permite ca ident_user să fie mai mare(și să conțină cod pentru procesorul de comenzi) cfingerd depășirea de zonă memset(uname, 0, sizeof(uname)); for (xp=uname; *cp!='\0' && *cp!='\r' && *cp!='\n' && strlen(uname) < sizeof(uname); cp++ ) *(xp++) = *cp; Eroare de manipulare a șirului (Off-by-one) uname nu este terminat prin NUL! pentru că strlen nu numără caracterul NUL Se va opri din copiat atunci când strlen ajunge să citească în afara zonei 21 22 Efectul direct al erorii depăsire-cuunu char buf[buflen], uname[64]; "uname" și"buf" sunt "unite" ca un singur șir! Astfel, chiar dacă se copiază doar 64 caractere din intrare în șirul "uname", funcţiile de manipulare vor lucra pe "uname+buf" ca pe o singura entitate "buf" a fost folosit pentru a citi răspunsul de la serverul deident astfel că esteintrarea brută Consecințele erorii depăşire cu unu 1) Nu se jurnalizează remote_address datorită restricției de dimensiune: snprintf(bleah, BUFLEN, "%s@%s", uname, remote_addr); atacatorul poate încerca anonim diverse ajustări (alinieri etc...) până când atacul funcţionează 2) Există suficient spațiu pentru șirurilede format, caracterele de aliniere și codul de shell înbuf (~60 octeti pentru shell code): Compromiterea root la apelul syslog cracker-ul obţine privilegii de root 23 SSA cursul2 -M. Joldos-T.U. Cluj 24

Prevenirea vulnerabilitătilor șirurilor de format 1) Specificați întotdeauna șir de format majoritatea vulnerabilităților rezolvate punând "%s" ca șir de format (nu lăsaţi datele ca șir de format) 2) Dacă se poate, șirul de format să fie o constanta Extrageți toate părtile variabile ca argumente în apel Dificil de realizat cu unele biblioteci de intrnaținalizare Dacă cele de mai sus nu se pot aplica folosiți apărări cum sunt FormatGuard Aparări împotriva exploatării FormatGuard Macrouri compilator pentru numărarea argumentelor trecute funcției Fişier header special Corecție în glibc împachetarea Printf cu numărarea argumentelor și verificarea coincidenței Terminarea procesului la nepotrivire Ce probleme pot apărea? 25 26 Limitări ale FormatGuard Ce se face la nepotrivire? Terminare(kill) Reparație incompleta, dar este DoS preferabil compromiterii root Daca procesul este unul important și este terminat, sunt totuşi posibile atacuri de tip refuzul servirii Nu merge dacă programul ocolește FormatGuard folosind propria bibliotecă wu-ftpd avea printf propriu gftp folosea biblioteca Glib Scanere pentru cod Pscan caută funcții apelate cu date ca șir de format poate căuta și functii specifice Are nevoie de un fișier ajutător care se poate genera automat Pscan helper file generator la http://www.cerias.purdue.edu/homes/pmeunier/dir_ pscan.html Puține fals pozitive http://www.striker.ottawa.on.ca/~aland/pscan/ 27 28

Opțiuni ale gcc -Wformat (man gcc) "Check calls to "printf" and "scanf", etc., to make sure that the arguments supplied have types appropriate to the format string specified, and that the conversions specified in the format string make sense. " Also checks for null format arguments for several functions -Wformat also implies -Wnonnull -Wformat-nonliteral (man gcc) "If -Wformat is specified, also warn if the format string is not a string literal and so cannot be checked, unless the format function takes its format arguments as a "va_list"." Opțiuni ale gcc -Wformat-security (man gcc) "If -Wformat is specified, also warn about uses of format functions that represent possible security problems. At present, this warns about calls to "printf" and "scanf" functions where the format string is not a string literal and there are no format arguments, as in "printf (foo);". This may be a security hole if the format string came from untrusted input and contains %n. (This is currently a subset of what -Wformat-nonliteral warns about, but in future warnings may be added to -Wformat-security that are not included in -Wformat-nonliteral.)" -Wformat=2 Equivalent to -Wformat -Wformat-nonliteral -Wformatsecurity. 29 30 Criptografie. Obiective Utilizările criptografiei Să înţelegem şi să demonstrăm cunoştinţe despre Definiţiile şi termenii generali din criptografie Ce poate şi ce nu poate face criptografia pentru securitate Secretizarea perfectă Cum sunt atacate cripto-sistemele Diferenţele între criptografia cu cheie publică şi privată Principiile generale ale unora dintre cei mai cunoscuţi algoritmi de criptare Aplicarea criptografiei la protocoalele de comunicaţie Confidenţialitate sau secretizare Prevenirea dezvăluirii neautorizate a datelor Integritate Detecţia modificării neautorizate a datelor Inclusiv prevenirea substituirii unui întreg mesaj Autentificarea Verificarea identităţii cuiva sau a ceva (de genul unui program sau al unui calculator) Prevenirea substituirii Ne-repudierea Protecţia împotriva cazului în care expeditorul nu recunoaşte că a trimis un mesaj 31 32

Ce nu poate preveni criptografia Distrugerea unui întreg mesaj Construcţia protocolului poate fi aici utilă Inferenţa Cineva poate infera, fără a sparge codul, ce conţine mesajul sau părţi din acesta Modificarea mesajului Poate ajuta la detecţia alterării mesajului, dar nu o poate preveni Reluarea unui mesaj Iarăşi, e nevoie de alte tehnici, inclusiv designul protocolului şi al datelor Atacuri din cauza erorilor în software Definiţii Criptologie = criptografie şi criptanaliză Criptografia ştiinţa şi studiul purtării comunicaţiilor secrete Criptanaliza -ştiinţa şi studiul metodelor de spargere a comunicaţiilor secrete Cifrare (criptare) procesul de transformare al textului clar în text cifrat Descifrare (decriptare) procesul de transformare a textului cifrat în text clar Atât cifrarea cât şi descifrarea sunt controlate prin intermediul unei chei. 33 34 Ce încearcă să facă criptograful Încearcă să evite Redundanţa, periodicitatea, şabloanele, predictabilitatea, structurarea Din nefericire, limbile prezintă toate aceste trăsături, la fel şi comunicaţiile de diferite feluri Toate rapoartele de stare a vremii de la submarinele germane din al doilea război mondial începeau cu aceleaşi caractere Folosind Difuzia: să ascundă relaţiile dintre textul clar şi cel cifrat (cât de probabil este ca acest text clar să fie sursa acestui text cifrat) Confuzia: să împrăştie sau să disipeze redundanţa (să o distribuie peste textul cifrat) 35 Criptografie Ipoteze fundamentale Mesaj de cifrat Algoritmi (cunoscuţi public) de cifrare/descifrarea mesajului Cheie (cunoscută numai de expeditor/destinatar) Fiind daţi doar algoritmii şi mesajul cifrat, nimeni nu cunoaşte o metoda de descifrare semnificativ mai rapidă decât încercarea tuturor cheilor Tipuri de atacuri Numai asupra textului cifrat Pe baza unui text în clar cunoscut Pe baza unui text în clar ales Atacurile reale nu sparg cifrul, în general! Nu încerca să înţelegi lacătul, strecoară-te în seif 36

Criptografia cu cheie secretă (criptografia simetrică): Utilizare Trebuie prevenit trasul cu urechea (eavesdropping) Necesită un canal sigur pentru schimbul de chei Memorie sigură Trebuie reamintită cheia Autentificare Provocare/răspuns (challenge/response) Aveţi grijă Verificarea integrităţii Sumă de control pentru mesaj Suma trebuie încriptată Criptografia cu cheie publică (criptografia asimetrică) Prima publicare în 1976 (Diffie-Hellman) Mai folosită azi: RSA Perechi de chei care se potrivesc Cheia publică (e) pentru cifrare Cheia privată (d) pentru descifrare Pentru integritate, se cifrează suma de control cu cheia privată a expeditorului Numai cheia publică a expeditorului va descifra corespunzător 37 38 Criptografia cu cheie publică: Utilizare Trebuie prevenit trasul cu urechea Autentificare Integritate Problemă: algoritmii cu chei publice sunt lenţi Soluţie: folosiţi-i pentru a transmite cheia secretă Criptografia cu cheie publică: Ne-repudierea Suma de control pentru integritate [Message Integrity Checksum (MIC)] poate convinge Destinatarul că Expeditorul a creat mesajul Mesajul este corect, din sursa bună Dar nu poate convinge pe nimeni altcineva! Expeditorul şi destinatarul partajează cheia Fiecare dintre ei ar fi putut genera mesajul Cheia publică rezolvă problema ne-repudierii Cheia privată este necesară pentru a cifra Ştiută numai de către expeditor 39 40

Definiţii Două feluri principale de cifrare (C) şi descifrare (D) d.p.d.v. istoric Transpoziţie rearanjarea caracterelor sau bucăţilor de text clar în textul cifrat D.e. aranjarea mesajului într-un dreptunghi şi extragerea literelor pe coloane Cheia: lăţimea dreptunghiului Substituţie -caractere/bucăţi/blocuri se înlocuiesc cu alte caractere/bucăţi/blocuri D.e. cifrul Cezar, în care distanţa de deplasare este cheia Alte exemple: cărţi de coduri care conţin perechi de cuvinte/fraze în clar şi cifrate Exemple. Mesaj: avem nevoie urgent de abilitate de cifrare Transpoziţie, k=4 avem nevo ieur gent deab ilit ated ecif rare anigd iaerv eeeel tcaev unaie rmor tbtdf eanig 41 42 Exemple. Mesaj: avem nevoie urgent de abilitate de cifrare Substituţie, k=4 ABCDEFGHIJKLMNOPQRSTUVWXYZ EFGHIJKLMNOPQRSTUVWXYZABCD avemnevoieurgentdeabilitatedecifrare eziqrizsmiyvkirxhiefmpmxexihigmjteti Exemple. Mesaj: avem nevoie urgent de abilitate de cifrare Transpoziţie 4231 CRYP M = Crytpo skills needed urgently TOSK K = (4; 4231) ILLS a doua parte a cheii reprezintă NEED coloana EDUR GENT LYRS C = PKSDRTS ROLEDEY YSLEUNR CTINEGL 43 44

Câteva slăbiciuni evidente Transpoziţie Transpoziţia rectangulară este de obicei limitată la lungimi de chei foarte mici Nu se ascund caracterele din mesajul original fiecare caracter din M este acelaşi înc Substituţie Exemplul anterior este mono-alfabetic, a.î. un caracter din M este totdeauna reprezentat de acelaşi caracter ales în C Conduce al atacuri bazate pe analiza frecvenţei - caracterelor, digrafelor (perechi), trigrafelor (triplete),... Un cifru poli-alfabetic ar fi mai bun Frecvenţele literelor alfabetului englez 45 46 Criptanaliza transpoziţiei Dacă suspectaţi transpoziţia, consideraţi citirea fiecărei celei de a 2-a litere, apoi a fiecărei a 3-a,... Pentru a determina numărul de linii şi coloane Observaţi că transpoziţia dreptunghiulară este în esenţă o permutare structurată (nu aleatoare) Temă Ce se întâmplă dacă cifraţi folosind o permutare aleatoare a caracterelor mesajului? Câte asemenea permutări există dacă Neste lungimea mesajului? Cum aţi ataca criptograma? De ce este improbabil ca cineva să folosească aceasta tehnică pentru N foarte mare? Substituţia monoafabetică Cezar k=4 Cifrare C i = P i + k (mod 26) Descifrare P i = C i - k (mod 26) 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 E F G H I J K L M N O P Q R S T U V W X Y Z A B C D Pe baza unui cuvânt cheie 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 N E T W O R K Z Y X V U S Q P M L J I H G F D C B A 47 48

Substituţie polialfabetică (Vigenere) Se alege un cuvânt cheie Cifrarea Se scrie cheia deasupra textului clar C = Rândul din textul clar, coloana caracterului din cheie Descifrarea Se scrie cheia deasupra textului clar Se găseşte coloana care conţine caracterul din cheie Se află caracterul din C in coloana de sub cheie Textul clar este în coloana cea mai din stânga Sau... Se alege un set K=(K1...Ki) Cifrarea: Ci = Pi + k i (mod 26) Descifrarea: Pi = Ci k i (mod 26) 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 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 A C D E F G H I J K L M N O P Q R S T U V W X Y Z A B D E F G H I J K L M N O P Q R S T U V W X Y Z A B C E F G H I J K L M N O P Q R S T U V W X Y Z A B C D F G H I J K L M N O P Q R S T U V W X Y Z A B C D E G H I J K L M N O P Q R S T U V W X Y Z A B C D E F H I J K L M N O P Q R S T U V W X Y Z A B C D E F G I J K L M N O P Q R S T U V W X Y Z A B C D E F G H J K L M N O P Q R S T U V W X Y Z A B C D E F G H I K L M N O P Q R S T U V W X Y Z A B C D E F G H I J L M N O P Q R S T U V W X Y Z A B C D E F G H I J K M N O P Q R S T U V W X Y Z A B C D E F G H I J K L N O P Q R S T U V W X Y Z A B C D E F G H I J K L M O P Q R S T U V W X Y Z A B C D E F G H I J K L M N P Q R S T U V W X Y Z A B C D E F G H I J K L M N O Q R S T U V W X Y Z A B C D E F G H I J K L M N O P R S T U V W X Y Z A B C D E F G H I J K L M N O P Q S T U V W X Y Z A B C D E F G H I J K L M N O P Q R T U V W X Y Z A B C D E F G H I J K L M N O P Q R S U V W X Y Z A B C D E F G H I J K L M N O P Q R S T V W X Y Z A B C D E F G H I J K L M N O P Q R S T U W X Y Z A B C D E F G H I J K L M N O P Q R S T U V X Y Z A B C D E F G H I J K L M N O P Q R S T U V W Y Z A B C D E F G H I J K L M N O P Q R S T U V W X Z A B C D E F G H I J K L M N O P Q R S T U V W X Y 49 Cuvânt cheie: RELAT IONSR ELATI ONSRE LATIO NSREL Text clar: TOBEO RNOTT OBETH ATIST HEQUE STION Text cifrat: KSMEH ZBBLK SMEMP OGAJX SEJCS FLZSY 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 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 A C D E F G H I J K L M N O P Q R S T U V W X Y Z A B D E F G H I J K L M N O P Q R S T U V W X Y Z A B C E F G H I J K L M N O P Q R S T U V W X Y Z A B C D F G H I J K L M N O P Q R S T U V W X Y Z A B C D E G H I J K L M N O P Q R S T U V W X Y Z A B C D E F H I J K L M N O P Q R S T U V W X Y Z A B C D E F G I J K L M N O P Q R S T U V W X Y Z A B C D E F G H J K L M N O P Q R S T U V W X Y Z A B C D E F G H I K L M N O P Q R S T U V W X Y Z A B C D E F G H I J L M N O P Q R S T U V W X Y Z A B C D E F G H I J K M N O P Q R S T U V W X Y Z A B C D E F G H I J K L N O P Q R S T U V W X Y Z A B C D E F G H I J K L M O P Q R S T U V W X Y Z A B C D E F G H I J K L M N P Q R S T U V W X Y Z A B C D E F G H I J K L M N O Q R S T U V W X Y Z A B C D E F G H I J K L M N O P R S T U V W X Y Z A B C D E F G H I J K L M N O P Q S T U V W X Y Z A B C D E F G H I J K L M N O P Q R T U V W X Y Z A B C D E F G H I J K L M N O P Q R S U V W X Y Z A B C D E F G H I J K L M N O P Q R S T V W X Y Z A B C D E F G H I J K L M N O P Q R S T U W X Y Z A B C D E F G H I J K L M N O P Q R S T U V X Y Z A B C D E F G H I J K L M N O P Q R S T U V W Y Z A B C D E F G H I J K L M N O P Q R S T U V W X Z A B C D E F G H I J K L M N O P Q R S T U V W X Y 50 Atacarea codului Vigenere A fost considerat sigur timp de mai bine de 300 de ani! Iniţial a fost spart de către Charles Babbage, care nu şi-a publicat rezultatele Apoi a fost spart de Kasiski în 1863 Temă Explicaţi atacul asupra codului Vigenere. Concluzii rezultate din analiza algoritimilor simpli Criptografia mai tare ar trebui să se bazeze pe combinaţii complexe de algoritmi pentru transpoziţii şi substituţii amestecaţi lucru cunoscut şi sub numele de cifruri produs Furnizează multiple mapări diferite ale "caracterelor" din textul clar la "caractere" de text cifrat Criptografia mai tare se bazează pe lungimi de chei foarte mari Pentru a îngreuna căutarea periodicităţii în cifru Repetarea de caractere sau de şabloane în cheie nu e bună, de aici rezultând că cu cât mai lungă e perioada, cu atât mai bine Temă Tehnicile criptografice prezentate până acum se pot folosi pentru confidenţialitate? Dar pentru autenticitate? Integritate? Nerepudiere? Temă Explicaţi cum se pot realiza aceste lucruri pentru fiecare dintre acestea. 51 52

Algoritmi de criptare Operează Pe caracter (pe"flux") stream ciphers Pe blocuri de text block ciphers 53 Exemplu de cod pentru criptare/decriptare void tea(char mode, FILE *infile, FILE *outfile, unsigned long k[]) { /* moduri e =cifrare, d =descifrare, k[]=cheia.*/ char ch, Text[8]; int i; while(!feof(infile)) { i = fread(text, 1, 8, infile); /* citeste 8 octeti din infile in Text */ if (i <= 0) break; while (i < 8) { Text[i++] = '';}/* umple restul ultimului bloc cu spatii */ switch (mode) { case 'e': encrypt(k, (unsigned long*) Text); break; case 'd': decrypt(k, (unsigned long*) Text); break; } fwrite(text, 1, 8, outfile); /* scrie 8 octeti din Text in outfile */ } } 54 Exemplu de cod pentru criptare/decriptare. Decriptarea void decrypt(unsigned long k[], unsigned long text[]) { unsigned long y = text[0], z = text[1]; unsigned long delta = 0x9e3779b9, sum = delta << 5; int n; for (n= 0; n < 32; n++) { z -= ((y << 4) + k[2]) ^ (y + sum) ^ ((y >> 5) + k[3]); y -= ((z << 4) + k[0]) ^ (z + sum) ^ ((z >> 5) + k[1]); sum -= delta; } text[0] = y; text[1] = z; } Privire generală asupra criptanalizei (I) Un cifru poate fi spart dacă se poate determina cheia sau textul clar din textul cifrat. Un cifru sigur necondiţionat este unul care, indiferent cât de mult text cifrat este cunoscut, nu există suficientă informaţie în textul cifrat pentru a determina în mod unic cheia sau textul clar. Există un singur cifru demonstrabil sigur cifrul folosit o singura dată. Mai multe mai târziu despre aceste cifruri. Toate celelalte cifruri pot fi sparte, dacă există resurse nelimitate. 55 56

Privire generală asupra criptanalizei (II) Un cifru este sigur computaţional, dacă Costul spargerii cifrului depăşeşte valoarea informaţiei cifrate Timpul necesar pentru a-l sparge depăşeşte durata de viaţă utilă a informaţiei Suntem cel mai interesaţi de cifruri care nu sunt fezabile d.p.d.v. computaţional pentru a le sparge (adică, aceste cifruri rezistă analizei sistematice fiind date resursele disponibile). Tehnici de criptanaliză (I) Atac doar asupra textului cifrat determină cheia sau textul clar doar pe baza textului cifrat Atac cu text clar cunoscut criptanalistul cunoaşte câteva perechi textului clar text cifrat Example: cum a fost spart codul german Enigma Regularitatea şi structurarea mesajului sunt avantaje pentru criptanalist Atac asupra unui text clar ales adversarul este capabil să obţină textul cifrat pentru un text clar ales Text clar ales în mod adaptiv selecţiile ulterioare ale textelor clare se bazează pe rezultatele anterioare; metodă mai puternică 57 58 Tehnici de criptanaliză (II) Text cifrat ales criptanalistul poate alege text cifrate diferite care urmează să fie descifrate şi poate vizualiza textele clare rezultate Aplicabilă la criptografia cu cheie publică Obiectivul evident este deducerea cheii Principiul lui Kerchkoff presupuneţi că adversarul cunoaşte tot criptosistemul Dvs. cu excepţia cheii. Căutarea de tipul forţă brută Este posibil întotdeauna să se încerce pur şi simplu fiecare cheie Atacul cel mai elementar, proporţional cu mărimea cheii Se presupune că fie se cunoaşte fie se poate recunoaşte textul clar Mărimea cheii (biţi) Numărul de chei posibile Timpul necesar la 1 criptare/μs Timpul necesar la 10 6 criptări/μs 32 2 32 =4.3 10 9 2 32 μs=35,8min 2.15ms 56 2 56 =7.2 10 16 2 55 μs=1142ani 10,01ore 128 2 128 =3.4 10 38 2 127 μs=5,9 10 24 ani 5,4 10 18 ani 168 2 168 =3.7 10 50 2 167 μs=5,9 10 36 ani 5,9 10 30 ani 26 caractere (permutare) 26!=4 10 26 2 10 26 μs=6,4 10 12 ani 6,4 10 6 ani 59 60

Definiţia secretizării perfecte Un criptosistem posedă secretizarea perfectă dacă posesia textului cifrat nu permite să se înveţe nimic despre textul clar Textul clar este independent d.p.d.v. statistic de textul cifrat Criptanalistul poate nu poate face nimic mai bun decât să ghicească textul clat, indiferent cât timp sau resurse de calcul foloseşte. De aici, sistemul este sigur necondiţionat Chiar dacă aveţi textul cifrat, secretizarea perfectă nu vă permite să aflaţi mai mult decât ştiaţi deja. Codul folosit o singura dată (one time pad, cifrul Vernam) Inventat în 1917 Constă dintr-un set vast de litere de cheie cu adevărat aleatoare Scrise pe bucăţele de hârtie lipite împreună într-un pachet cu adevărat aleatoare înseamnă că toate cheile sunt egal posibile (nu există informaţie care să ajute la criptanaliză) Perfect sigure împotriva atacului bazat doar pe textul cifrat Cifrarea Fiecare literă scrisă este folosită o singură dată pentru a cripta o literă din textul clar O literă din cheie este folosită pentru un singur mesaj Lungimea cheii = lungimea mesajului C = P i + K i mod 26 61 62 Codul folosit o singura dată (one time pad) 63 Secretizarea perfectă. Două exemple de cod folosit o singură dată Alfanumerică (0-255) Se generează un flux de chei cu adevărat aleatoriu, cu numere între 0 şi 255 k 1, k 2, Pentru fiecare caracter a j din mesaj, se deplasează a j cu k j (mod 256) Fluxul de chei nu poate fi repetat nici nu poate fi refolosit la un alt mesaj Un flux de chei au adevărat aleator, ne-repetat constituie un one time pad Binară Se generează un flux de chei cu adevărat aleatoriu compus din biţi (0,1) Se codifică mesajul M ca şir de biţi Se face sau exclusiv între cheie şi şirul de biţi ai mesajului M C = K XOR M Descifrarea invers M = K XOR C m = 010111 k = 110010 c = 100101 64

Codul folosit o singură dată. Provocări şi probleme Provocări Distrugerea cheilor Surse de chei cu adevărat aleatoare Stocarea cheilor Emiţătorul şi receptorul pot fi decalaţi cu 1 bit şi astfel incapabili să comunice Atacuri Dacă repetaţi folosirea unei părţi din cheie... Rezumat Criptografie şi criptanaliză utilizări şi limite algoritmi simpli transpoziţie, substituţie secretizarea perfectă: codul folosit o singură dată 65 66