Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Windows 7, XP
  • Funksionet e hash janë veprimtaria edukative dhe shkencore e anisimov vladimir viktorovich. Algoritmet e hashimit të të dhënave

Funksionet e hash janë veprimtaria edukative dhe shkencore e anisimov vladimir viktorovich. Algoritmet e hashimit të të dhënave

Shënim: Në këtë leksion formulohet koncepti i një funksioni hash, si dhe një pasqyrë e shkurtër e algoritmeve për gjenerimin e funksioneve hash. Përveç kësaj, është marrë parasysh mundësia e përdorimit të algoritmeve të enkriptimit të bllokut për të formuar një funksion hash.

Qëllimi i leksionit: njohja me konceptin e një "funksioni hash", si dhe me parimet e funksioneve të tilla.

Koncepti i funksionit hash

Funksioni hashështë një funksion matematikor ose një funksion tjetër që, për një varg me gjatësi arbitrare, llogarit një vlerë të plotë ose një varg tjetër me gjatësi fikse. Matematikisht, mund të shkruhet kështu:

ku M është mesazhi origjinal, i quajtur ndonjëherë prototip dhe h është rezultati i quajtur vlera hash (dhe gjithashtu kod hash ose tret mesazhet(nga anglishtja. përmbledhje e mesazhit)).

Kuptimi i funksionit hash është të përcaktojë tiparin karakteristik të paraimazhit - vlerën e funksionit hash. Kjo vlerë zakonisht ka një madhësi të caktuar fikse, të tilla si 64 ose 128 bit. Kodi hash mund të analizohet më tej për të zgjidhur çdo problem. Kështu, për shembull, hashing mund të përdoret për të krahasuar të dhënat: nëse dy grupe të dhënash kanë kode të ndryshme hash, grupet janë të garantuara të jenë të ndryshme; nëse janë të njëjta, vargjet ka shumë të ngjarë të jenë të njëjta. Në rastin e përgjithshëm, nuk ka korrespondencë një-për-një midis të dhënave origjinale dhe kodit hash për faktin se numri i vlerave të funksioneve hash është gjithmonë më i vogël se numri i varianteve të të dhënave hyrëse. Prandaj, ka shumë mesazhe hyrëse që japin të njëjtat kode hash (situata të tilla quhen përplasjet). Mundësia e përplasjeve luan një rol të rëndësishëm në vlerësimin e cilësisë së funksioneve hash.

Funksionet hash përdoren gjerësisht në kriptografinë moderne.

Funksioni hash më i thjeshtë mund të ndërtohet duke përdorur operacionin "sum modulo 2" si më poshtë: marrim vargun e hyrjes, shtojmë të gjithë bajtet modulin 2 dhe kthejmë bajtin e rezultatit si vlerë të funksionit hash. Gjatësia e vlerës së hash-it në këtë rast do të jetë 8 bit, pavarësisht nga madhësia e mesazhit hyrës.

Për shembull, supozoni se mesazhi origjinal i dixhitalizuar ishte si vijon (në format heksadecimal):

Le ta përkthejmë mesazhin në formë binare, të shkruajmë bajtet njëri nën tjetrin dhe t'i shtojmë bitet në secilën kolonë moduli 2:

0011 1110 0101 0100 1010 0000 0001 1111 1101 0100 ---------- 0110 0101

Rezultati (0110 0101 (2) ose 65 (16)) do të jetë vlera e funksionit hash.

Sidoqoftë, një funksion i tillë hash nuk mund të përdoret për qëllime kriptografike, për shembull, për të gjeneruar një nënshkrim elektronik, pasi është mjaft e lehtë të ndryshosh përmbajtjen e një mesazhi të nënshkruar pa ndryshuar vlerën e kontrollit.

Prandaj, funksioni hash i konsideruar nuk është i përshtatshëm për aplikacione kriptografike. Në kriptografi, një funksion hash konsiderohet i mirë nëse është e vështirë të krijohen dy paraimazhe me të njëjtën vlerë hash, dhe gjithashtu nëse dalja e funksionit nuk varet në mënyrë eksplicite nga hyrja.

Le të formulojmë kërkesat themelore për funksionet hash kriptografike:

  • funksioni hash duhet të jetë i zbatueshëm për mesazhet e çdo madhësie;
  • llogaritja e vlerës së funksionit duhet të bëhet mjaft shpejt;
  • me një vlerë të njohur të funksionit hash, duhet të jetë e vështirë (pothuajse e pamundur) të gjesh një paraimazh të përshtatshëm të M;
  • me një mesazh të njohur M, duhet të jetë e vështirë të gjesh një mesazh tjetër M 'me të njëjtën vlerë hash si mesazhi origjinal;
  • duhet të jetë e vështirë të gjesh ndonjë çift mesazhesh të rastësishme të ndryshme me të njëjtën vlerë hash.

Krijimi i një funksioni hash që plotëson të gjitha këto kërkesa nuk është një detyrë e lehtë. Duhet gjithashtu të mbahet mend se të dhënat me madhësi arbitrare merren në hyrje të funksionit dhe rezultati i hash-it nuk duhet të jetë i njëjtë për të dhënat e madhësive të ndryshme.

Aktualisht, në praktikë, funksionet përdoren si funksione hash që përpunojnë bllok pas blloku mesazhin hyrës dhe llogaritin vlerën hash h i për çdo bllok M i të mesazhit hyrës sipas varësive të formës.

h i = H (M i, h i-1),

ku h i-1 është rezultati i marrë gjatë llogaritjes së funksionit hash për bllokun e mëparshëm të të dhënave hyrëse.

Si rezultat, dalja e funksionit hash h n është një funksion i të gjitha n blloqeve të mesazhit hyrës.

Përdorimi i algoritmeve të enkriptimit të bllokut për të gjeneruar një funksion hash

Ju mund të përdorni një funksion hash blloku si një funksion hash. Nëse algoritmi i bllokut i përdorur është i sigurt kriptografikisht, atëherë funksioni hash i bazuar në të do të jetë gjithashtu i besueshëm.

Mënyra më e thjeshtë për të përdorur algoritmin e bllokut për të marrë një kod hash është të kriptoni mesazhin në modalitetin CBC. Në këtë rast, mesazhi paraqitet si një sekuencë blloqesh, gjatësia e të cilave është e barabartë me gjatësinë e bllokut të algoritmit të enkriptimit. Nëse është e nevojshme, blloku i fundit është i mbushur në të djathtë me zero për të marrë një bllok të gjatësisë së dëshiruar. Vlera hash do të jetë blloku i fundit i koduar i tekstit. Me kusht që të përdoret një algoritëm i besueshëm i enkriptimit të bllokut, vlera e hash-it që rezulton do të ketë vetitë e mëposhtme:

  • është praktikisht e pamundur pa njohuri për çelësin e enkriptimit të llogaritet vlera hash për një grup të caktuar informacioni të hapur;
  • është praktikisht e pamundur të zgjidhen të dhënat e hapura për një vlerë të caktuar të funksionit hash pa e ditur çelësin e enkriptimit.

Vlera hash e formuar në këtë mënyrë zakonisht quhet insert imitues ose vërtetues dhe përdoret për të kontrolluar integritetin e mesazhit. Kështu, imitimi i futjes është një kombinim kontrolli që varet nga të dhënat e hapura dhe informacionet kryesore sekrete. Qëllimi i përdorimit të një inserti të simuluar është të zbulojë të gjitha ndryshimet aksidentale ose të qëllimshme në grupin e informacionit. Vlera e përftuar nga funksioni hash gjatë përpunimit të mesazhit hyrës i shtohet mesazhit në momentin kur dihet se mesazhi është i saktë. Marrësi verifikon integritetin e mesazhit duke llogaritur imitimin e mesazhit të marrë dhe duke e krahasuar atë me kodin hash të marrë, i cili duhet të transmetohet në mënyrë të sigurt. Një nga metodat e tilla të sigurta mund të jetë kriptimi i imitimit me çelësin privat të dërguesit, d.m.th. duke krijuar një nënshkrim. Është gjithashtu e mundur të kriptohet kodi hash i marrë me një algoritëm simetrik enkriptimi nëse dërguesi dhe marrësi kanë një çelës të përbashkët simetrik të enkriptimit.

Procesi i specifikuar për marrjen dhe përdorimin e një futjeje të simuluar përshkruhet në standardin vendas GOST 28147-89. Standardi propozon përdorimin e 32 biteve më pak të rëndësishme të bllokut të marrë në daljen e funksionimit të enkriptimit të të gjithë mesazhit në mënyrën e bashkimit të blloqeve të shifrimit për të kontrolluar integritetin e mesazhit të transmetuar. Në të njëjtën mënyrë, çdo bllok mund të përdoret për të formuar një insert imitues. algoritmi i enkriptimit simetrik.

Një mënyrë tjetër e mundshme për të përdorur një shifër blloku për të gjeneruar një kod hash është si më poshtë. Mesazhi origjinal përpunohet në mënyrë sekuenciale në blloqe. Blloku i fundit është i mbushur me zero, nëse është e nevojshme, ndonjëherë gjatësia e mesazhit i shtohet bllokut të fundit si një numër binar. Në çdo fazë, ne kodojmë vlerën hash të marrë në fazën e mëparshme, duke marrë si çelës bllokun aktual të mesazheve. Vlera e fundit e koduar e marrë do të jetë rezultati përfundimtar i hash-it.

Në fakt, ka disa skema të tjera të mundshme për përdorimin e një kodi blloku për të formuar një funksion hash. Le të М i - blloku i mesazhit origjinal, hi - vlera e funksionit hash në fazën i-të, f - algoritmi i enkriptimit të bllokut i përdorur në modalitetin e thjeshtë të zëvendësimit, - funksionimi i modulit të mbledhjes 2. Më pas, për për shembull, skemat e mëposhtme për formimin e funksionit hash janë të mundshme:

Në të gjitha këto skema, gjatësia e vlerës së gjeneruar hash është e barabartë me gjatësinë e bllokut të koduar. Të gjitha këto, si dhe disa skema të tjera për përdorimin e algoritmit të enkriptimit të bllokut për llogaritjen e vlerave të hash-it, mund të zbatohen në praktikë.

Disavantazhi kryesor i funksioneve hash të dizajnuara në bazë të algoritmeve të bllokut është shpejtësia relativisht e ulët e funksionimit. Forca e kërkuar kriptografike mund të arrihet në një numër më të vogël operacionesh në të dhënat hyrëse. Ekzistojnë algoritme më të shpejtë të hashimit, të dizajnuara në mënyrë të pavarur, nga e para, bazuar në kërkesat e forcës kriptografike (më të zakonshmet prej tyre janë MD5, SHA-1, SHA-2 dhe GOST R 34.11-94).

etj). Zgjedhja e një funksioni hash të veçantë përcaktohet nga specifikat e problemit që zgjidhet. Shembujt më të thjeshtë të funksioneve hash janë checksum ose CRC.

Në rastin e përgjithshëm, nuk ka korrespondencë një-për-një ndërmjet të dhënave origjinale dhe kodit hash. Prandaj, ka shumë grupe të dhënash që japin të njëjtat kode hash - të ashtuquajturat përplasje. Mundësia e përplasjeve luan një rol të rëndësishëm në vlerësimin e "cilësisë" së funksioneve hash.

Shumat e kontrollit

I pakomplikuar, jashtëzakonisht i shpejtë dhe lehtësisht i zbatueshëm në algoritmet harduerike të përdorura për të mbrojtur kundër shtrembërimeve të paqëllimshme, duke përfshirë gabimet e harduerit.

Për sa i përket shpejtësisë së llogaritjes, është dhjetëra e qindra herë më i shpejtë se funksionet hash kriptografike dhe shumë më i thjeshtë në zbatimin e harduerit.

Pagesa për një shpejtësi kaq të lartë është mungesa e forcës kriptografike - një mundësi e lehtë për të rregulluar një mesazh në një shumë të paracaktuar. Gjithashtu, zakonisht bititeti i shumave kontrolluese (numri tipik: 32 bit) është më i ulët se hashët kriptografikë (numrat tipikë: 128, 160 dhe 256 bit), që nënkupton mundësinë e përplasjeve të paqëllimshme.

Rasti më i thjeshtë i një algoritmi të tillë është ndarja e një mesazhi në fjalë 32 ose 16-bit dhe mbledhja e tyre, e cila përdoret, për shembull, në TCP / IP.

Në mënyrë tipike, një algoritëm i tillë kërkohet për të gjurmuar gabimet tipike të harduerit, siç janë disa bit gabimesh të njëpasnjëshme deri në një gjatësi të caktuar. Familja e algoritmeve të ashtuquajturat. "Kodet e tepricës ciklike" i plotësojnë këto kërkesa. Këto përfshijnë, për shembull, CRC32 të përdorur në harduerin ZIP.

Funksionet hash kriptografike

Midis shumë funksioneve ekzistuese hash, është zakon të dallohen ato kriptografikisht të forta që përdoren në kriptografi. Para së gjithash duhet të ketë një funksion hash kriptografikisht të fortë rezistenca ndaj përplasjes dy llojesh:

Duke përdorur hashing

Funksionet hash përdoren gjithashtu në disa struktura të dhënash si tabelat hash dhe pemët karteziane. Kërkesat për funksionin hash në këtë rast janë të ndryshme:

  • përzierje e mirë e të dhënave
  • algoritmi i shpejtë i llogaritjes

Barazimi i të dhënave

Në përgjithësi, ky aplikacion mund të përshkruhet si kontrollimi i disa informacioneve për identitetin me origjinalin, pa përdorur origjinalin. Për verifikim, përdoret vlera hash e informacionit që verifikohet. Ekzistojnë dy drejtime kryesore të këtij aplikacioni:

Kontrollimi për gabime

Për shembull, shuma e kontrollit mund të transmetohet përmes kanalit të komunikimit së bashku me tekstin kryesor. Në fundin marrës, shuma e kontrollit mund të rillogaritet dhe të krahasohet me vlerën e transmetuar. Nëse konstatohet një mospërputhje, do të thotë se ka pasur shtrembërim gjatë transmetimit dhe mund të kërkoni një riprovim.

Në këtë rast, një analog shtëpiak i hashimit mund të jetë një teknikë kur, kur lëvizni, numri i pjesëve të bagazheve mbahet në kujtesë. Pastaj, për të kontrolluar, nuk keni nevojë të mbani mend për secilën valixhe, por mjafton t'i numëroni ato. Një ndeshje do të thotë që asnjë valixhe nuk ka humbur. Kjo do të thotë, numri i pjesëve të bagazheve është kodi i tij hash.

Kontrolli i frazës së kalimit

Në shumicën e rasteve, frazat e kalimit nuk ruhen në objektet e synuara, ruhen vetëm vlerat e tyre hash. Nuk është praktike të ruhen frazat e kalimit, pasi në rast të aksesit të paautorizuar në një skedar me fraza, sulmuesi do të zbulojë të gjitha frazat kaluese dhe do të jetë në gjendje t'i përdorë ato menjëherë, dhe kur ruan vlerat e hash-it, ai do të dijë vetëm vlerat e hash që nuk janë të kthyeshme në të dhënat origjinale, në këtë rast, në frazë kalimi. Gjatë procedurës së vërtetimit, vlera hash e frazës së futur llogaritet dhe krahasohet me atë të ruajtur.

Një shembull në këtë rast është OS GNU / Linux dhe Microsoft Windows XP. Ata ruajnë vetëm vlerat hash të frazave të kalimit nga llogaritë e përdoruesve.

Përshpejtimi i rikthimit të të dhënave

Për shembull, kur shkruani fusha teksti në bazën e të dhënave, kodi i tyre hash mund të llogaritet dhe të dhënat mund të vendosen në seksionin që korrespondon me këtë kod hash. Më pas, kur kërkoni të dhëna, së pari do t'ju duhet të llogarisni kodin hash të tekstit dhe menjëherë do të bëhet e ditur se në cilin seksion duhet t'i kërkoni ato, domethënë nuk do t'ju duhet të kërkoni në të gjithë bazën e të dhënave, por vetëm në një nga seksionet e tij (kjo përshpejton shumë kërkimin).

Analogu i përditshëm i hashimit në këtë rast mund të jetë vendosja e fjalëve në fjalor sipas alfabetit. Shkronja e parë e një fjale është kodi i saj hash dhe kur kërkojmë, nuk shikojmë të gjithë fjalorin, por vetëm shkronjën e kërkuar.

Lista e algoritmeve

  • SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512)
  • RIPEMD-160
  • RIPEMD-320
  • Snefru
  • Tigri (Whirlpool
  • Shuma e kontrollit të internetit IP (RFC 1071)

Lidhjet

Fondacioni Wikimedia. 2010.

  • Hashan Moheyan
  • Kodi hash

Shihni se çfarë është një "funksion hash" në fjalorë të tjerë:

    Funksioni hash- një funksion që has një grup të dhënash duke hartuar vlerat nga një grup (shumë) i madh vlerash në një grup (në mënyrë domethënëse) më të vogël vlerash. Në anglisht: Funksioni hash Shih gjithashtu: Algoritmet kriptografike Financiare ... ... Fjalori financiar

    funksion hash kriptografik- Një funksion që konverton tekstin me gjatësi arbitrare në tekst me gjatësi fikse (në shumicën e rasteve më të shkurtër). Aplikimi kryesor i funksionit hash gjendet në skemën e nënshkrimit dixhital. Meqenëse funksioni hash llogaritet më shpejt se një nënshkrim dixhital, në vend të ... ...

    Funksioni hash me një drejtim- funksion hash, i cili është një funksion i pakthyeshëm llogaritës. Në anglisht: Funksioni hash me një drejtim Shih gjithashtu: Algoritmet kriptografike Fjalori financiar Finam ... Fjalori financiar

    TIGER - funksion hash- Funksioni hash TIGER, i zhvilluar nga Ros Anderson dhe Eli Biham në 1996. Funksioni hash TIGER është një funksion i ri hash i shpejtë që është krijuar për të qenë shumë i shpejtë në kompjuterët modernë, veçanërisht në kompjuterët 64-bit. TIGER ... ... Wikipedia

    funksion hash në një drejtim- Për një funksion njëkahësh, është llogaritëse e pamundur të gjesh dy argumente të ndryshëm për të cilët vlerat e tij janë të njëjta. [] Temat siguria e informacionit EN funksioni hash në një drejtim ... Udhëzues teknik i përkthyesit

    Tiger (funksion hash)- Funksioni hash i Tiger, i zhvilluar nga Ros Anderson dhe Eli Biham në 1995. Tiger u krijua për të funksionuar veçanërisht shpejt në kompjuterë 64-bit. Tiger nuk ka kufizime për patentë, mund të përdoret lirisht si me ... ... Wikipedia

    funksion hashing- Funksioni hash 1. Një funksion që kontrollon procesin e futjes së të dhënave në një tabelë hash, duke përcaktuar (adresat e qelizave të lira. 2. Një funksion që përfaqëson hartëzimin e një fragmenti të një mesazhi të hapur në një varg të koduar me gjatësi fikse. Në . .. ... Udhëzues teknik i përkthyesit

    Tabela hash- Në programim, një tabelë hash është një strukturë e të dhënave që zbaton ndërfaqen e një grupi shoqërues, domethënë, ju lejon të ruani çifte (çelës, vlerë) dhe të kryeni tre operacione: operacionin e shtimit të një çifti të ri, një operacion kërkimi dhe një operacion fshirjeje ... Wikipedia

    Kodi hash- Hashing (nganjëherë hash) konvertimin e një grupi të dhënash hyrëse me gjatësi arbitrare në një varg bit-sh dalës me një gjatësi fikse. Transformime të tilla quhen gjithashtu funksione hash ose funksione fold, dhe rezultatet e tyre ... ... Wikipedia

    Përplasja e funksionit hash- Përplasja e funksionit hash H është dy blloqe të ndryshme hyrëse të të dhënave x dhe y të tilla që H (x) = H (y). Përplasjet ekzistojnë për shumicën e funksioneve hash, por për funksionet hash "të mira" frekuenca e shfaqjes së tyre është afër minimumit teorik. Në ... ... Wikipedia

Ose Funksioni hash është funksioni, i kthen të dhënat hyrëse të çdo madhësie (zakonisht të madhe) në të dhëna të një madhësie fikse. Hashimi(ndonjehere G yeshuvannya, eng. Hashing)- konvertimi i një grupi të dhënash hyrëse me gjatësi arbitrare në një varg bitsh dalës me gjatësi fikse. Shndërrime të tilla quhen gjithashtu funksionet hash ose funksionet e konvolucionit, dhe rezultatet e tyre quhen hash, kod hash, shuma hash, ose tret mesazhet(eng. Përmbledhja e mesazhit).

Funksioni hash përdoret veçanërisht në strukturat e të dhënave - tabelat hash, përdoret gjerësisht në softuer për marrjen e shpejtë të të dhënave. Funksionet hash përdoren për të optimizuar tabelat dhe bazat e të dhënave duke pasur të njëjtat vlera hash në të njëjtat rekorde. Kjo qasje e gjetjes së dublikatave është efektive në skedarë të mëdhenj. Një shembull i këtij zbulimi të vendeve të ngjashme në sekuencat e ADN-së. Një funksion hash kriptografik e bën të lehtë verifikimin që një pjesë e hyrjes përputhet me një vlerë të caktuar hash, por nëse hyrja është e panjohur, është qëllimisht e vështirë të rindërtohet vlera e hyrjes (ose një alternativë ekuivalente) duke ditur vlerën e ruajtur hash. Kjo përdoret për të siguruar integritetin e të dhënave të transmetuara dhe është blloku ndërtues për HMAC, të cilat ofrojnë vërtetimin e mesazheve.

Funksionet e hash janë të lidhura (dhe shpesh ngatërrohen) me shumat, shifrat kontrolluese, shenjat e gishtërinjve, randomizimin e funksioneve, kodet, korrigjimin e gabimeve dhe shifrat. Ndërsa këto koncepte mbivendosen në një farë mase, secili ka qëllimin dhe kërkesat e veta dhe është projektuar dhe optimizuar në mënyra të ndryshme.

Histori

Donald Knuth ia vlerëson idenë e parë sistematike të hash-it punonjësit të IBM Hans Peter Lohn, i cili propozoi hash-in në janar 1953.

Në vitin 1956, Arnold Dumy, në librin e tij Computers and Automation, ishte i pari që prezantoi konceptin e hashimit siç e njohin shumica e programuesve sot. Duma e konsideroi hashimin si një zgjidhje për "problemin e fjalorit", dhe gjithashtu sugjeroi përdorimin e pjesës së mbetur të pjesëtimit me një numër të thjeshtë si një adresë hash.

Puna e parë e rëndësishme në lidhje me kërkimin e skedarëve të mëdhenj ishte artikulli i Wesley Peterson në IBM Journal of Research and Development 1957 në të cilin ai përcaktoi adresimin e hapur dhe gjithashtu vuri në dukje degradimin në performancë kur fshihej. Gjashtë vjet më vonë, vepra e Werner Buchholz u botua, e cila eksploroi kryesisht funksionet hash. Gjatë viteve të ardhshme, hashimi u përdor gjerësisht, por asnjë punë e rëndësishme nuk u botua.

Në vitin 1967, hashing në kuptimin modern përmendet në librin Principles of Digital Computing nga Herbert Hellerman. Në vitin 1968, Robert Morris botoi në Komunikimet e ACM përmbledhje e shkëlqyer rreth hashimit. Kjo vepër konsiderohet si një botim që fut në qarkullimin shkencor konceptin e hashimit dhe përfundimisht konsolidon termin “hash” tek specialistët.

Nga fillimi i viteve 1990, ekuivalenti i termit "hashing", falë veprave të Andrey Ershov, ishte fjala "plejadë" në botimin në gjuhën ruse të librit të Niklaus Wirth "Algoritmet dhe strukturat e të dhënave" (1989) ky term është përdoret.) Megjithatë, asnjë nga këto opsione nuk u kap dhe në literaturë përdoret kryesisht termi "hashing".

Përshkrim

Hashing përdoret për të ndërtuar grupe shoqëruese, për të kërkuar dublikatë në seri grupesh të dhënash, për të ndërtuar identifikues unikë për grupet e të dhënave, për të identifikuar gabimet aksidentale ose të qëllimshme gjatë ruajtjes ose transmetimit, për të ruajtur fjalëkalimet në sistemet e sigurisë (në këtë rast, aksesi në zona e kujtesës " memoria, ku ndodhen fjalëkalimet, nuk lejon rikuperimin e vetë fjalëkalimit), kur krijoni një nënshkrim elektronik (në praktikë, shpesh nuk është vetë mesazhi që nënshkruhet, por imazhi i tij hash).

Në rastin e përgjithshëm, nuk ka korrespondencë një-për-një midis të dhënave origjinale dhe kodit hash për faktin se numri i vlerave të funksioneve hash është më i vogël se numri i varianteve të vlerave të hyrjes. varg. Ka shumë grupe me përmbajtje të ndryshme, por ato japin të njëjtat kode hash - të ashtuquajturat përplasje. Mundësia e përplasjeve luan një rol të rëndësishëm në vlerësimin e cilësisë së funksioneve hash.

Ka shumë algoritme hashing me veti të ndryshme (thellësia e bitit, kompleksiteti llogaritës, forca kriptografike, etj.). Zgjedhja e një funksioni hash të veçantë përcaktohet nga specifikat e problemit që zgjidhet. Shembujt më të thjeshtë të funksioneve hash janë checksum ose CRC.

Llojet e funksioneve hash

Një funksion i mirë hash duhet të plotësojë dy veti:

  • Llogaritni shpejt;
  • Minimizoni numrin e përplasjeve

Le të themi, për saktësi, numri i çelësave dhe funksioni hash nuk ka më shumë se vlera të ndryshme:

Një shembull i një funksioni hash "të keq" është funksioni c, i cili përputhet me një numër natyror dhjetëshifror me tre shifra, të zgjedhur nga mesi i katrorit njëzetshifror të numrit. Duket se vlera e kodeve hash duhet të shpërndahet në mënyrë të barabartë midis "000" dhe "999", por për të dhëna reale kjo metodë është e përshtatshme vetëm nëse çelësat nuk kanë një numër të madh zero në të majtë ose në të djathtë.

Megjithatë, ka disa metoda të tjera të thjeshta dhe të besueshme mbi të cilat bazohen shumë funksione hash.

Funksionet hash të bazuara në ndarje

Metoda e parë është ajo që ne përdorim si hash - pjesa e mbetur e ndarjes me, ku është numri i të gjithë hasheve të mundshëm:

Në të njëjtën kohë, është e qartë se me një palë, mënyra e kursimit çiftohet, me një palë. Dhe tek - me tek, gjë që mund të çojë në një ndryshim të rëndësishëm të të dhënave në skedarë. Gjithashtu, nuk duhet të përdorni sistemin numerik të kompjuterit si bazë, pasi hash-i do të varet vetëm nga disa shifra të numrit të vendosur në të djathtë, gjë që do të çojë në shumë përplasje. Në praktikë, zakonisht zgjidhet e thjeshta - në shumicën e rasteve kjo zgjedhje është mjaft e kënaqshme.

Duhet thënë gjithashtu për metodën e hashimit, e cila bazohet në ndarjen me log modulo dy. Në këtë metodë, duhet të jetë gjithashtu një fuqi prej dy, dhe çelësat binare () kanë formën e polinomeve. Në këtë rast, vlerat e koeficientëve të polinomit të marrë si pjesa e mbetur e pjesëtimit me një shkallë polinomi të parazgjedhur merren si kod hash:

Me zgjedhjen e duhur, kjo metodë garanton që të mos ketë përplasje midis çelësave pothuajse identikë.

Skema shumëfishuese e hashimit

Metoda e dytë konsiston në zgjedhjen e një konstante të plotë, relativisht të thjeshtë, ku është numri i varianteve të mundshme të vlerave në formën e një fjale kompjuterike (në kompjuterët PC IBM). Atëherë mund të marrim një funksion hash të formës:

Në këtë rast, në një kompjuter me një sistem numrash binar, ai është një fuqi prej dy, dhe përbëhet nga pjesët më domethënëse të gjysmës së djathtë të produktit.

Ndër avantazhet e këtyre dy metodave, vlen të përmendet se ato përfitojnë nga fakti që çelësat e vërtetë nuk janë të rastësishëm. Për shembull, nëse çelësat përfaqësojnë një progresion aritmetik (le të themi sekuencën e emrave "emri1", "emri2", "emri3"). Metoda shumëzuese do të shfaqë një progresion aritmetik në një progresion të përafërt aritmetik të vlerave të ndryshme hash, duke reduktuar numrin e përplasjeve në krahasim me një situatë të rastësishme.

Një nga variacionet e kësaj metode është hashimi i Fibonacci, bazuar në vetitë e raportit të artë. Këtu numri i plotë më i afërt me, coprime me

Hashimi i vargjeve me gjatësi të ndryshueshme

Metodat e mësipërme përdoren gjithashtu kur duhet të marrim parasysh çelësat që përbëhen nga disa fjalë ose çelësa me gjatësi të ndryshueshme. Për shembull, ju mund të kombinoni fjalë në një duke përdorur shtimin modulo ose shtimin modulo 2. Një nga algoritmet që funksionon në këtë parim është funksioni hash i Pearson.

Pearson hashing është një algoritëm i propozuar nga Peter Pearson. Peter Pearson) për procesorët me regjistra 8-bitësh, detyra e të cilëve është të llogaritin shpejt kodin hash për një varg me gjatësi arbitrare. Si hyrje, funksioni merr një fjalë të përbërë nga karaktere, çdo 1 bajt në madhësi dhe kthen një vlerë në intervalin nga 0 në 255. Vlera e kodit hash varet nga çdo karakter i fjalës hyrëse.

Algoritmi mund të përshkruhet me pseudokodin e mëposhtëm, i cili merr një varg si hyrje dhe përdor një tabelë ndërrimi

h: = 0 Per secilin c W lak indeksi: = h xor ch: = T Lak fundor Kthimi h

Ndër avantazhet e algoritmit, duhet të theksohet:

  • lehtësia e llogaritjes;
  • nuk ka të dhëna hyrëse për të cilat probabiliteti i përplasjes është më i madhi;
  • mundësia e modifikimit në një funksion hash ideal.

Si një mënyrë alternative e hashimit të çelësave të përbërë nga simbole (), mund të propozohen llogaritjet

Përdorimi i funksioneve hash

Funksionet hash përdoren gjerësisht në kriptografi, si dhe në shumë struktura të dhënash si tabelat hash, filtrat Bloom dhe pemët karteziane.

Funksionet hash kriptografike

Midis shumë funksioneve ekzistuese hash, është zakon të dallohen ato kriptografikisht të forta të përdorura në kriptografi, pasi atyre u imponohen kërkesa shtesë. Që një funksion hash të konsiderohet i sigurt kriptografikisht, ai duhet të plotësojë tre kërkesa themelore mbi të cilat bazohen shumica e përdorimeve të funksioneve hash në kriptografi:

  • Pakthyeshmëria: për një vlerë të caktuar hash m duhet të jetë nga ana llogaritëse e pamundur gjetja e bllokut të të dhënave për të cilin.
  • Qëndrueshmëria përplasjet e llojit të parë: për një mesazh të dhënë M duhet të jetë llogaritëse e pamundur të merret një tjetër mesazh N për të cilën.
  • Qëndrueshmëria për të përplasjet lloji i dytë: duhet të jetë llogaritëse e pamundur të gjesh një palë mesazhesh që kanë të njëjtin hash.

Këto kërkesa varen nga njëra-tjetra:

  • Funksioni i kundërt nuk është rezistent ndaj përplasjeve të llojit të parë dhe të dytë.
  • Funksion që nuk është rezistent ndaj përplasjeve të llojit të parë, jo rezistent ndaj përplasjeve të llojit të dytë; e kundërta nuk është e vërtetë.

Duhet të theksohet se ekzistenca e funksioneve hash të pakthyeshme nuk është vërtetuar, për të cilat teorikisht është e pamundur të llogaritet ndonjë paraimazh i një vlere të caktuar hash. Zakonisht, gjetja e reciprokes është vetëm një detyrë e vështirë llogaritëse.

Sulmi i ditëlindjes ju lejon të gjeni përplasje për një funksion hash me vlerat e gjatësisë n bit mesatarisht për llogaritjen përafërsisht hash. Kështu që n - një funksion hash bit konsiderohet i fshehtë nëse kompleksiteti llogaritës i gjetjes së përplasjeve për të është afër.

Për funksionet hash kriptografike, është gjithashtu e rëndësishme që në ndryshimin më të vogël të argumentit, vlera e funksionit të ndryshojë shumë (efekti i ortekëve). Në veçanti, vlera hash nuk duhet të rrjedhë informacione, madje edhe për pjesët individuale të argumentit. Kjo kërkesë është çelësi i fuqisë kriptografike të algoritmeve të hashimit që hash fjalëkalimin e përdoruesit për të marrë çelësin.

Hashimi përdoret shpesh në algoritmet e nënshkrimit dixhital, ku jo vetë mesazhi është i koduar, por hash-i i tij, i cili redukton kohën e llogaritjes dhe gjithashtu rrit fuqinë kriptografike. Gjithashtu, në shumicën e rasteve, në vend të fjalëkalimeve, ruhen vlerat e kodeve të tyre hash.

Hashimi gjeometrik

Hashimi gjeometrik (eng. Hashimi gjeometrik)- një metodë e përdorur gjerësisht në grafikën kompjuterike dhe gjeometrinë llogaritëse për zgjidhjen e problemeve në një plan ose në hapësirën tredimensionale, për shembull, për të gjetur çiftet më të afërta në një grup pikash ose për të kërkuar imazhe identike. Funksioni hash në këtë metodë zakonisht merr një hapësirë ​​metrike si hyrje dhe e ndan atë, duke krijuar një rrjet qelizash. Tabela në këtë rast është një grup me dy ose më shumë indekse dhe quhet skedar rrjeti (eng. Skedari i rrjetit). Hashimi gjeometrik përdoret gjithashtu në telekomunikacion kur kemi të bëjmë me sinjale shumëdimensionale.

Përshpejtimi i rikthimit të të dhënave

Një tabelë hash është një strukturë të dhënash që ju lejon të ruani çifte të formularit (çelës, kod hash) dhe mbështet operacionet për kërkimin, futjen dhe fshirjen e elementeve. Detyra e tabelave hash është të shpejtojnë kërkimet, për shembull, në rastin e regjistrimeve në fushat e tekstit në bazën e të dhënave, kodi i tyre hash mund të llogaritet dhe të dhënat mund të vendosen në seksionin që korrespondon me këtë kod hash. Më pas, gjatë kërkimit të të dhënave, së pari do të jetë e nevojshme të llogaritet hash-i i tekstit dhe menjëherë do të bëhet e ditur se në cilin seksion është e nevojshme të kërkoni, domethënë nuk do të jetë e nevojshme të kërkoni në të gjithë bazën e të dhënave, por vetëm një nga seksionet e tij (kjo përshpejton shumë kërkimin).

Analogu i përditshëm i hashimit në këtë rast mund të jetë vendosja e fjalëve në fjalor sipas alfabetit. Shkronja e parë e një fjale është kodi i saj hash dhe kur kërkojmë, nuk shikojmë të gjithë fjalorin, por vetëm shkronjën e kërkuar.

Algoritmet e hashimit të vargjeve mund t'ju ndihmojnë të zgjidhni shumë probleme. Por ata kanë një pengesë të madhe: më shpesh ato nuk janë 100%, pasi ka shumë vargje, hash-et e të cilëve përputhen. Një gjë tjetër është se në shumicën e detyrave mund ta injoroni këtë, pasi probabiliteti i hasheve që përkojnë është ende shumë i vogël.

Përkufizimi dhe llogaritja e hash-it

Një nga mënyrat më të mira për të përcaktuar funksionin hash nga vargu S është si më poshtë:

H (S) = S + S * P + S * P ^ 2 + S * P ^ 3 + ... + S [N] * P ^ N

ku P është një numër.

Është e arsyeshme të zgjidhni një numër të thjeshtë për P, afërsisht të barabartë me numrin e karaktereve në alfabetin e hyrjes. Për shembull, nëse vargjet supozohet se përbëhen vetëm nga shkronja të vogla latine, atëherë P = 31 është një zgjedhje e mirë. Nëse shkronjat mund të jenë edhe të mëdha edhe të vogla, atëherë, për shembull, mund të P = 53.

Të gjitha pjesët e kodit në këtë artikull do të përdorin P = 31.

Është e dëshirueshme të ruhet vetë vlera e hash-it në llojin më të madh numerik - int64, aka long long. Natyrisht, me një gjatësi vargu prej rreth 20 karaktere, tashmë do të ndodhë një tejkalim vlere. Pika kryesore është se ne nuk u kushtojmë vëmendje këtyre tejmbushjeve, sikur të marrim modulin hash 2 ^ 64.

Një shembull i llogaritjes së një hash nëse lejohen vetëm shkronja të vogla latine:

Const int p = 31; hash i gjatë i gjatë = 0, p_pow = 1; për (madhësia_t i = 0; i

Në shumicën e problemeve, ka kuptim që së pari të llogariten të gjitha fuqitë e kërkuara të P në një grup.

Shembull i detyrës. Kërkoni për vargje të kopjuara

Ne jemi tashmë në një pozicion për të zgjidhur në mënyrë efektive këtë problem. Ju jepet një listë e vargjeve S, secila prej jo më shumë se M karaktere në gjatësi. Le të themi se dëshironi të gjeni të gjitha rreshtat e kopjuar dhe t'i ndani ato në grupe në mënyrë që secili grup të përmbajë vetëm të njëjtat rreshta.

Me renditjen normale të vargjeve, do të merrnim një algoritëm me kompleksitet O (N M log N), ndërsa duke përdorur hash, do të merrnim O (N M + N log N).

Algoritmi. Le të llogarisim hash-in nga çdo rresht dhe t'i renditim rreshtat sipas këtij hash.

Vektor s (n); // ... leximi i vargjeve ... // numëroni të gjitha fuqitë e p, të themi, deri në 10000 - gjatësia maksimale e vargjeve konsiston int p = 31; vektoriale p_pow (10000); p_pow = 1; për (madhësia_t i = 1; i > hash (n); për (int i = 0; i

Hash-i i nënstringut dhe llogaritja e tij e shpejtë

Supozoni se na jepet një varg S, dhe jepen indekset I dhe J. Ju dëshironi të gjeni hash nga nënvargu S.

Sipas përkufizimit, ne kemi:

H = S [I] + S * P + S * P ^ 2 + ... + S [J] * P ^ (J-I)

H * P [I] = S [I] * P [I] + ... + S [J] * P [J], H * P [I] = H - H

Kjo pronë është shumë e rëndësishme.

Në të vërtetë, rezulton se, duke ditur vetëm hash-et nga të gjitha parashtesat e vargut S, mund të marrim hash-in e çdo nënvargu në O (1).

Problemi i vetëm që lind është se ju duhet të jeni në gjendje të pjesëtoni me P [I]. Në fakt, nuk është aq e lehtë. Meqenëse po llogarisim modulin hash 2 ^ 64, atëherë për të pjesëtuar me P [I] duhet të gjejmë inversin e tij në fushë (për shembull, duke përdorur algoritmin Euklidian të Zgjeruar) dhe të kryejmë shumëzimin me këtë invers.

Megjithatë, ekziston një mënyrë më e lehtë. Në shumicën e rasteve, në vend që të ndani hash-et me fuqitë e P, përkundrazi, mund t'i shumëzoni ato me këto fuqi.

Le të themi se keni dy hash: një i shumëzuar me P [I] dhe tjetri i shumëzuar me P [J]. Nese une< J, то умножим перый хэш на P, иначе же умножим второй хэш на P. Теперь мы привели хэши к одной степени, и можем их спокойно сравнивать.

Për shembull, kodi që llogarit hash-et e të gjitha parashtesave dhe më pas krahason dy nënvargje në O (1):

Vargu s; int i1, i2, len; // të dhëna hyrëse // numëroni të gjitha fuqitë e p const int p = 31; vektoriale i2 && h1 == h2 * p_pow) cout<< "equal"; else cout << "different";

Duke përdorur hashing

Disa përdorime tipike për hash përfshijnë:

  • Përcaktimi i numrit të nënvargjeve të dallueshme në O (N ^ 2 log N) (shih më poshtë)
  • Përcaktimi i numrit të palindromave brenda një vargu

Përcaktimi i numrit të nënvargjeve të dallueshme

Le të jepet një varg S me gjatësi N, i përbërë vetëm nga shkronja të vogla latine. Ju dëshironi të gjeni numrin e nënvargjeve të dallueshme në këtë varg.

Për të zgjidhur, ne përsërisim në gjatësinë e nënvargut me radhë: L = 1 .. N.

Për çdo L, ne do të ndërtojmë një grup hashësh të nënvargjeve me gjatësi L, dhe do t'i reduktojmë hash-et në një shkallë, dhe do ta renditim këtë grup. Numri i elementeve të ndryshëm në këtë grup i shtohet përgjigjes.

Zbatimi:

Vargu s; // vargu i hyrjes int n = (int) s.gjatësia (); // numëroni të gjitha fuqitë e p konst int p = 31; vektoriale p_pow (s.gjatësia ()); p_pow = 1; për (madhësia_t i = 1; i H (gjatësia ()); për (madhësia_t i = 0; i hs (n-l + 1); për (int i = 0; i

Funksionet hash përdoren në një shumëllojshmëri të gjerë të industrive të teknologjisë së informacionit. Ato synojnë, nga njëra anë, të thjeshtojnë shumë shkëmbimin e të dhënave midis përdoruesve dhe përpunimin e skedarëve të përdorur për qëllime të ndryshme, nga ana tjetër, të optimizojnë algoritmet për të siguruar kontrollin e aksesit në burimet përkatëse. Funksioni hash është një nga mjetet kryesore për të siguruar mbrojtjen me fjalëkalim të të dhënave, si dhe organizimin e shkëmbimit të dokumenteve të nënshkruara duke përdorur EDS. Ka një numër të madh standardesh me të cilat mund të kryhet memoria e skedarëve. Shumë prej tyre u zhvilluan nga specialistë rusë. Në çfarë shijesh mund të vijnë funksionet hash? Cilët janë mekanizmat kryesorë për zbatimin praktik të tyre?

Cfare eshte?

Së pari, le të shqyrtojmë konceptin e një funksioni hash. Ky term zakonisht kuptohet si një algoritëm për konvertimin e një sasie të caktuar informacioni në një sekuencë më të shkurtër karakteresh duke përdorur metoda matematikore. Rëndësia praktike e funksionit hash mund të gjurmohet në një larmi fushash. Pra, ato mund të përdoren kur kontrolloni skedarët dhe programet për integritet. Gjithashtu, funksionet hash kriptografike përdoren në algoritmet e enkriptimit.

Specifikimet

Le të shqyrtojmë karakteristikat kryesore të algoritmeve në studim. Ndër to:

  • prania e algoritmeve të brendshme për konvertimin e të dhënave të gjatësisë origjinale në një sekuencë më të shkurtër karakteresh;
  • hapja ndaj verifikimit kriptografik;
  • prania e algoritmeve që ju lejojnë të kriptoni me besueshmëri të dhënat origjinale;
  • përshtatshmëria ndaj deshifrimit kur përdoret fuqi e vogël llogaritëse.

Veti të tjera të rëndësishme të funksionit hash përfshijnë:

  • aftësia për të përpunuar grupe të dhënash fillestare me gjatësi arbitrare;
  • gjenerojnë blloqe hash me gjatësi fikse;
  • shpërndani në mënyrë të barabartë vlerat e funksionit në dalje.

Algoritmet e konsideruara gjithashtu supozojnë ndjeshmëri ndaj të dhënave në hyrje në nivelin 1 bit. Kjo do të thotë, edhe nëse, duke folur relativisht, të paktën 1 shkronjë ndryshon në dokumentin origjinal, funksioni hash do të duket i ndryshëm.

Kërkesat për hash

Ekzistojnë një sërë kërkesash për funksionet hash të dizajnuara për përdorim praktik në një zonë të caktuar. Së pari, algoritmi përkatës duhet të jetë i ndjeshëm ndaj ndryshimeve në strukturën e brendshme të dokumenteve të hash. Kjo do të thotë, funksioni hash duhet të njihet, kur bëhet fjalë për një skedar teksti, ndërrim të paragrafit, ndarje me vizë. Nga njëra anë, përmbajtja e dokumentit nuk ndryshon, nga ana tjetër, struktura e tij rregullohet dhe ky proces duhet të njihet gjatë hashimit. Së dyti, algoritmi i konsideruar duhet të transformojë të dhënat në mënyrë që operacioni i kundërt (konvertimi i hash-it në dokumentin origjinal) të jetë i pamundur në praktikë. Së treti, funksioni hash duhet të supozojë përdorimin e algoritmeve që praktikisht përjashtojnë mundësinë e formimit të së njëjtës sekuencë karakteresh në formën e një hash, me fjalë të tjera, shfaqjen e të ashtuquajturave përplasje. Ne do të shqyrtojmë thelbin e tyre pak më vonë.

Kërkesat e shënuara që duhet të plotësojë algoritmi i funksionit hash mund të përmbushen kryesisht nëpërmjet përdorimit të qasjeve komplekse matematikore.

Struktura

Le të shqyrtojmë se cila mund të jetë struktura e funksioneve në shqyrtim. Siç e theksuam më lart, ndër kërkesat kryesore për algoritmet në shqyrtim është sigurimi i enkriptimit me një drejtim. Një person që ka në dispozicion vetëm një hash, praktikisht nuk duhet të jetë në gjendje të marrë dokumentin origjinal prej tij.

Në çfarë strukture mund të përfaqësohet një funksion hash i përdorur për qëllime të tilla? Një shembull i përpilimit të tij mund të jetë si më poshtë: H (hash, domethënë hash) = f (T (tekst), H1), ku H1 është një algoritëm i përpunimit të tekstit T. Ky funksion has T në atë mënyrë që pa e ditur H1, hapja e tij si një skedar i plotë do të jetë pothuajse i pamundur.

Përdorimi i funksioneve hash në praktikë: shkarkimi i skedarëve

Le të studiojmë tani më në detaje opsionet për përdorimin e funksioneve hash në praktikë. Përdorimi i algoritmeve të përshtatshme mund të përdoret gjatë shkrimit të skripteve për shkarkimin e skedarëve nga serverët e Internetit.

Në shumicën e rasteve, një kontroll i caktuar përcaktohet për çdo skedar - ky është hash. Duhet të jetë e njëjtë për objektin e vendosur në server dhe të shkarkuar në kompjuterin e përdoruesit. Nëse nuk është kështu, atëherë skedari mund të mos hapet ose mund të mos fillojë plotësisht.

Funksioni hash dhe nënshkrimi dixhital

Përdorimi i funksioneve hash është i përhapur kur organizohet shkëmbimi i dokumenteve që përmbajnë një nënshkrim dixhital. Në këtë rast, skedari që do të nënshkruhet hashohet në mënyrë që marrësi të verifikojë se është origjinal. Megjithëse funksioni hash nuk është formalisht pjesë e strukturës së çelësit elektronik, ai mund të kapet në memorien flash të harduerit me të cilin janë nënshkruar dokumentet, siç është, për shembull, eToken.

Një nënshkrim elektronik është enkriptimi i një skedari duke përdorur çelësa publikë dhe privatë. Kjo do të thotë, një mesazh i koduar me një çelës privat i bashkëngjitet skedarit origjinal dhe EDS verifikohet duke përdorur një çelës publik. Nëse funksioni hash i të dy dokumenteve është i njëjtë, skedari në zotërim të marrësit njihet si autentik dhe nënshkrimi i dërguesit njihet si i saktë.

Hashing, siç kemi theksuar më lart, nuk është drejtpërdrejt një komponent i një EDS, megjithatë, ju lejon të optimizoni në mënyrë shumë efektive algoritmet për përdorimin e një nënshkrimi elektronik. Pra, në fakt, vetëm hash-i mund të kodohet, dhe jo vetë dokumenti. Si rezultat, shpejtësia e përpunimit të skedarëve rritet ndjeshëm, në të njëjtën kohë bëhet e mundur të sigurohen mekanizma më efektivë për mbrojtjen e nënshkrimit dixhital, pasi theksi në operacionet llogaritëse në këtë rast do të vendoset jo në përpunimin e të dhënave fillestare, por mbi sigurimin e fuqisë kriptografike të nënshkrimit. Funksioni hash gjithashtu bën të mundur nënshkrimin e një shumëllojshmërie të gjerë të llojeve të të dhënave, jo vetëm tekst.

Kontrolli i fjalëkalimit

Një fushë tjetër e mundshme e aplikimit të hashing është organizimi i algoritmeve për kontrollimin e fjalëkalimeve të krijuara për të kufizuar aksesin në burime të caktuara skedarësh. Si mund të përfshihen këto ose lloje të tjera funksionesh hash në zgjidhjen e problemeve të tilla? Shume e thjeshte.

Fakti është se në shumicën e serverëve, qasja në të cilët është subjekt i diferencimit, fjalëkalimet ruhen si vlera hash. Kjo është mjaft logjike - nëse fjalëkalimet do të paraqiteshin në formën e tyre origjinale të tekstit, hakerët që kishin akses në to mund të lexonin lehtësisht të dhënat sekrete. Nga ana tjetër, nuk është e lehtë të llogaritet fjalëkalimi bazuar në hash.

Si kontrollohet qasja e përdoruesit kur përdoren algoritmet në shqyrtim? Fjalëkalimi i futur nga përdoruesi kontrollohet kundrejt asaj që është regjistruar në funksionin hash, i cili ruhet në server. Nëse vlerat e blloqeve të tekstit përputhen, përdoruesi merr aksesin e nevojshëm në burimet.

Funksioni më i thjeshtë hash mund të përdoret si një mjet verifikimi i fjalëkalimit. Por në praktikë, specialistët e TI-së përdorin më shpesh algoritme kriptografike komplekse me shumë faza. Si rregull, ato plotësohen nga aplikimi i standardeve për transferimin e të dhënave përmes një kanali të sigurt - në mënyrë që hakerët të mos mund të gjejnë ose llogarisin fjalëkalimin e transmetuar nga kompjuteri i përdoruesit në server - përpara se ai të kontrollohet ndaj blloqeve të tekstit të hash.

Përplasje hash

Teoria e funksioneve hash parashikon një fenomen të tillë si përplasja. Cili është thelbi i tij? Përplasja e hash-it është një situatë në të cilën dy skedarë të ndryshëm kanë të njëjtin kod hash. Kjo është e mundur nëse gjatësia e sekuencës së karaktereve të synuara është e shkurtër. Në këtë rast, gjasat që hash-i të përputhet do të jetë më i lartë.

Për të shmangur përplasjet, rekomandohet, veçanërisht, përdorimi i një algoritmi të dyfishtë të quajtur hash-funksioni hash. Ai përfshin formimin e kodit të hapur dhe të mbyllur. Gjatë zgjidhjes së problemeve kritike, shumë programues rekomandojnë të mos përdorni funksione hash në rastet kur nuk është e nevojshme dhe gjithmonë të testoni algoritmet përkatëse për pajtueshmërinë më të mirë me çelësa të caktuar.

Historia e paraqitjes

Themeluesit e teorisë së funksioneve hash mund të konsiderohen studiuesit Carter, Wegman, Simonson, Bierbrauer. Në versionet e para, algoritmet përkatëse u përdorën si një paketë veglash për formimin e imazheve unike të sekuencave të karaktereve me gjatësi arbitrare me qëllimin e mëvonshëm të identifikimit dhe verifikimit të tyre për autenticitetin. Nga ana tjetër, hash, në përputhje me kriteret e specifikuara, duhet të ketë një gjatësi prej 30-512 bit. Si një veçori veçanërisht e dobishme e funksioneve përkatëse, ne konsideruam përshtatshmërinë e tij për t'u përdorur si një burim për kërkimin e shpejtë të skedarëve ose renditjen e tyre.

Standardet e njohura të hashimit

Le të shqyrtojmë tani se në cilat standarde të njohura mund të përfaqësohen funksionet hash. Midis tyre është CRC. Ky algoritëm është një kod ciklik, i quajtur gjithashtu një shumë kontrolli. Ky standard karakterizohet nga thjeshtësia dhe në të njëjtën kohë universaliteti - mund të përdoret për të hash gamën më të gjerë të të dhënave. CRC është një nga algoritmet më të zakonshme jokriptografike.

Nga ana tjetër, standardet MD4 dhe MD5 përdoren gjerësisht në kriptim. Një tjetër algoritëm kriptografik i njohur është SHA-1. Në veçanti, karakterizohet nga një madhësi hash prej 160 bit, e cila është më e madhe se ajo e MD5 - ky standard mbështet 128 bit. Ekzistojnë standarde ruse që rregullojnë përdorimin e funksioneve hash - GOST R 34.11-94, si dhe GOST R 34.11-2012, të cilat e zëvendësuan atë. Mund të vërehet se vlera hash e ofruar nga algoritmet e miratuara në Federatën Ruse është 256 bit.

Standardet në fjalë mund të klasifikohen në baza të ndryshme. Për shembull, ka nga ata që përdorin bllok dhe algoritme të specializuara. Thjeshtësia e llogaritjeve bazuar në standardet e tipit të parë shoqërohet shpesh me shpejtësinë e tyre të ulët. Prandaj, si një alternativë ndaj algoritmeve të bllokimit, mund të përdoren ato që përfshijnë një sasi më të vogël të operacioneve të nevojshme llogaritëse. Është e zakonshme t'i referohemi standardeve të shpejtësisë së lartë, në veçanti, MD4, MD5, dhe gjithashtu SHA të lartpërmendura. Le të shqyrtojmë specifikat e algoritmeve speciale të hashimit duke përdorur SHA si shembull.

Karakteristikat e algoritmit SHA

Përdorimi i funksioneve hash bazuar në standardin SHA më së shpeshti kryhet në zhvillimin e mjeteve të nënshkrimit dixhital për dokumentet DSA. Siç e përmendëm më lart, algoritmi SHA mban një hash 160-bit (duke siguruar një të ashtuquajtur "digest" të sekuencës së karaktereve). Fillimisht, standardi në shqyrtim e ndan grupin e të dhënave në blloqe me 512 bit. Nëse është e nevojshme, nëse gjatësia e bllokut të fundit nuk arrin shifrën e specifikuar, struktura e skedarit plotësohet me 1 dhe numrin e kërkuar të zerave. Gjithashtu, në fund të bllokut përkatës, futet një kod që rregullon gjatësinë e mesazhit. Algoritmi në shqyrtim përdor 80 funksione logjike, përmes të cilave përpunohen 3 fjalë, të përfaqësuara në 32 bit. Gjithashtu, standardi SHA parashikon përdorimin e 4 konstanteve.

Krahasimi i algoritmeve të hashimit

Le të studiojmë se si lidhen vetitë e funksioneve hash që lidhen me standarde të ndryshme, duke përdorur shembullin e krahasimit të karakteristikave të standardit rus GOST R 34.11-94 dhe SHA amerikane, të cilat diskutuam më lart. Para së gjithash, duhet të theksohet se algoritmi i zhvilluar në Federatën Ruse përfshin zbatimin e 4 operacioneve të kriptimit për 1 cikël. Kjo korrespondon me 128 raunde. Nga ana tjetër, gjatë 1 raundit kur përdoret SHA, supozohet të llogariten rreth 20 komanda, ndërsa gjithsej janë 80 raunde, pra përdorimi i SHA lejon përpunimin e 512 bit të të dhënave fillestare brenda 1 cikli. Ndërsa standardi rus është i aftë të kryejë operacione për cikël prej 256 bit të dhënash.

Specifikimi i algoritmit më të fundit rus

Më lart, vumë re se standardi GOST R 34.11-94 është zëvendësuar nga një më i ri - GOST R 34.11-2012 "Stribog". Le të shqyrtojmë specifikat e tij në më shumë detaje.

Me anë të këtij standardi, funksionet hash kriptografike mund të zbatohen, siç është rasti me algoritmet e diskutuara më sipër. Mund të vërehet se standardi më i fundit rus mbështet një bllok 512-bit të të dhënave hyrëse. Përparësitë kryesore të GOST R 34.11-2012:

  • nivel i lartë i mbrojtjes kundër plasaritjes së shifrave;
  • besueshmëria e mbështetur nga përdorimi i modeleve të provuara;
  • llogaritja on-line e funksionit hash, mungesa në algoritmin e transformimeve që ndërlikojnë ndërtimin e funksionit dhe ngadalësojnë llogaritjen.

Përparësitë e vërejtura të standardit të ri rus për kriptimin kriptografik bëjnë të mundur përdorimin e tij gjatë organizimit të qarkullimit të dokumenteve që plotësojnë kriteret më të rrepta, të përcaktuara në dispozitat e legjislacionit rregullator.

Specifikimi i funksioneve hash kriptografike

Le të shqyrtojmë më në detaje se si llojet e algoritmeve që po hetojmë mund të përdoren në fushën e kriptografisë. Kërkesa kryesore për funksionet përkatëse është rezistenca ndaj përplasjes, të cilën e përmendëm më lart. Kjo do të thotë, vlerat e përsëritura të funksionit hash nuk duhet të formohen nëse këto vlera janë tashmë të pranishme në strukturën e algoritmit fqinj. Kriteret e tjera të përmendura më sipër duhet gjithashtu të plotësohen nga funksionet kriptografike. Është e qartë se ekziston gjithmonë një mundësi teorike e rikuperimit të skedarit origjinal bazuar në hash, veçanërisht nëse ekziston një mjet i fuqishëm kompjuterik në dispozicion. Sidoqoftë, një skenar i tillë supozohet të minimizohet për shkak të algoritmeve të besueshme të kriptimit. Pra, do të jetë shumë e vështirë të llogaritet funksioni hash nëse forca e tij llogaritëse korrespondon me formulën 2 ^ (n / 2).

Një tjetër kriter i rëndësishëm për një algoritëm kriptografik është një ndryshim në hash nëse grupi i të dhënave origjinale është rregulluar. Kemi theksuar më lart se standardet e kriptimit duhet të kenë një ndjeshmëri prej 1 bit. Kështu, kjo pronë është një faktor kyç në sigurimin e mbrojtjes së besueshme të fjalëkalimit për qasje në skedarë.

Skemat përsëritëse

Le të shqyrtojmë tani se si mund të ndërtohen algoritmet e hashimit kriptografik. Ndër skemat më të zakonshme për zgjidhjen e këtij problemi është përdorimi i një modeli sekuencial iterativ. Ai bazohet në përdorimin e të ashtuquajturit funksion të kompresimit, në të cilin numri i biteve hyrëse është dukshëm më i madh se ata që janë të fiksuar në dalje.

Natyrisht, funksioni i ngjeshjes duhet të plotësojë kriteret e nevojshme të forcës kriptografike. Me një skemë interaktive, operacioni i parë për përpunimin e rrjedhës së të dhënave hyrëse ndahet në blloqe, madhësia e të cilave llogaritet në bit. Algoritmi përkatës përdor gjithashtu variabla të përkohshme me një numër të caktuar bitësh. Një numër i njohur përdoret si vlerë e parë, ndërsa blloqet pasuese të të dhënave kombinohen me vlerën e funksionit në fjalë në dalje. Vlera hash është shpejtësia e biteve të daljes për përsëritjen e fundit, e cila përfshin të gjithë rrjedhën hyrëse, duke përfshirë vlerën e parë. Ofrohet i ashtuquajturi "efekt orteku" i hashing.

Vështirësia kryesore për karakterizimin e hashimit të zbatuar si një skemë përsëritëse është se ndonjëherë është e vështirë të ndërtohen funksione hash nëse rryma hyrëse nuk është identike me madhësinë e bllokut në të cilin është ndarë grupi origjinal i të dhënave. Por në këtë rast, algoritmet mund të shkruhen në standardin e hashimit me anë të të cilave rrjedha origjinale mund të zgjerohet në një mënyrë ose në një tjetër.

Në disa raste, në procesin e përpunimit të të dhënave brenda kornizës së një skeme përsëritëse, mund të përdoren të ashtuquajturat algoritme me shumë kalime. Ata sugjerojnë formimin e një “efekti orteku” edhe më intensiv. Një skenar i tillë supozon formimin e grupeve të të dhënave të përsëritura, dhe vetëm në fazën e dytë është zgjerimi.

Algoritmi i bllokimit

Funksioni i kompresimit mund të bazohet gjithashtu në një algoritëm bllok me të cilin kryhet enkriptimi. Pra, për të rritur nivelin e sigurisë, mund të përdorni blloqet e të dhënave që i nënshtrohen hashimit në përsëritjen aktuale, si çelës, dhe rezultatin e operacioneve të marra gjatë ekzekutimit të funksionit të ngjeshjes para kësaj - si hyrje. Si rezultat, përsëritja e fundit do të sigurojë daljen e algoritmit. Siguria e hashimit do të lidhet me qëndrueshmërinë e algoritmit që përdoret.

Sidoqoftë, siç e kemi theksuar më lart, duke marrë parasysh lloje të ndryshme funksionesh hash, algoritmet e bllokut shpesh shoqërohen nga nevoja për të përdorur fuqi të madhe llogaritëse. Nëse ato nuk janë të disponueshme, shpejtësia e përpunimit të skedarëve mund të jetë e pamjaftueshme për zgjidhjen e problemeve praktike që lidhen me përdorimin e funksioneve hash. Në të njëjtën kohë, forca e kërkuar kriptografike mund të realizohet me një numër të vogël operacionesh me rrjedhat fillestare të të dhënave, në veçanti, algoritmet që kemi shqyrtuar janë përshtatur për zgjidhjen e problemeve të tilla - MD5, SHA, standardet ruse të kriptimit kriptografik.

Artikujt kryesorë të lidhur