Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Gabimet
  • Çfarë është një hash dhe për çfarë shërben? Hash - çfarë është? Përkufizimi, kuptimi, përkthimi.

Çfarë është një hash dhe për çfarë shërben? Hash - çfarë është? Përkufizimi, kuptimi, përkthimi.

Siç besoj, shumë njerëz e dinë se që nga viti 2007, Instituti Kombëtar i Standardeve dhe Teknologjisë i SHBA-së (NIST) ka mbajtur një konkurs për të zhvilluar një algoritëm hash për të zëvendësuar SHA-1 dhe një familje algoritmesh SHA-2. Sidoqoftë, për disa arsye kjo temë është lënë pas dore në faqe. Kjo është në fakt ajo që më solli tek ju. Unë sjell në vëmendjen tuaj një seri artikujsh kushtuar algoritmeve hash. Në këtë seri, ne së bashku do të studiojmë bazat e funksioneve hash, do të shqyrtojmë algoritmet më të famshme të hash-it, do të zhytemi në atmosferën e konkursit SHA-3 dhe do të shqyrtojmë algoritmet që pretendojnë ta fitojnë atë, dhe ne patjetër do t'i testojmë ato. Gjithashtu, nëse është e mundur, do të merren parasysh standardet ruse të hashimit.

Rreth meje

Student i Departamentit të Sigurisë së Informacionit.

Rreth hashimit

Në ditët e sotme, pothuajse asnjë aplikacion kriptografie nuk është i plotë pa përdorimin e hashing.
Funksionet hash janë funksione të dizajnuara për të "kompresuar" një mesazh arbitrar ose grup të dhënash, zakonisht të shkruara në alfabetin binar, në një model bit me gjatësi fikse të quajtur konvolucioni. Funksionet hash kanë një sërë aplikimesh gjatë kryerjes së eksperimenteve statistikore, testimit të pajisjeve logjike dhe ndërtimit të algoritmeve për kërkime të shpejta dhe kontrollimin e integritetit të të dhënave në bazat e të dhënave. Kërkesa kryesore për funksionet hash është shpërndarja uniforme e vlerave të tyre kur vlerat e argumenteve zgjidhen rastësisht.
Një funksion hash kriptografik është çdo funksion hash që është kriptografikisht i qëndrueshëm, domethënë, ai plotëson një sërë kërkesash specifike për aplikacionet kriptografike. Në kriptografi, funksionet hash përdoren për të zgjidhur problemet e mëposhtme:
- ndërtimi i sistemeve të monitorimit të integritetit të të dhënave gjatë transmetimit ose ruajtjes së tyre,
- vërtetimi i burimit të të dhënave.

Çdo funksion quhet funksion hash h:X -> Y, lehtësisht i llogaritshëm dhe i tillë që për çdo mesazh M kuptimi h(M) = H (përkulje) ka një gjatësi biti fikse. X- grup i të gjitha mesazheve, Y- një grup vektorësh binarë me gjatësi fikse.

Si rregull, funksionet hash ndërtohen në bazë të të ashtuquajturave funksione të kompresimit me një hap y = f(x 1 , x 2) dy variabla, ku x 1, x 2 Dhe y- vektorë binar të gjatësisë m, n Dhe n në përputhje me rrethanat, dhe nështë gjatësia e konvolucionit, dhe m- gjatësia e bllokut të mesazheve.
Për të marrë vlerën h (M) mesazhi fillimisht ndahet në blloqe gjatësie m(në të njëjtën kohë, nëse gjatësia e mesazhit nuk është shumëfish m atëherë blloku i fundit plotësohet në një mënyrë të veçantë derisa të përfundojë), dhe më pas në blloqet që rezultojnë M 1, M 2,..., M N zbatoni procedurën vijuese vijuese për llogaritjen e konvolucionit:

H o = v,
H i = f(M i ,H i-1), i = 1,.., N,
h(M) = HN

Këtu v- disa konstante, që shpesh quhet vektor inicializues. Ajo del jashtë
për arsye të ndryshme dhe mund të jetë një konstante sekrete ose një grup të dhënash të rastësishme (një mostër e datës dhe orës, për shembull).
Me këtë qasje, vetitë e funksionit hash përcaktohen plotësisht nga vetitë e funksionit të kompresimit me një hap.

Ekzistojnë dy lloje të rëndësishme të funksioneve hash kriptografike - çelësi dhe pa çelës. Funksionet kryesore të hash quhen kode të vërtetimit të mesazheve. Ato bëjnë të mundur, pa mjete shtesë, garantimin e korrektësisë së burimit të të dhënave dhe integritetit të të dhënave në sisteme me përdoruesit që i besojnë njëri-tjetrit.
Funksionet hash pa çelës quhen kode të zbulimit të gabimeve. Ato bëjnë të mundur garantimin e integritetit të të dhënave duke përdorur mjete shtesë (kriptimi, për shembull). Këto funksione hash mund të përdoren në sisteme me përdorues të besueshëm dhe mosbesues.

Rreth karakteristikave dhe kërkesave statistikore

Siç thashë tashmë, kërkesa kryesore për funksionet hash është shpërndarja uniforme e vlerave të tyre kur vlerat e argumenteve zgjidhen rastësisht. Për funksionet hash kriptografike, është gjithashtu e rëndësishme që me ndryshimin më të vogël në argument, vlera e funksionit të ndryshojë shumë. Ky quhet efekti i ortekut.

Funksionet kryesore të hashimit kanë kërkesat e mëposhtme:
- pamundësia e fabrikimit,
- pamundësia e modifikimit.

Kërkesa e parë do të thotë se është shumë e vështirë të gjesh një mesazh me vlerën e saktë të kolapsit. E dyta është kompleksiteti i lartë i zgjedhjes, për një mesazh të caktuar me një vlerë konvolucioni të njohur, një mesazh tjetër me vlerën e saktë të konvolucionit.

Kërkesat për funksionet pa çelës janë:
- njëdrejtimshmëri,
- rezistenca ndaj përplasjes,
- rezistencë ndaj gjetjes së një paraimazhi të dytë.

Njëdrejtimi i referohet vështirësisë së lartë për të gjetur një mesazh bazuar në një vlerë të caktuar konvolucioni. Duhet të theksohet se për momentin nuk ka funksione hash në përdorim me një drejtim të provuar.
Rezistenca ndaj përplasjes i referohet vështirësisë për të gjetur një çift mesazhesh me të njëjtat vlera konvolucioni. Zakonisht, është gjetja e një mënyre për ndërtimin e përplasjeve nga analistë të kriptografisë që shërben si sinjali i parë që algoritmi po vjetërohet dhe se ai duhet të zëvendësohet shpejt.
Rezistenca ndaj gjetjes së një paraimazhi të dytë i referohet vështirësisë për të gjetur një mesazh të dytë me të njëjtën vlerë konvolucioni për një mesazh të caktuar me një vlerë të njohur konvolucioni.

Kjo ishte pjesa teorike, e cila do të jetë e dobishme për ne në të ardhmen...

Rreth algoritmeve hash popullore

Algoritmet CRC16/32- checksum (jo konvertim kriptografik).

Algoritmet MD2/4/5/6. Ata janë krijimi i Ron Rivest, një nga autorët e algoritmit RSA.
Algoritmi MD5 dikur ishte shumë i popullarizuar, por parakushtet e para për hakerimin u shfaqën në fund të viteve nëntëdhjetë, dhe tani popullariteti i tij po bie me shpejtësi.
Algoritmi MD6 është një algoritëm shumë interesant nga pikëpamja e projektimit. Ai u nominua për konkursin SHA-3, por, për fat të keq, autorët nuk patën kohë për ta sjellë atë në standard dhe ky algoritëm nuk është në listën e kandidatëve që kaluan në raundin e dytë.

Algoritmet e vizoreve SHA Algoritmet që përdoren gjerësisht sot. Ekziston një kalim aktiv nga standardet e versionit SHA-1 në SHA-2. SHA-2 është emri kolektiv për algoritmet SHA224, SHA256, SHA384 dhe SHA512. SHA224 dhe SHA384 janë në thelb analoge të SHA256 dhe SHA512, përkatësisht, vetëm pas llogaritjes së konvolucionit, disa nga informacionet në të hidhen poshtë. Ato duhet të përdoren vetëm për të siguruar përputhshmërinë me pajisjet e modeleve të vjetra.

Standardi rus - GOST 34.11-94.

Në artikullin vijues

Rishikimi i algoritmeve MD (MD4, MD5, MD6).

Letërsia

A. P. Alferov, Bazat e kriptografisë.

Bruce Schneier, Kriptografia e Aplikuar.

Për shembull, ne mund të ushqejmë një roman të Leo Tolstoit në heksadecimal ose numrin 1 si hyrje në një funksion hash 128-bit Si rezultat, në të dyja rastet do të marrim grupe të ndryshme të shifrave heksadecimale pseudo të rastësishme: ".”.

Kur teksti burim ndryshon qoftë edhe me një karakter, rezultati i funksionit hash ndryshon plotësisht.

Kjo veti e funksioneve hash lejon që ato të përdoren në rastet e mëposhtme:

  • gjatë ndërtimit të vargjeve asociative;
  • kur kërkoni për dublikatë në një seri grupesh të dhënash;
  • kur ndërtoni identifikues unikë për grupet e të dhënave;
  • kur llogariten shumat e kontrollit nga të dhënat (sinjalet) për zbulimin e mëvonshëm të gabimeve në to (të paraqitura aksidentalisht ose qëllimisht) që ndodhin gjatë ruajtjes dhe/ose transmetimit të të dhënave;
  • kur ruani fjalëkalimet në sistemet e mbrojtjes në formën e një kodi hash (për të rikuperuar një fjalëkalim duke përdorur një kod hash, kërkohet një funksion që është i kundërt me funksionin hash të përdorur);
  • kur zhvilloni një nënshkrim elektronik (në praktikë, shpesh nuk është vetë mesazhi që nënshkruhet, por "imazhi i tij hash");
  • dhe etj.

Llojet e funksioneve hash

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

  • llogaritje e shpejtë;
  • numri minimal i "përplasjeve".

Le të prezantojmë shënimin e mëposhtëm:

∀ k ∈ (0 ; K) : h (k)< M {\displaystyle \forall k\in (0;\,K):h(k).

Një shembull i një funksioni hash "i keq" është një funksion me M = 1000 (\displaystyle M=1000), që është një numër natyror dhjetëshifror K (\displaystyle K) krahason tre shifra të zgjedhura nga mesi i një katrori njëzetshifror të një numri K (\displaystyle K). Duket se vlerat e "kodeve hash" duhet në mënyrë të barabartë shpërndahet ndërmjet " 000 "Dhe" 999 ", por për " reale"Të dhënat janë të vërteta vetëm nëse" çelësat" nuk keni një numër "të madh" zerosh majtas ose djathtas.

Le të shohim disa zbatime të thjeshta dhe të besueshme të funksioneve hash.

"Funksionet hash" bazuar në ndarje

1. "Hash code" si pjesa e mbetur e pjesëtimit me numrin e të gjitha "hasheve" të mundshme

Një funksion hash mund të llogarisë "hash"-in si pjesë e mbetur e pjesëtimit të të dhënave hyrëse me M (\displaystyle M):

h (k) = k mod M (\displaystyle h(k)=k\mod M),

Ku M (\displaystyle M)- numri i të gjitha "hasheve" të mundshme (të dhënat dalëse).

Për më tepër, është e qartë se për madje M (\displaystyle M) vlera e funksionit do të jetë edhe kur çift k (\displaystyle k) dhe tek - kur tek k (\displaystyle k). Gjithashtu nuk duhet të përdoret si M (\displaystyle M) radiksi i sistemit të numrave të kompjuterit, pasi "kodi hash" do të varet vetëm nga disa numrat e shifrave k (\displaystyle k), e vendosur në të djathtë, e cila do të çojë në një numër të madh përplasjesh. Në praktikë, ata zakonisht zgjedhin një të thjeshtë M (\displaystyle M); në shumicën e rasteve kjo zgjedhje është mjaft e kënaqshme.

2. “Hash code” si grup koeficientësh të polinomit që rezulton

Një funksion hash mund të kryejë një ndarje modulo dy të të dhënave hyrëse nga një polinom. Në këtë metodë M (\displaystyle M) duhet të jetë një fuqi e dy çelësave dhe binarë ( K = k n − 1 k n − 2 . . . k 0 (\displaystyle K=k_(n-1)k_(n-2)...k_(0))) paraqiten në formë polinomet, vlerat e koeficientëve merren si një "kod hash" polinom, e marrë si pjesë e mbetur nga pjesëtimi i të dhënave hyrëse K (\displaystyle K) në një polinom të përzgjedhur paraprakisht P (\displaystyle P) gradë m (\displaystyle m):

K (x) mod P (x) = h m − 1 x m − 1 + ⋯ + h 1 x + h 0 (\displaystyle K(x)\mod P(x)=h_(m-1)x^(m- 1)+\pika +h_(1)x+h_(0)) h (x) = h m − 1 . . . h 1 h 0 (\stil ekrani h(x)=h_(m-1)...h_(1)h_(0))

Me zgjedhjen e duhur P (x) (\displaystyle P(x)) Mungesa e përplasjeve ndërmjet çelësave pothuajse identikë është e garantuar.

"Funksionet hash" bazuar në shumëzimin

Le të shënojmë me simbolin w (\displaystyle w) numri i numrave që mund të përfaqësohen me një fjalë makine. Për shembull, për kompjuterët e pajtueshëm me IBM PC 32-bit, w = 2 32 (\displaystyle w=2^(32)).

Le të zgjedhim disa konstante A (\displaystyle A) kështu që A (\displaystyle A) ishte coprime me w (\displaystyle w). Pastaj një funksion hash duke përdorur shumëzimin mund të duket kështu:

h (K) = [ M ⌊ A w ∗ K ⌋ ] (\stil ekrani h(K)=\majtas)

Në këtë rast, në një kompjuter me një sistem numrash binar M (\displaystyle M)është një fuqi e dy, dhe h (K) (\style ekrani h(K)) do të përbëhet nga pjesët më domethënëse të gjysmës së djathtë të produktit A ∗ K (\displaystyle A*K).

Ndër avantazhet e funksioneve hash bazuar në ndarjen dhe shumëzimin, vlen të përmendet përdorimi i dobishëm i jo rastësisë së çelësave realë. Për shembull, nëse çelësat janë një progresion aritmetik (për shembull, sekuenca e emrave "Emri 1", "Emri 2", "Emri 3"), një funksion hash duke përdorur shumëzimin do të hartojë progresionin aritmetik në një progresion afërsisht aritmetik të vlerat e ndryshme hash, të cilat do të zvogëlojnë numrin e përplasjeve në krahasim me një situatë të rastësishme.

Një funksion hash që përdor shumëzimin është funksioni hash që përdor hashimin e Fibonacci. Hashimi i Fibonacci bazohet në vetitë e raportit të artë. Si konstante A (\displaystyle A) këtu numri i plotë më i afërt me φ − 1 ∗ w (\displaystyle \varphi ^(-1)*w) dhe coprime me w (\displaystyle w), Ku φ (\displaystyle \varphi)- ky është raporti i artë.

Hashimi i vargjeve me gjatësi të ndryshueshme

Metodat e mësipërme janë gjithashtu të zbatueshme nëse është e nevojshme të merren 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ët në një duke përdorur shtimin e modulit w (\displaystyle w) ose operacione "ekskluzive ose". Një nga algoritmet që funksionon në këtë parim është funksioni hash i Pearson.

Hashimi universal

Metodat për trajtimin e përplasjeve

Një përplasje (nganjëherë një konflikt ose përplasje) është rasti në të cilin një funksion hash për blloqe të ndryshme hyrëse kthen të njëjtat kode hash.

Metodat për trajtimin e përplasjeve në tabelat hash

Pjesa më e madhe e punës së hershme që përshkruan hashing iu kushtua metodave për trajtimin e përplasjeve në tabelat hash. Në atë kohë, funksionet hash përdoreshin për të kërkuar tekst në skedarë të mëdhenj. Ekzistojnë dy metoda kryesore për trajtimin e përplasjeve në tabelat hash:

  1. metoda zinxhir (metoda e lidhjes direkte);
  2. Metoda e hapur e adresimit.

Kur përdorni metodën e zinxhirit, tabela hash ruan çifte "lista të lidhura të çelësave" - ​​"kodi hash". Për çdo çelës, funksioni hash llogarit një kod hash; nëse kodi hash është marrë më parë (për një çelës tjetër), çelësi shtohet në listën ekzistuese të çelësave të çiftuar me kodin hash; përndryshe krijohet një çift i ri “lista e çelësave” - “hash code” dhe çelësi shtohet në listën e krijuar. Në përgjithësi, nëse ka N (\displaystyle N)çelësat dhe M (\displaystyle M) listat, madhësia mesatare e tabelës hash do të jetë N M (\style ekrani (\frac (N)(M))). Në këtë rast, kur kërkoni nëpër një tabelë, në krahasim me rastin në të cilin kërkimi kryhet në mënyrë sekuenciale, sasia mesatare e punës do të ulet përafërsisht M (\displaystyle M) një herë.

Kur përdorni metodën e adresimit të hapur, tabela hash ruan çiftet e kodit key-hash. Për çdo çelës, funksioni hash llogarit një kod hash; Çifti "çelës" - "kodi hash" ruhet në tabelë. Në këtë rast, kur kërkoni tabelën, në krahasim me rastin në të cilin përdoren listat e lidhura, lidhjet nuk përdoren, kryhet një kërkim sekuencial për çiftet "çelës" - "kodi hash", kërkimi ndalon pasi të gjendet çelësi i kërkuar. . Sekuenca në të cilën skanohen qelizat e tabelës quhet sekuencë e sondës.

Kripë kriptografike

Përdorimi i funksioneve hash

Funksionet hash përdoren gjerësisht në kriptografi.

Hash-i përdoret si çelës në shumë struktura të dhënash - tabela hash, filtra Bloom dhe pemë karteziane.

Funksionet hash kriptografike

Ndër shumë funksione hash ekzistuese, është zakon të dallohen funksionet hash kriptografikisht të forta të përdorura në kriptografi, pasi atyre u imponohen kërkesa shtesë. Në mënyrë që funksioni hash H (\displaystyle H) i konsideruar kriptografikisht i fortë, ai duhet të plotësojë tre kërkesa themelore mbi të cilat bazohen shumica e përdorimeve të funksioneve hash në kriptografi:

Këto kërkesa nuk janë të pavarura.

Shpesh, kur shkarkoni torrent ose vetë skedarët, përshkrimi thotë diçka si "ad33e486d0578a892b8vbd8b19e28754" (për shembull, në ex.ua), shpesh me prefiksin "md5". Ky është kodi hash - rezultati që prodhon funksioni hash pas përpunimit të të dhënave hyrëse. Përkthyer nga anglishtja, hash do të thotë konfuzion, marihuanë, barërat e këqija ose një pjatë me mish dhe perime të grira hollë. shumë, shumë e vështirë, mund të thuhet pothuajse e pamundur. Atëherë lind pyetja: "Pse është e nevojshme fare e gjithë kjo që ata japin një gëlltitje të pakuptueshme, e cila gjithashtu nuk është e deshifrueshme?" Kjo do të diskutohet në këtë artikull.

Çfarë është një funksion hash dhe si funksionon?

Ky funksion është krijuar për të konvertuar të dhënat hyrëse me madhësi arbitrare të madhe në një rezultat me gjatësi fikse. Procesi i një konvertimi të tillë quhet hashing, dhe rezultati është një hash ose një kod hash. Ndonjëherë përdoren edhe fjalët "gjurmë gishtash" ose "përmbledhje mesazhi", por në praktikë ato janë shumë më pak të zakonshme. Ka shumë algoritme të ndryshme për mënyrën se si mund të shndërroni çdo grup të dhënash në një sekuencë të caktuar karakteresh me një gjatësi të caktuar. Algoritmi më i përdorur quhet md5, i cili u zhvillua në vitin 1991. Përkundër faktit se sot md5 është disi e vjetëruar dhe nuk rekomandohet për përdorim, ai është ende në përdorim dhe shpesh në vend të fjalës "kodi hash", faqet thjesht shkruajnë md5 dhe tregojnë vetë kodin.

Pse nevojitet një funksion hash?

Duke ditur rezultatin, është pothuajse e pamundur të përcaktohen të dhënat hyrëse, por të njëjtat të dhëna hyrëse japin të njëjtin rezultat. Prandaj, funksioni hash (i quajtur edhe funksioni i konvolucionit) përdoret shpesh për të ruajtur informacione shumë të rëndësishme, si fjalëkalimin, hyrjen, numrin ID dhe informacione të tjera personale. Në vend që të krahasohet informacioni që përdoruesi fut me atë që ruhet në bazën e të dhënave, krahasohen hash-et e tyre. Kjo siguron që në rast të rrjedhjes aksidentale të informacionit, askush nuk do të jetë në gjendje të përdorë të dhëna të rëndësishme për qëllimet e veta. Duke krahasuar kodin hash, është gjithashtu e përshtatshme të kontrolloni nëse skedarët po shkarkohen saktë nga Interneti, veçanërisht nëse ka pasur ndërprerje të lidhjes gjatë shkarkimit.

Funksionet hash: cilat janë ato? T

Në varësi të qëllimit të tij, një funksion hash mund të jetë një nga tre llojet:

1. Funksioni për kontrollimin e integritetit të informacionit

Kur ndodh përmes rrjetit, llogaritet një hash i paketës dhe ky rezultat transmetohet gjithashtu së bashku me skedarin. Pas marrjes, kodi hash llogaritet përsëri dhe krahasohet me vlerën e marrë në rrjet. Nëse kodi nuk përputhet, atëherë kjo tregon gabime dhe paketa e dëmtuar do të transmetohet përsëri. Ky funksion ka shpejtësi të shpejtë llogaritjeje, por një numër të vogël vlerash hash dhe stabilitet të dobët. Një shembull i këtij lloji: CRC32, i cili ka vetëm 232 vlera të ndryshme.

2. Funksioni kriptografik

Përdoret për mbrojtje kundër (ND). Ato ju lejojnë të kontrolloni nëse dëmtimi i të dhënave ka ndodhur si rezultat i një aksidenti gjatë transferimit të skedarëve përmes rrjetit. Hash-i i vërtetë në këtë rast është i disponueshëm publikisht dhe hash-i i skedarit që rezulton mund të llogaritet duke përdorur shumë programe të ndryshme. Funksione të tilla kanë një jetëgjatësi të gjatë dhe të qëndrueshme, dhe kërkimi i përplasjeve (koincidenca të mundshme të rezultateve nga të dhëna të ndryshme burimore) është shumë i vështirë. Këto janë funksionet që përdoren për të ruajtur fjalëkalimet (SH1, SH2, MD5) dhe informacione të tjera të vlefshme në bazën e të dhënave.

3. Një funksion i krijuar për të krijuar një strukturë efikase të dhënash

Qëllimi i tij është një organizim kompakt dhe mjaft i rregullt i informacionit në një strukturë të veçantë të quajtur një tabelë hash. Një tabelë e tillë ju lejon të shtoni informacione të reja, të fshini informacione dhe të kërkoni të dhënat e nevojshme me shpejtësi shumë të lartë.

Dhe kështu me radhë.). Zgjedhja e një ose një funksioni tjetër hash përcaktohet nga specifikat e problemit që zgjidhet. Shembujt më të thjeshtë të funksioneve hash janë checksum ose CRC.

Në përgjithësi, nuk ka korrespondencë një-për-një ndërmjet të dhënave burimore dhe kodit hash. Prandaj, ka shumë grupe të dhënash që japin të njëjtat kode hash - të ashtuquajturat përplasje. Probabiliteti i 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.

Shpejtësia e llogaritjes është dhjetëra e qindra herë më e shpejtë se funksionet hash kriptografike dhe shumë më e thjeshtë në zbatimin e harduerit.

Çmimi për një shpejtësi kaq të lartë është mungesa e forcës kriptografike - një mundësi e lehtë për të përshtatur mesazhin në një sasi të njohur më parë. Gjithashtu, shumat e kontrollit (tipike: 32 bit) zakonisht janë më të ulëta në gjerësi sesa hash-et kriptografike (tipike: 128, 160 dhe 256 bit), që do të thotë se mund të ndodhin përplasje të paqëllimshme.

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

Si rregull, një algoritëm i tillë kërkohet për të gjurmuar gabimet tipike të harduerit, siç janë disa bit të gabuar të njëpasnjëshëm në një gjatësi të caktuar. E ashtuquajtura familje e algoritmeve "kodi ciklik i tepricës" i plotëson këto kërkesa. Këto përfshijnë, për shembull, CRC32, i përdorur në pajisjet ZIP.

Funksionet hash kriptografike

Midis shumë funksioneve ekzistuese hash, është zakon të dallohen funksionet hash kriptografikisht të forta të përdorura në kriptografi. Para së gjithash duhet të ketë një funksion hash kriptorezistent rezistente ndaj përplasjeve dy lloje:

Duke përdorur hashing

Funksionet hash përdoren gjithashtu në disa struktura të dhënash - tabela hash dhe pemë 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 duke kontrolluar disa informacione që të jenë identike me origjinalin, pa përdorur origjinalin. Për rakordim, përdoret vlera hash e informacionit që verifikohet. Ekzistojnë dy fusha 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 zbulohet një mospërputhje, kjo do të thotë se ka ndodhur shtrembërim gjatë transmetimit dhe mund të kërkohet një përsëritje.

Një analog shtëpiak i hashimit në këtë rast mund të jetë teknika 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 thjesht numëroni ato. Një ndeshje do të thotë që asnjë valixhe nuk humbet. 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ë objektiva, ruhen vetëm vlerat e tyre hash. Nuk këshillohet ruajtja e frazave të kalimit, pasi në rast të aksesit të paautorizuar në një skedar me fraza, sulmuesi do të zbulojë të gjitha frazat e kalimit dhe do të jetë në gjendje t'i përdorë ato menjëherë, dhe kur ruan vlerat hash, ai do të mësojë vetëm vlerat hash që nuk janë të kthyeshme në të dhënat origjinale, në këtë rast, fraza e kalimit. 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 do të ishte GNU/Linux dhe Microsoft Windows XP. Ata ruajnë vetëm vlerat hash të frazave të kalimit nga llogaritë e përdoruesve.

Përshpejtoni marrjen e të dhënave

Për shembull, kur fushat e tekstit shkruhen në një bazë të dhënash, kodi i tyre hash mund të llogaritet dhe të dhënat mund të vendosen në një seksion që korrespondon me atë kod hash. Pastaj, kur kërkoni për të dhëna, së pari do t'ju duhet të llogarisni kodin hash të tekstit dhe menjëherë do të dini se në cilin seksion duhet ta kërkoni atë, domethënë do t'ju duhet të kërkoni jo në të gjithë bazën e të dhënave, por vetëm në një pjesë të tij (kjo përshpejton shumë kërkimin).

Një analog i zakonshëm i hashimit në këtë rast mund të jetë vendosja e fjalëve në një fjalor sipas rendit alfabetik. 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 dëshiruar.

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.

Shihni se çfarë është "Hash code" në fjalorë të tjerë:

    Kodi hash- rezultati i një kombinimi aritmetik me të gjithë bajtët e kodit të programit ose grupit të të dhënave. Rezultati i algoritmit të hashimit përfshin vetëm disa bajt, dhe algoritmi është projektuar në atë mënyrë që çdo modifikim i kodit të programit ose i të dhënave me... ... Terminologjia zyrtare

    Kodi hash- rezultati i një kombinimi aritmetik me të gjithë bajtët e kodit të programit ose grupit të të dhënave. Rezultati i algoritmit të hashimit përfshin vetëm disa bajt, dhe algoritmi është projektuar në atë mënyrë që çdo modifikim i kodit të programit ose i të dhënave me... ...

    kodi i vërtetimit të mesazhit duke përdorur një funksion hash- (ITU T N.235.3, ITU T N.235.1). Temat: telekomunikacioni, konceptet bazë EN kodi i vërtetimit të mesazheve të hashuaraHMAC... Udhëzues teknik i përkthyesit

    Në programim, një tabelë hash është një strukturë e të dhënave që zbaton ndërfaqen e grupit asociativ, domethënë, ju lejon të ruani çifte (çelës, vlerë) dhe të kryeni tre operacione: operacionin e shtimit të një çifti të ri, operacionin e kërkimit dhe operacionin e fshirjes. ... Wikipedia

    MAC (kodi i vërtetimit të mesazheve) është një mjet për të siguruar mbrojtje imituese në protokollet e vërtetimit të mesazheve me pjesëmarrës të besueshëm reciprok, një grup i veçantë karakteresh që shtohen në ... ... Wikipedia

    Hashing (nganjëherë hashing) është transformimi i një grupi të dhënash hyrëse me gjatësi arbitrare në një varg bitsh dalës me një gjatësi fikse. Transformime të tilla quhen gjithashtu funksione hash ose funksione konvolucioni, dhe rezultatet e tyre... ... Wikipedia

    Ky artikull ka të bëjë me kodin. Për metodën e stuhisë së ideve, shihni kartën CRC. Kontrolli ciklik i tepricës (CRC) është një algoritëm për llogaritjen e një shume kontrolli të krijuar për të kontrolluar integritetin e... ... Wikipedia

    - (shkurt për kodin e vërtetimit të mesazhit të bazuar në hash, kod hash të vërtetimit të mesazhit). Të kesh një mënyrë për të verifikuar integritetin e informacionit të transmetuar ose të ruajtur në një mjedis të pabesueshëm është një pjesë integrale dhe e nevojshme e botës... ... Wikipedia

    MI 2891-2004: Rekomandim. GSOEI. Kërkesat e përgjithshme për softuerin e instrumenteve matëse- Terminologjia MI 2891 2004: Rekomandim. GSOEI. Kërkesat e përgjithshme për softuerin e instrumenteve matëse: Informacioni i matjes së të dhënave paraqitet në një formë të përshtatshme për transmetim, interpretim ose përpunim. Përkufizimet e termit nga... ... Fjalor-libër referues i termave të dokumentacionit normativ dhe teknik

Për të zgjidhur problemin e gjetjes së elementit të kërkuar midis të dhënave të mëdha, u propozua një algoritëm hashing (hashing- shuffling), në të cilin krijohen çelësat që përcaktojnë të dhënat e grupit dhe, bazuar në to, të dhënat shkruhen në një tabelë të quajtur tabela hash . Tastet e regjistrimit përcaktohen duke përdorur funksionin i = h(Celës) , thirri funksion hash . Algoritmi i hashimit përcakton pozicionin e elementit të kërkuar në tabelën hash bazuar në vlerën e çelësit të tij të marrë nga funksioni hash.

Koncepti hash- Ky është ndarja e një grupi të përbashkët (bazë) të çelësave unikë të elementeve të të dhënave në grupe të shkëputura me një veti të caktuar.

Le të marrim, për shembull, një fjalor ose një enciklopedi. Në këtë rast, shkronjat e alfabetit mund të merren si çelësa kërkimi, d.m.th. Elementi kryesor i algoritmit hash është Celës (Celës). Në shumicën e aplikacioneve, çelësi ofron një referencë indirekte ndaj të dhënave.

Në fakt, hashimi është një metodë e veçantë e adresimit të të dhënave për të gjetur shpejt informacionin e nevojshëm me çelësa .

Nëse grupi bazë përmban N elemente, atëherë mund të ndahet në 2 N nënbashkësi të ndryshme.

Tabelë hash dhe funksionet hash

Një funksion që harton çelësat e artikujve të të dhënave në një grup numrash të plotë (indekset në një tabelë - tabela hash ), thirri funksion hashing , ose funksion hash :

i = h(Celës);

Ku Celës- çelësi i konvertueshëm, i– indeksi i tabelës që rezulton, d.m.th. çelësi është hartuar në një grup numrash të plotë ( adresat hash ), të cilat përdoren më pas për të aksesuar të dhënat.

Sidoqoftë, një funksion hash për vlera të shumta kyçe mund të prodhojë të njëjtën vlerë pozicioni i ne tavoline. Quhet situata në të cilën dy ose më shumë çelësa ndajnë të njëjtin indeks (adresa hash). përplasje kur hash.

Një funksion i mirë hash është një funksion që minimizon përplasjet dhe shpërndan të dhënat në mënyrë të barabartë në të gjithë tabelën, dhe një funksion i përsosur hash është një funksion që nuk gjeneron përplasje:

Ekzistojnë dy mënyra për të zgjidhur përplasjet e hashimit:

– metoda e adresimit të hapur me testim linear;

- metoda zinxhir.

Tabela hash

Një tabelë hash është një grup i rregullt me ​​adresim të pazakontë të specifikuar nga një funksion hash.

Struktura hash konsiderohet një përgjithësim i një grupi që siguron akses të shpejtë dhe të drejtpërdrejtë në të dhënat sipas indeksit.

Ka shumë skema hashing, të ndryshme në zgjedhjen e një funksioni të suksesshëm h(Celës), dhe një algoritëm për zgjidhjen e konflikteve. Efektiviteti i zgjidhjes së një problemi real praktik do të varet ndjeshëm nga strategjia e zgjedhur.

Shembuj të funksioneve hash

Funksioni hash që zgjidhni duhet të jetë i lehtë për t'u llogaritur dhe për të krijuar sa më pak përplasje të jetë e mundur, d.m.th. duhet të shpërndajë çelësat në mënyrë të barabartë nëpër indekset ekzistuese në tabelë. Natyrisht, është e pamundur të përcaktohet nëse një funksion i caktuar hash do të shpërndajë çelësat në mënyrë korrekte, përveç nëse ata çelësa njihen paraprakisht. Megjithatë, megjithëse vetë çelësat rrallë njihen përpara se të zgjidhni një funksion hash, zakonisht njihen disa veti të atyre çelësave që ndikojnë në shpërndarjen e tyre. Le të shohim metodat më të zakonshme për të specifikuar një funksion hash.

Metoda e ndarjes. Të dhënat fillestare janë disa çelësa me numra të plotë Celës dhe madhësia e tavolinës m. Rezultati i këtij funksioni është mbetja kur ky çelës ndahet me madhësinë e tabelës. Pamje e përgjithshme e funksionit:

int h (tasti int, int m) (

çelësi i kthimit % m; // Vlerat

Për m= 10 funksion hash kthen shifrën më pak të rëndësishme të çelësit.

Për m= 100 funksion hash kthen dy shifrat më pak të rëndësishme të çelësit.

Metoda shtesë, në të cilën çelësi është një varg karakteresh. Në një funksion hash, një varg konvertohet në një numër të plotë duke mbledhur të gjithë karakteret dhe duke e kthyer pjesën e mbetur pas ndarjes me m(zakonisht madhësia e tabelës m= 256).

int h(char *key, int m) (

Përplasjet ndodhin në vargje që përbëhen nga i njëjti grup karakteresh, për shembull, abc Dhe taksi.

Kjo metodë mund të modifikohet pak, duke marrë rezultatin duke mbledhur vetëm karakteret e para dhe të fundit të vargut të çelësit.

int h(char *key, int m) (

int len ​​= strlen(çelës), s = 0;

nëse (len< 2) // Если длина ключа равна 0 или 1,

s = çelësi; // çelësi i kthimit

s = çelës + çelës;

Në këtë rast, përplasjet do të ndodhin vetëm në linja, për shembull, abc Dhe amc.

Metoda e katrorit të mesëm, në të cilin çelësi është në katror (shumëzohet në vetvete) dhe disa shifra të mesme të vlerës që rezulton përdoren si indeks.

Për shembull, çelësi është një numër i plotë 32-bit dhe funksioni hash kthen mesatarisht 10 bit të katrorit të tij:

int h (kyç int) (

çelësi >>= 11; // Hidhni 11 bit më pak të rëndësishëm

çelësi i kthimit % 1024; // Ktheni 10 bit më pak të rëndësishëm

Metoda ekskluzive OR për çelësat e rreshtave (zakonisht madhësia e tabelës m=256). Kjo metodë është e ngjashme me metodën shtesë, por dallon fjalë të ngjashme. Metoda është që operacioni "ekskluzive OR" zbatohet në mënyrë sekuenciale në elementët e vargut.

metodë shumëzuese gjithashtu përdoret një numër real i rastësishëm r nga intervali . Nëse ky produkt shumëzohet me madhësinë e tabelës m, atëherë pjesa e plotë e produktit që rezulton do të japë një vlerë në rangun nga 0 në m–1.

int h (tasti int, int m) (

double r = çelësi * rnd();

r = r – (int)r; // Zgjidhni pjesën thyesore

Në përgjithësi, për vlera të mëdha m indekset e gjeneruara nga funksioni hash kanë një përhapje të gjerë. Për më tepër, teoria matematikore thotë se shpërndarja është më uniforme nëse mështë një numër i thjeshtë.

Në shembujt e konsideruar, funksioni hash i = h(Celës) përcakton vetëm pozicionin nga i cili do të kërkohet (ose fillimisht vendoset në tabelë) një rekord me një çelës Celës. Prandaj, skema e hashimit duhet të përfshijë algoritmi i zgjidhjes së konflikteve , e cila përcakton radhën e veprimeve nëse pozicioni i = h(Celës) rezulton të jetë tashmë e zënë nga një rekord me një çelës tjetër.

Artikujt më të mirë mbi këtë temë