Ar norite sužinoti apie maišymą kriptografijoje? Jei taip darote, tada patekote į reikiamą vietą.

Šiame straipsnyje mes išnagrinėsime daugiau apie maišymą.

Maišymas yra informatikos technika, skirta objektams ar vertybėms nustatyti iš objektų ar vertybių grupės.

Skamba painiai?

Pabandykime suprasti pavyzdžiu.

Na, kolegijos ir mokyklos kiekvienam savo studentui suteikia unikalų numerį. Šis unikalus numeris identifikuoja studentą ir su juo susijusią informaciją. Unikalaus skaičiaus generavimui naudojamas metodas yra maišos.

Kitas populiarus pavyzdys yra bibliotekos, kuriose lentynose rasite daugybę knygų. Kiekviena ten esanti knyga turi savo unikalų identifikacinį numerį, kad ją būtų galima rasti didžiulėje bibliotekoje!

Šiuolaikinis maišos pavyzdys būtų žaidėjai, kurie registruojasi žaidime. „Valorant“ yra nemokamas žaidimas, kurį pradėjo „Riot“. Būdamas laisvas žaidimas reiškia, kad milijonai žmonių žais žaidimą.

Kiekvienas žaidėjas identifikuojamas naudojant unikalią identifikavimo vertę, sukurtą naudojant maišos algoritmą.

Maišymas kriptografijoje

Pabandykime tai suprasti išsamiau žemiau.

Kas yra hashas?

Kaip minėta aukščiau, maišos yra būdas nustatyti objektą iš grupės.

Kiekvienas objektas gauna unikalų identifikavimo numerį, kai maišo.

Bet ką tai reiškia techniškai?

Techniškai matematinė funkcija sukuria fiksuoto ilgio išvestį iš bet kokios ilgio įvesties eilutės.

„Bitcoin“ operacijos maišomos ten, kur operacijos gauna unikalius ID.

Jei įdėsite „Hello, World!“ į SHA-256 maišos algoritmas, gausite tokią išvestį:

Įvestis: Labas pasauli!

Išvestis: dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f

Čia SHA256 generuoja išvestį iš duoto įvesties. Kaip matote, mes naudojome maišos algoritmą „Secure Hash Function“ (SHA-256). Tai yra vienas iš populiariausių maišos būdų, įskaitant „Message Direct“ (MD5) ir „Secure Hash“ funkciją (SHA1)..

Pagrindinės maišos funkcijos savybės daro ją patikimą. Pateiksime juos žemiau.

  • Deterministinis → Tai reiškia, kad tam tikromis aplinkybėmis išvestis bus vienoda tam tikram įėjimui.
  • Prieš vaizdus atsparus → Išankstiniam vaizdui atspari funkcija užtikrina, kad maišos vertė nebūtų naudinga kuriant įvesties vertę.
  • Skaičiavimo požiūriu efektyvus → Maišos funkcijos yra efektyvios ir jų vykdymui nereikia didelių skaičiavimo išteklių.
  • Inžinerijos pakeisti negalima → Maišos funkcijos negalima pakeisti.
  • Atsparus susidūrimui → Atsparumas susidūrimui užtikrina, kad nėra dviejų įėjimų, gaunančių tą patį išėjimą.

Čia jau aprašėme kriptografinį maišymą pradedantiesiems. Patikrinkite tai ten: Kriptografinis maišymas: vadovas pradedantiesiems.

Bet jei jūs čia ieškote pažangių dalykų, nenusivilsite.

Kas yra maišos funkcija ir maišos lentelės? Ir kaip jie veikia?

Šiame skyriuje mes išsamiau išnagrinėsime maišos funkciją ir maišos lenteles. Maišymo prasme yra maišos funkcijos. Šios funkcijos yra atsakingos už didelių įvesties pavertimą mažomis pastoviomis įvestimis. Maišos lentelėse saugomi išėjimai.

Maišymo procese objektai paskirstomi pagal masyvą pagal jų raktų / reikšmių poras. Taigi, jei maišų funkcijoms perduosite elementų masyvą, gausite masyvo išvestį, kurioje dabar prie kiekvieno elemento bus pridėtas raktas. Rakto / vertės pora yra labai naudinga, kai reikia pasiekti elementus realiuoju laiku, nes ji siūlo įspūdingą O (1) laiką.

Norėdami įdiegti maišos funkcijas, galite pasirinkti du pageidaujamus metodus.

  • Pirmasis būdas yra naudoti maišos funkciją, kad elementas būtų paverstas sveikuoju skaičiumi. Tada sveikojo skaičiaus išvestis gali būti naudojama norint pasiekti elementą dedant maišos lentelę.
  • Kitas žingsnis yra įdėti elementą į maišos lentelę ir tada jį gauti naudojant maišos raktą.

Antruoju metodu funkcijos bus tokios:

hash = maišos_funkcija (raktas) rodyklė = maišos% masyvo dydis

Čia maišos ir masyvo dydžiai yra nepriklausomi vienas nuo kito. Indekso vertė apskaičiuojama pagal masyvo dydį. „Modulo“ operatorius (%) leidžia apskaičiuoti vertę.

Paprasčiau tariant, maišos funkciją galima apibrėžti kaip funkciją, kuri gali susieti savavališko dydžio duomenų rinkinį su fiksuoto dydžio duomenų rinkiniu. Gautą fiksuoto dydžio duomenų rinkinį galima laikyti maišos lentelėje. Maišos funkcijai grąžintoms reikšmėms suteikiama daug pavadinimų. Jas galima vadinti maišos reikšmėmis, maišos, maišos sumomis ir maišos kodais.

Geros maišos funkcijos rašymas

Jei norite sukurti gerą maišos funkciją ar mechanizmą, turite suprasti pagrindinius jo sukūrimo reikalavimus. Pateiksime juos žemiau:

  • Maišos funkciją reikia lengvai apskaičiuoti. Tai reiškia, kad įvykdyti nereikėtų daugybės išteklių.
  • Maišos funkcija turi būti vienodai paskirstyta. Tokiu būdu maišos lentelės naudojamos maišos reikšmėms saugoti, kad neatsirastų grupių.
  • Paskutinis reikalavimas – kad susidūrimas būtų mažesnis arba jo nebūtų visai. Joks susidūrimas nereiškia, kad nė vienas išėjimas nėra susietas su dviem įėjimais.

Techniškai susidūrimai yra maišos funkcijos dalis ir jos tiesiog negalima pašalinti iš maišos funkcijos. Tikslas yra sukurti maišos funkciją, kuri galėtų pasiūlyti gerą maišos lentelės veikimą ir išspręsti susidūrimą naudojant susidūrimo sprendimo būdus.

Kodėl mums reikia geros maišos funkcijos?

Norėdami suprasti naudingos maišos funkcijos poreikį, apžvelkime toliau pateiktą pavyzdį.

Tarkime, kad norime sukurti maišos lentelę naudojant maišos techniką, kur įvesties eilutės bus tokios: {„agk“, „kag“, „gak“, „akg“, „kga“, „gka“}

Dabar sukuriame maišos funkciją, kuri paprasčiausiai prideda ASCII reikšmes a (97), g (103) ir k (107), o tada sumos modulį padaro 307.

Aišku, trijų skaičių suma taip pat yra 307. Tai reiškia, kad jei mes perversime visus skaičius ir atliksime modulo operaciją, gausime tą patį rezultatą. Galutinis rezultatas būtų išsaugoti visas eilutes tuo pačiu indekso numeriu. Maišos funkcijos algoritminis laikas taip pat būtų O (n) sudėtingumas, kuris nėra pageidautinas. Mes galime lengvai padaryti išvadą, kad maišo funkcija, kurią aprašėme, nėra optimali realaus gyvenimo scenarijams.

Norėdami pataisyti maišos funkciją, galime panaudoti kiekvieno elemento ASCII reikšmių sumą padaliję iš kito pirminio skaičiaus 727. Tai darydami gausime skirtingą išvestį mūsų pateiktoms įvesties eilučių masyvui.

Sužinokite apie „Hash“ lenteles

Maišos lentelės yra labai naudingos saugant maišos funkcijos rezultatą, kuris apskaičiuoja indeksą ir po to saugo jo vertę. Galutinis rezultatas būtų greitesnis skaičiavimo procesas su O (1) sudėtingumu.

Hash lentelės tradiciškai yra geras pasirinkimas sprendžiant problemas, kurioms reikia O (n) laiko.

Taigi, jei pasiimsite fiksuoto ilgio eilutę ir pabandysite išmokti eilutės simbolių dažnį.

Taigi, jei eilutė = „aacddce“, tai bendras metodas yra pereiti eilutę kelis kartus ir saugoti kiekvieną dažnį.

#Pateikite įvesties eilutę ir suskaičiuokite tos eilutės simbolių dažnumą

# Algoritmas yra 0 (n) sudėtingumo laikas

temp_list = [] pradžia = "a" str = "ababcddefff" def alfa_zeta (): alfa = ‘a’ i diapazone (0,26): temp_list.append (alfa) alfa = chr (ord (alfa) + 1) grąžinti temp_list temp_list = alfa_zeta () #print (temp_list) def simbolių_dažnis (str, temp_list): kiekvienam temp_list: freq = 0, i i str: if (i == kiekvienas): freq = freq + 1 spausdinimas (kiekvienas, freq) character_frequency (str, temp_list)

Minėtos programos rezultatas bus toks:

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

Dabar įgyvendinkime maišos lentelę C ++ ir suskaičiuokime simbolių dažnį.

#include naudojant vardų srities standartą; int Dažnis [26]; int hashFunc (char c) {return (c – ‘a’); } void countFre (eilutė S) {for (int i = 0; i< S. ilgis (); ++ i) {int indeksas = hashFunc (S [i]); Dažnis [indeksas] ++; } Už (int i = 0; i<26; ++ i) {cout << (char) (i + „a“) << ” << Dažnis [i]<< endl; }} Int main () {cout<<"Labas pasauli"; countFre ("abbaccbdd"); }

Programos rezultatas būtų toks:

a 2 b 3 c 2 d 2

Algoritmo O (N) sudėtingumas daro jį greitesnį, palyginti su kitais tiesiniais metodais.

Kaip išspręsti susidūrimus

Yra unikalių būdų, kaip išspręsti susidūrimus naudojant maišos funkcijas. Vienas iš populiariausių būdų yra atskira grandinė, kuri taip pat žinoma kaip atviras maišymas. Jis įgyvendinamas susietu sąrašu, kur kiekvienas grandinės elementas yra susietas sąrašas. Šis metodas leidžia saugoti elementus ir užtikrinti, kad tam tikri elementai yra tik konkretaus susieto sąrašo dalis, išsprendžiant susidūrimą. Tai reiškia, kad jokios dvi įvesties reikšmės negali turėti vienodos išvesties maišos vertės.

„Hash“ tyrimas „Python“

Šiame skyriuje mes greitai pažvelgsime į hashą „Python“. Priežastis, kodėl pasirenkame „Python“, yra ta, kad ją lengva skaityti ir ja gali naudotis visi be didelių rūpesčių.

Maišymas yra įprasta funkcija, todėl jis jau įdiegtas „Python“ bibliotekoje. Naudodami modulį, galite nurodyti objektą kaip jo įvestį ir tada grąžinti maišos vertę.

Maišos metodo sintaksė yra tokia:

maišos (objektas)

Kaip matote, tam reikia vieno parametro, kuris yra objektas. Objektas gali būti sveikasis skaičius, plūduriuojantis arba eilutė.

Grąžinta maišos () metodo vertė priklauso nuo įvesties. Sveikasis skaičius gali grąžinti tą patį skaičių, o dešimtainis ir eilutė būtų skirtingi.

Pažiūrėkime keletą pavyzdžių žemiau.

skaičius = 10 deci = 1,23556 str1 = "Nitish" spausdinti (maišos (numeris)) spausdinti (maišos (deci)) spausdinti (maišos (str1))

Minėto kodo išvestis yra tokia:

maišos kriptografijoje

Tačiau maišos negalima pritaikyti visiems objektų tipams. Pavyzdžiui, jei prisimenate, kad pirmojoje programoje sukūrėme nuo a iki z sąrašą. Jei bandysime jį maišyti, išvesties langas bus rodomas per „TypeError: unfashable type:‘ list “

maiša-in-crpytography-python-klaida

Norėdami pritaikyti maišymą objektų sąraše, turite naudoti „tuple“.

balsiai = (‘a’, ‘e’, ​​’i’, ‘o’, ‘u’) spausdinti (maišos (balsiai)) Išvestis ⇒ -5678652950122127926

Maišymas kriptografijoje

Maišymas yra naudingas kriptografijai. „Bitcoin“ naudoja maišymą kurdamas ir valdydamas Merkle medžius

Be to, maišymas gana ilgą laiką buvo kriptografijos dalis. Tačiau geriausias maišos atvejis yra slaptažodžių maiša ir saugojimas.

Merkle medžiai

Merkle medis yra duomenų struktūra, kuri yra naudinga atliekant saugų duomenų patikrinimą dideliame duomenų telkinyje. Tiek „Bitcoin“, tiek „Ethereum“ naudoja Merkle medžius, kad išspręstų daugelį technologinių kliūčių, kai duomenys saugomi ir prieinami atvirame tinkle.

Bet kuris centralizuotas tinklas neturi jaudintis dėl duomenų saugojimo ir prieigos, nes prieigai prie duomenų ir jų saugojimui yra tik vienas šaltinis. Tačiau lygtis keičiasi, kai yra decentralizuotas tinklas, nes dabar duomenis reikia nukopijuoti tarp šimtų dalyvaujančių bendraamžių.

Merkle medžiai išsprendžia problemą, suteikdami patikimą ir efektyvų būdą dalytis ir patikrinti duomenis tarp bendraamžių.

merkle-medis-pavyzdys

Merkle Tree pavyzdys

Bet kodėl mes čia diskutuojame apie Merkle medžius? Merkle medžiai naudoja maišos funkciją, kad sujungtų skirtingus mazgus ir duomenų blokus.

„Merkle Trees“ yra apverstas medis, galintis apibendrinti visą sandorių rinkinį.

Jei norite sužinoti daugiau apie Merkle medžius ir kaip jis naudoja maišos kriptografijoje, peržiūrėkite mūsų išsamų vadovą: „Merkle Trees“ vadovas. Ten mes aptarėme, kaip Merkle medžių padargai atliekami bitkoinais ir kitais naudojimo atvejais.

Kasybos procesas

Kasybos procese taip pat naudojamas maišymas. Kalbant apie bitkoinų gavybą, į blokų grandinę įtraukiamas naujas blokas, kai tam yra paklausa.

Norint įtraukti bloką į blokų grandinę, reikia laikytis metodo. Maišos reikšmė generuojama atsižvelgiant į bloko turinį, kai ateina naujas blokas. Be to, jei sugeneruotas maišos yra daugiau nei tinklo sunkumų, prasideda bloko įtraukimo į blokų grandinę procesas.

Kai tai bus padaryta, visi tinklo bendraamžiai pripažins naujo bloko pridėjimą.

Bet tai retai būna, nes tinklo sunkumai dažniausiai būna didesni, palyginti su sugeneruotu maišu. Kasybos procese lemiamą vaidmenį vaidina dar vienas aspektas. Tai yra nonce.

Nonce pridedamas prie bloko maišos ir yra savavališkas eilutė. Atlikus sujungtą eilutę, ji lyginama su sunkumo lygiu. Jei sunkumo lygis yra žemesnis už sujungtą eilutę, tada nonce keičiama tol, kol sunkumo lygis bus didesnis.

Procesą galima apibendrinti atlikus šiuos veiksmus:

  • Turinys maišomas, kad būtų sukurta nauja maišos reikšmė, kai tik generuojamas ar paimamas naujas blokas,
  • Gaunama nauja nonce vertė ir pridedama prie maišos
  • Maišos procesas vyksta naujoje eilutėje, su kuria susisiekta
  • Tada galutinė maišos vertė palyginama su tinklo sunkumo lygiu
  • jei galutinė maišos vertė yra mažesnė nei nonce, procesas pakartojamas dar kartą. Procesas sustoja tik tada, kai maišos reikšmė yra didesnė nei nonce.
  • Blokas prisijungia prie grandinės, kai sunkumo lygis yra didesnis
  • Tada kalnakasiai prisiima atsakomybę už išminuoti naująjį bloką ir pasidalinti atlygiais.

Čia taip pat yra terminas „maišos norma“. Maišos norma yra maišos operacijų greitis. Didesnis maišos rodiklis reiškia, kad kalnakasiams prireiktų daugiau skaičiavimo pajėgumų, kad galėtų dalyvauti kasybos procese.

Išvada

Tai veda mus į išsamaus kriptografijos vadovo maišos pabaigą. Mes išsamiai aptarėme maišymą ir ištyrėme jo kodą.

Taigi, ką tu apie tai galvoji? Pakomentuokite žemiau ir praneškite mums.

#DUK

Kas maišo kriptografijoje?

Kriptografijoje maiša yra būdas konvertuoti duomenis į unikalią teksto eilutę naudojant efektyvų metodą. Be to, nėra jokių duomenų tipo ar dydžio apribojimų – maišymas veikia juos visus.

Kaip maišymas naudojamas kriptografijoje?

Kriptografijoje naudojamas maišos slaptažodžių maiša arba unikalių identifikavimo numerių generavimas.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me