Jaukšana kriptogrāfijā

Vai vēlaties uzzināt par jaukšanu kriptogrāfijā? Ja jūs to darāt, tad esat nonācis īstajā vietā.

Šajā rakstā mēs izpētīsim vairāk par jaukšanu.

Jaukšana ir datorzinātņu tehnika objektu vai vērtību identificēšanai no objektu vai vērtību grupas.

Izklausās mulsinoši?

Mēģināsim saprast ar piemēru.

Nu, koledžas un skolas katram studentam piešķir unikālu numuru. Šis unikālais numurs ir tas, kas identificē studentu un ar viņu saistīto informāciju. Unikālā numura ģenerēšanai izmantotā metode ir Hašings.

Vēl viens populārs piemērs ir bibliotēkas, kurās plauktos atradīsit daudz grāmatu. Katrai tur esošajai grāmatai ir savs unikālais identifikācijas numurs, lai to varētu atrasties milzīgajā bibliotēkā!

Mūsdienu jaukšanas piemērs būtu spēļu spēlētāji, kuri reģistrējas spēlei. Valorant ir bezmaksas spēlējama spēle, kuru uzsāka Riot. Būt bez maksas nozīmē, ka miljoniem cilvēku spēlēs šo spēli.

Katrs spēlētājs tiek identificēts, izmantojot unikālu identifikācijas vērtību, kas ģenerēta, izmantojot jaukšanas algoritmu.

Mēģināsim to sīkāk saprast tālāk.

 

Kas ir Hašings?

Kā minēts iepriekš, hashings ir metode objekta identificēšanai no grupas.


Katrs objekts saņem jauktu unikālu identifikācijas numuru.

Bet ko tas nozīmē tehniski?

Tehniski matemātiskā funkcija ģenerē fiksēta garuma izvadi no jebkura jebkura garuma ievades virknes.

Bitcoin darījumi tiek sajaukti, ja darījumi iegūst unikālus ID.

Ja jūs ievietojat “Sveiki, pasaule!” an SHA-256 jaukšanas algoritms, jūs saņemsiet šādu izvadi:

Ievade: Sveika pasaule!

Izeja: dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f

Šeit SHA256 ģenerē izvadi no dotās ievades. Kā redzat, mēs izmantojām Secure Hash Function (SHA-256) jaukšanas algoritmu. Tā ir viena no populārākajām jaukšanas metodēm, tostarp Message Direct (MD5) un Secure Hash Function (SHA1).

Galvenās hash funkcijas īpašības padara to uzticamu. Uzskaitīsim tos tālāk.

  • Noteicošs → Tas nozīmē, ka izeja būs vienāda ar konkrēto ievadi jebkuros apstākļos.
  • Preimage Resistant → Pirms attēla izturīga funkcija nodrošina, ka jaukšanas vērtība nav noderīga, lai ģenerētu ievades vērtību.
  • Skaitļošanas ziņā efektīva → Jaukšanas funkcijas ir efektīvas, un to izpildei nav nepieciešami lieli skaitļošanas resursi.
  • Nevar mainīt pretēji → Jaucējfunkciju nevar mainīt.
  • Sadursmju izturīgs → Sadursmes pretestība nodrošina, ka divu ieeju rezultātā nav vienādas izejas.

Šeit mēs jau esam aprakstījuši kriptogrāfisko jaukšanu iesācējiem. Pārbaudiet to tur: Kriptogrāfiskā jaukšana: ceļvedis iesācējiem. 

Bet, ja jūs šeit meklējat uzlabotas lietas, jūs nebūsiet vīlušies.

 

Kas ir hash funkcija un hash tabulas? Un kā viņi strādā?

Šajā sadaļā mēs sīkāk izpētīsim hash funkciju un hash tabulas. Jaukšanas ziņā ir jaucējfunkcijas. Šīs funkcijas ir atbildīgas par lielu ieeju pārveidošanu mazās fiksētās ieejās. Jaukšanas tabulas glabā izvadi.

Jaukšanas procesā objekti tiek sadalīti masīvā, pamatojoties uz to atslēgu / vērtību pāriem. Tātad, ja jūs nodosiet elementu masīvu hash funkcijām, jūs saņemsiet masīva izvadi, kur katram no elementiem tagad ir pievienota atslēga. Atslēgu / vērtību pāris ir ļoti noderīgs, lai reāllaikā piekļūtu elementiem, jo ​​tas piedāvā iespaidīgu O (1) laiku.

Lai ieviestu jaucējfunkcijas, varat noņemt divas vēlamās pieejas.

  • Pirmā pieeja ir hash funkcijas izmantošana, lai elementu pārveidotu par veselu skaitli. Pēc tam vesela skaitļa izvadi var izmantot, lai piekļūtu elementam, ievietojot jaukšanas tabulu.
  • Vēl viens solis ir ievietot elementu jaukšanas tabulā un pēc tam to izgūt, izmantojot jaukto atslēgu.

2. metodē funkcijas būs šādas:

hash = hash_function (atslēga) indekss = hash% array_size

Šeit hash un masīva izmēri ir neatkarīgi viens no otra. Indeksa vērtību aprēķina, pamatojoties uz masīva lielumu. Modulo operators (%) ļauj mums aprēķināt vērtību.

Vienkārši sakot, jaukšanas funkciju var definēt kā funkciju, kas var kartēt patvaļīga lieluma datu kopu uz fiksēta lieluma datu kopu. Iegūto fiksētā lieluma datu kopu var saglabāt jaukšanas tabulā. Hash funkcijas atgrieztajām vērtībām tiek piešķirti daudzi vārdi. Tos var saukt par hash vērtībām, hashiem, hash summām un hash kodiem.

 

Labas hash funkcijas uzrakstīšana

Ja vēlaties izveidot labu jaucējfunkciju vai mehānismu, jums ir jāsaprot tā izveidošanas pamatprasības. Uzskaitīsim tos tālāk:

  • Hash funkcijai jābūt viegli aprēķināmai. Tas nozīmē, ka tā izpildei nevajadzētu prasīt daudz resursu.
  • Hash funkcijai jābūt vienmērīgi sadalītai. To darot, hash tabulas tiek izmantotas hash vērtību glabāšanai, lai nenotiktu kopu veidošana.
  • Pēdējā prasība ir, lai sadursme būtu mazāka vai tās nebūtu vispār. Neviena sadursme nenozīmē, ka neviena izeja nav kartēta ar divām ieejām.

Tehniski sadursmes ir hash funkcijas daļa, un to vienkārši nevar noņemt no hash funkcijas. Mērķis ir izveidot jaucējfunkciju, kas var piedāvāt labu hash tabulas veiktspēju un atrisināt sadursmi, izmantojot sadursmju risināšanas paņēmienus.

 

Kāpēc mums ir nepieciešama laba hash funkcija?

Lai saprastu nepieciešamību pēc noderīgas jaucējfunkcijas, apskatīsim tālāk sniegto piemēru.

Pieņemsim, ka mēs vēlamies izveidot hash tabulu, izmantojot jaukšanas tehniku, kur ievades virknes būs šādas: {“agk”, “kag”, “gak”, “akg”, “kga”, “gka”}

Tagad mēs izveidojam jaucējfunkciju, kas vienkārši saskaita ASCII vērtību (97), g (103) un k (107) un pēc tam veic summas moduli par 307.

Skaidrs, ka trīs skaitļu summa ir arī 307. Tas nozīmē, ka, ja mēs caurlaidīsim visus skaitļus un pēc tam veiksim moduļa darbību, mēs iegūsim tādu pašu rezultātu. Galarezultātā visas virknes tiktu glabātas vienā indeksā. Hash funkcijas algoritmiskais laiks būtu arī O (n) sarežģītība, kas nav vēlama. Mēs varam viegli secināt, ka mūsu aprakstītā jaucējfunkcija nav optimāla reālās dzīves scenārijiem.

Lai labotu jaucējfunkciju, mēs varam izvietot katra elementa ASCII vērtību summu dalot ar citu galveno skaitli 727. To darot, mēs saņemsim atšķirīgu izvadi mūsu dotajām ievades virkņu masīvam.

 

Uzziniet par hash tabulām

Hash tabulas ir ļoti noderīgas, lai saglabātu hash funkcijas rezultātu, kas aprēķina indeksu un pēc tam saglabā vērtību pret to. Gala rezultāts būtu ātrāks skaitļošanas process ar sarežģītību O (1).

Hash tabulas tradicionāli ir laba izvēle tādu problēmu risināšanā, kurām nepieciešams O (n) laiks.

Tātad, ja jūs uzņemat noteikta garuma virkni un pēc tam mēģināt iemācīties virknes rakstzīmju biežumu.

Tātad, ja virkne = “aacddce”, tad vispārīga pieeja ir virknes iziešana vairākas reizes un katras frekvences saglabāšana.

# Nodrošiniet ievades virkni un saskaitiet rakstzīmju biežumu šajā virknē

# Algoritms ir 0 (n) sarežģītības laiks

temp_list = [] sākums = "a" str = "ababcddefff" def alfa_zeta (): alfa = ‘a’ i diapazonā (0,26): temp_list.append (alfa) alfa = chr (ord (alfa) + 1) atgriešanās temp_list temp_list = alfa_zeta () # print (temp_list) def rakstzīmju frekvence (str, temp_list): katram temp_list: frekv = 0 i stringā: ja (i == katrs): frekv = frekv + 1 druka (katrs, frekv) rakstzīmju frekvence (str, temp_loks)

Iepriekš minētās programmas rezultāts būs šāds:

a 2 b 2 c 1 d 2 e 1 f 3 g 0 h 0 i 0 .. ..

Tagad ieviesīsim jaukšanas tabulu C ++ un saskaitīsim rakstzīmju biežumu.

#include izmantojot nosaukumvietas std; int biežums [26]; int hashFunc (char c) {return (c – ‘a’); } void countFre (virkne S) {for (int i = 0; i< S. garums (); ++ i) {int indekss = hashFunc (S [i]); Frekvence [indekss] ++; } Par (int i = 0; i<26; ++ i) {cout << (char) (i + ‘a’) << ” << Biežums [i]<< endl; }} Int main () {cout<<"Sveika pasaule"; countFre ("abbaccbdd"); }

Programmas rezultāts būtu šāds:

a 2 b 3 c 2 d 2

Algoritma O (N) sarežģītība padara to ātrāku salīdzinājumā ar citām lineārām pieejām.

Kā atrisināt sadursmes

Ir unikāli veidi, kā atrisināt sadursmes hash funkcijās. Viens no populārākajiem veidiem ir atsevišķa ķēde, kas ir pazīstama arī kā atvērta jaukšana. Tas tiek ieviests ar saistītu sarakstu, kur katrs no ķēdes elementiem pats ir saistīts saraksts. Šī pieeja ļauj saglabāt elementus un nodrošināt, ka daži elementi ir tikai daļa no konkrētā saistītā saraksta, novēršot sadursmi. Tas nozīmē, ka divām ieejas vērtībām nevar būt vienādas izejas jaukšanas vērtības.

 

Hash izpēte Python

Šajā sadaļā mēs ātri pievērsīsim uzmanību hasham Python. Iemesls, kāpēc mēs izvēlamies Python, ir tas, ka tas ir viegli lasāms un to var izmantot ikviens bez lielām grūtībām.

Tā kā jaukšana ir izplatīta funkcija, tā jau ir ieviesta Python bibliotēkā. Izmantojot moduli, jūs varat norādīt objektu kā tā ievadi un pēc tam atgriezt jaukto vērtību.

Hash metodes sintakse ir šāda:

hash (objekts)

Kā redzat, tas prasa vienu parametru, kas ir objekts. Objekts var būt vesels skaitlis, pludiņš vai virkne.

Hash () metodes atgrieztā vērtība ir atkarīga no ievades. Veselam skaitlim tas var atgriezt to pašu skaitli, bet decimāldaļai un virknei būtu atšķirīgi.

Apskatīsim dažus piemērus zemāk.

num = 10 deci = 1,23556 str1 = "Nitish" print (hash (num)) print (hash (deci)) print (hash (str1))

Iepriekš minētā koda izeja ir šāda:

Tomēr jaukšanu nevar piemērot visiem objektu tipiem. Piemēram, ja atceraties, ka mēs savā pirmajā programmā izveidojām sarakstu no a līdz z. Ja mēģināsim to sajaukt, izvades logs tiks atvērts, izmantojot TypeError: unfashable type: ‘list’

Lai objektu sarakstam piemērotu jaukšanu, jums jāizmanto duplekss.

patskaņi = (‘a’, ‘e’, ​​’i’, ‘o’, ‘u’) print (hash (patskaņi)) Output ⇒ -5678652950122127926

Jaukšana kriptogrāfijā

Jaukšana ir noderīga kriptogrāfijai. Bitcoin izmanto jaukšanu, lai izveidotu un pārvaldītu Merkles kokus

Arī jaukšana ir bijusi kriptogrāfijas sastāvdaļa diezgan ilgu laiku. Tomēr labākais jaukšanas gadījums ir paroļu jaukšana un glabāšana. 

Merkles koki

Merkle koks ir datu struktūra, kas ir noderīga, veicot drošu datu pārbaudi lielā datu krājumā. Gan Bitcoin, gan Ethereum izmanto Merkle kokus, lai atrisinātu daudzus tehnoloģiskos šķēršļus, uzglabājot un piekļūstot datiem atklātā tīklā.

Nevienam centralizētam tīklam nav jāuztraucas par datu glabāšanu un piekļuvi tiem, jo ​​gan piekļuvei, gan datu glabāšanai ir tikai viens avots. Tomēr vienādojums mainās, kad ir decentralizēts tīkls, jo tagad dati ir jākopē starp simtiem iesaistīto vienaudžu.

Merkles koki atrisina problēmu, nodrošinot uzticamu un efektīvu veidu, kā koplietot un pārbaudīt datus starp vienaudžiem.

Merkles koka piemērs

Bet kāpēc mēs šeit apspriežam Merkles kokus? Merkles koki izmanto kodolu kā galveno funkcionalitāti, lai savienotu dažādus mezglus un datu blokus.

Merkle Trees ir apgriezts koks, kas var apkopot visu darījumu kopu.

Ja vēlaties uzzināt vairāk par Merkles kokiem un to, kā tā izmanto jaukšanu kriptogrāfijā, skatiet mūsu detalizēto ceļvedi:

Ceļvedis Merkles kokiem. Tur mēs apspriedām, kā Merkles koku darbarīki tiek veikti Bitcoin un citos lietošanas gadījumos.

Kalnrūpniecības process

Ieguves procesā tiek izmantotas arī jaukšanas iespējas. Runājot par bitcoin ieguvi, blokķēdei tiek pievienots jauns bloks, kad pēc tā ir pieprasījums.

Lai pievienotu bloku blokķēdei, jāievēro metode. Ja tiek parādīts jauns bloks, jaukšanas vērtība tiek ģenerēta atkarībā no bloka satura. Arī tad, ja ģenerētā jaucējkrāsa ir vairāk nekā tīkla grūtības, tiek sākts bloka pievienošanas process bloku ķēdei.

Kad tas ir izdarīts, visi tīkla vienaudži atzīst jaunā bloka pievienošanu.

Bet tas notiek reti, jo tīkla grūtības vairumā gadījumu vienmēr ir lielākas, salīdzinot ar ģenerēto jaucējkrānu. Ir vēl viens aspekts, kam ir izšķiroša loma ieguves procesā. Tā ir nonce.

Nonce tiek pievienota bloka jaukumam un ir patvaļīga virkne. Kad tas ir izdarīts, sasietā virkne tiek salīdzināta ar grūtības pakāpi. Ja grūtības pakāpe ir zemāka par sasaistīto virkni, tad nonce tiek mainīta, līdz grūtības pakāpe ir augstāka.

Procesu var apkopot šādās darbībās:

  • Saturs tiek jaukts, lai izveidotu jaunu jaukšanas vērtību ikreiz, kad tiek ģenerēts vai uzņemts jauns bloks,
  • Jauna nonce vērtība tiek ģenerēta un pievienota hash
  • Sajaukšanas process notiek uz jaunās sazinātās virknes 
  • Pēc tam jaucēja galīgā vērtība tiek salīdzināta ar tīkla grūtības pakāpi
  •  ja galīgā jaukšanas vērtība ir mazāka par nonce, process tiek atkārtots vēlreiz. Process apstājas tikai tad, ja jaukšanas vērtība ir lielāka par nonce.
  • Bloks pievienojas ķēdei, tiklīdz grūtības pakāpe ir augstāka
  • Tad kalnrači uzņemas atbildību par jaunā bloka izrakšanu un atlīdzību dalīšanu savā starpā.

Arī šeit rodas termins “hash rate”. Hash likme ir ātrums, kādā notiek jaukšanas operācijas. Lielāks jaukšanas līmenis nozīmē, ka kalnračiem būtu vajadzīga lielāka skaitļošanas jauda, ​​lai piedalītos ieguves procesā.

 

Secinājums

Tas mūs noved pie kriptogrāfijas padziļinātas rokasgrāmatas sajaukšanas beigām. Mēs detalizēti apskatījām jaukšanu un arī izpētījām kodu aiz tā.

Tātad, ko jūs domājat par to? Komentējiet zemāk un informējiet mūs.

 

#FAQ

Kas ir jaukšana kriptogrāfijā?

Kriptogrāfijā jaukšana ir metode datu pārvēršanai unikālā teksta virknē, izmantojot efektīvu metodi. Arī datu tipam vai tā lielumam nav ierobežojumu – jaukšana darbojas ar visiem tiem.

Kā kriptogrāfijā tiek izmantota jaukšana?

Kriptogrāfija izmanto jaukšanu, lai jauktu paroles vai ģenerētu unikālus identifikācijas numurus.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me
Like this post? Please share to your friends:
Adblock
detector
map