Hashing a rejtjelezésben

Szeretne többet megtudni a hasításról a rejtjelezésben? Ha mégis, akkor jó helyre került.

Ebben a cikkben többet fogunk megtudni a hashról.

A hashelés olyan informatikai technika, amely objektumok vagy értékek objektumok vagy értékek csoportjából történő azonosítására szolgál.

Zavarosnak hangzik?

Próbáljuk megérteni példával.

Nos, a főiskolák és iskolák egyedileg rendelt számot adnak minden hallgatójuknak. Ez az egyedi szám azonosítja a hallgatót és a vele kapcsolatos információkat. Az egyedi szám előállításához használt módszer a Hashing.

Egy másik népszerű példa a könyvtárak, ahol rengeteg könyvet talál a polcokon. Minden ott található könyvnek megvan az egyedi azonosító száma, hogy a hatalmas könyvtárban elhelyezhesse!

A hashelés modern példája a játékra regisztráló játékos lehet. A Valorant egy ingyenesen játszható játék, amelyet a Riot indított. Szabadon játszani azt jelenti, hogy emberek milliói fogják játszani a játékot.

Minden játékost egy azonosító algoritmus segítségével létrehozott egyedi azonosító érték alapján azonosítanak.

Hashing a rejtjelezésben

Próbáljuk megérteni az alábbiakban részletesebben.

Mi az a hashing?

Ahogy fentebb említettük, a hasholás az objektum azonosítása egy csoportból.

Minden objektum egyedi azonosító számot kap, miután kivonatolt.

De mit jelent ez technikailag?

Technikailag egy matematikai függvény rögzített hosszúságú kimenetet generál bármilyen hosszúságú bemeneti karakterláncból.

A Bitcoin tranzakciókat kivonatolják, ahol a tranzakciók egyedi azonosítókat kapnak.

Ha beírja a „Hello, Világ!” egy an SHA-256 kivonatoló algoritmus, a következő kimenetet kapja:

Bemenet: Helló Világ!

Kimenet: dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f

Itt az SHA256 generálja a kimenetet az adott bemenetből. Mint láthatja, a Secure Hash Function (SHA-256) hash algoritmust használtuk. Ez az egyik legnépszerűbb hash-módszer, beleértve a Message Direct (MD5) és a Secure Hash Function (SHA1) funkciókat.

A hash függvény legfontosabb tulajdonságai megbízhatóvá teszik. Soroljuk fel őket alább.

  • Meghatározó → Ez azt jelenti, hogy a kimenet minden körülmények között megegyezik az adott bemenettel.
  • Preimage Resistant → A preimage-rezisztens funkció biztosítja, hogy a kivonatolási érték nem használható a bemeneti érték előállításához.
  • Számítási szempontból hatékony → A hash funkciók hatékonyak és nem igényelnek hatalmas számítási erőforrásokat a végrehajtáshoz.
  • Nem lehet visszafordítani → A kivonatolási funkció nem változtatható meg.
  • Ütközésálló → Az ütközési ellenállás biztosítja, hogy két bemenet ne eredményezze ugyanazt a kimenetet.

Itt már bemutattuk a kriptográfiai hash-t kezdőknek. Nézze meg ott: Kriptográfiai hash: Kezdő útmutató.

De ha haladó dolgokért van itt, akkor nem fog csalódni.

Mi az a hash funkció és hash táblázat? És hogyan működnek?

Ebben a részben részletesebben megvizsgáljuk a hash függvényt és a hash táblákat. A kivonatolás szempontjából vannak hash függvények. Ezek a funkciók felelősek a nagy bemenetek kis rögzített bemenetekké alakításáért. A hash táblák tárolják a kimeneteket.

A kivonatolási folyamat során az objektumokat a kulcs / érték párok alapján osztják el a tömbben. Tehát, ha egy tömb elemet ad át a hash függvényeknek, akkor egy tömb kimenetet kap, ahol minden elemhez van egy kulcs csatolva. A kulcs / érték pár nagyon hasznos az elemek valós idejű eléréséről, mivel lenyűgöző O (1) időt kínál.

A hash függvények megvalósításához vegye le a két előnyben részesített megközelítést.

  • Az első megközelítés az, hogy hash függvényt használ egy elem egész számgá történő átalakítására. Ezután az egész kimenettel fel lehet használni az elemet a hash tábla feltöltésekor.
  • Egy másik lépés az elem beillesztése a hash táblába, majd a kivonatoló kulcs használatával beolvasás.

A 2. módszerben a függvények az alábbiak lesznek:

hash = hash_function (kulcs) index = hash% tömb_méret

Itt a kivonat és a tömb mérete független egymástól. Az index értékét a tömb mérete alapján számítják ki. A Modulo operátor (%) lehetővé teszi számunkra az érték kiszámítását.

Egyszerűen fogalmazva: a hash függvény meghatározható olyan funkcióként, amely tetszőleges méretű adatsort rögzíthet rögzített méretű adathalmazra. Az így kapott rögzített méretű adathalmaz tárolható a hash táblában. Sok nevet adunk a hash függvény által visszaadott értékeknek. Nevezhetjük hash értékeknek, hashoknak, hash összegeknek és hash kódoknak.

Jó hash funkció írása

Ha jó kivonatolási funkciót vagy mechanizmust szeretne létrehozni, meg kell értenie a létrehozásának alapvető követelményeit. Soroljuk fel őket alább:

  • A hash függvénynek könnyen kiszámíthatónak kell lennie. Ez azt jelenti, hogy a végrehajtáshoz nem kell sok erőforrás.
  • A hash funkciót egyenletesen kell elosztani. Ezzel hash táblákat használnak a hash értékek tárolására, hogy ne történjen fürtözés.
  • Az utolsó követelmény az, hogy kevesebb vagy egyáltalán ne legyen ütközés. Az ütközés hiánya azt jelenti, hogy egyetlen kimenet nincs leképezve két bemenetre.

Műszakilag az ütközések egy kivonatoló funkció részét képezik, és egyszerűen nem távolíthatók el a kivonatoló funkcióból. A cél egy olyan hash-funkció létrehozása, amely jó hash-tábla teljesítményt kínál és megoldhatja az ütközést az ütközés feloldási technikákkal.

Miért van szükségünk egy jó hash funkcióra??

A hasznos kivonatolási funkció szükségességének megértéséhez vessünk egy példát az alábbiakban.

Tegyük fel, hogy egy hash táblázatot szeretnénk létrehozni egy hash technika segítségével, ahol a bemeneti karakterláncok a következők lesznek: {„agk”, „kag”, „gak”, „akg”, „kga”, „gka”}

Most létrehozunk egy hash függvényt, amely egyszerűen összeadja a (97), g (103) és k (107) ASCII értékét, majd 307-gyel elvégzi az összeg modulóját..

Nyilvánvaló, hogy a három szám összege is 307. Ez azt jelenti, hogy ha az összes számot áthatoljuk, majd modulo műveletet hajtunk végre, ugyanazt az eredményt kapjuk. A végeredmény az összes húr tárolása ugyanazon indexszámnál. A hash függvény algoritmikus ideje O (n) komplexitás is lenne, ami nem kívánatos. Könnyen megállapíthatjuk, hogy az általunk leírt hash függvény nem optimális a valós forgatókönyvekhez.

A hash függvény javításához telepíthetjük az egyes elemek ASCII értékeinek elosztását egy másik prímszámmal, 727-el. Ezzel más kimenetet kapunk az adott bemeneti karakterlánc tömbhöz.

A hash-táblák megismerése

A hash táblák nagyon hasznosak egy hash függvény eredményének tárolásában, amely kiszámítja az indexet, majd egy értéket tárol vele szemben. A végeredmény gyorsabb számítási folyamat lenne O (1) komplexitás mellett.

A hasási táblák hagyományosan jó választás az O (n) időt igénylő problémák megoldásában.

Tehát, ha felvesz egy rögzített hosszúságú karakterláncot, majd megpróbálja megtanulni a karakterlánc karakterfrekvenciáját.

Tehát, ha a string = „aacddce”, akkor egy általános megközelítés az, hogy többször át kell menni a sztringen, és minden frekvenciát el kell tárolni.

# Adjon meg egy beviteli karakterláncot, és számolja meg az adott karakterláncban szereplő karakterek gyakoriságát

# Az algoritmus 0 (n) bonyolultsági idő

temp_list = [] kezdet = "a" str = "ababcddefff" def alfa_zeta (): alfa = ‘a’ az i tartományban (0,26): temp_list.append (alfa) alfa = chr (ord (alfa) + 1) visszatér temp_lista temp_list = alfa_zeta () # nyomtatás (temp_lista) def karakter_frekvencia (str, temp_list): a temp_list mindegyikéhez: freq = 0 az i-hez az str-ben: if (i == mindegyik): freq = freq + 1 print (mindegyik, freq) character_frequency (str, temp_list)

A fenti program kimenete a következő lesz:

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

Most valósítsunk meg egy hash táblázatot C ++ nyelven, és számoljuk meg a karakterek gyakoriságát.

#include névtér std használatával; int Frekvencia [26]; int hashFunc (char c) {return (c – ‘a’); } void countFre (S karakterlánc) {for (int i = 0; i< S.hossz (); ++ i) {int index = hashFunc (S [i]); Frekvencia [index] ++; } For (int i = 0; i<26; ++ i) {cout << (char) (i + ‘a’) << ” << Gyakoriság [i]<< endl; }} Int main () {cout<<"Helló Világ"; countFre ("abbaccbdd"); }

A program kimenete a következő lenne:

a 2 b 3 c 2 d 2

Az algoritmus O (N) komplexitása gyorsabbá teszi más lineáris megközelítésekhez képest.

Hogyan lehet megoldani az ütközéseket

A hash függvényekben az ütközések megoldására egyedülálló módszerek vannak. Az egyik népszerű módszer a külön láncolás, amely más néven nyílt hash. Összekapcsolt listával valósítják meg, ahol a lánc minden eleme maga is összekapcsolt lista. Ez a megközelítés lehetővé teszi az elemek tárolását és annak biztosítását, hogy bizonyos elemek csak az adott összekapcsolt lista részei legyenek, megoldva az ütközést. Ez azt jelenti, hogy két bemeneti értéknek sem lehet azonos kimeneti kivonatértéke.

Hash felfedezése a Pythonban

Ebben a szakaszban gyorsan megnézzük a hash-t a Pythonban. Azért választjuk a Python-t, hogy könnyen olvasható és bárki használhatja különösebb gond nélkül.

Mivel a hash általános funkció, a Python könyvtárban már megvalósításra került. A modul használatával megadhat egy objektumot bemenetként, majd visszaadhatja a kivonatolt értéket.

A hash módszer szintaxisa:

hash (objektum)

Mint láthatja, egyetlen paramétert kell beírnia, amely az objektum. Az objektum lehet egész szám, úszó vagy karakterlánc.

A hash () metódus visszaadott értéke a bemenettől függ. Egész szám esetén ugyanazt a számot adhatja vissza, míg a tizedes és a karakterlánc eltérő lehet.

Lássunk néhány példát az alábbiakban.

szám = 10 deci = 1,23556 str1 = "Nitish" nyomtat (hash (szám)) print (hash (deci)) nyomtat (hash (str1))

A fenti kód kimenete az alábbiak szerint alakul:

hash a kriptográfiában

A kivonatolás azonban nem alkalmazható minden objektumtípusra. Például, ha emlékszik, hogy az első programunkban létrehoztunk egy listát a-tól z-ig. Ha megpróbáljuk kivonatolni, akkor a kimeneti ablak egy TypeError: unashable type: ‘list’ segítségével jut el

hash-in-crpytography-python-hiba

A kivonatolás objektumlistára való alkalmazásához a duplát kell használnia.

magánhangzók = (‘a’, ‘e’, ​​’i’, ‘o’, ‘u’) nyomtatás (hash (magánhangzók)) Kimenet ⇒ -5678652950122127926

Hashing a rejtjelezésben

A hashelés a kriptográfia szempontjából hasznos. A Bitcoin hash-t használ a Merkle-fák létrehozásához és kezeléséhez

Ezenkívül a hasholás már jó ideje a kriptográfia része. A kivonatolás legjobb esete azonban a jelszavak kivonása és tárolása.

Merkle Fák

A Merkle fa egy olyan adatstruktúra, amely hasznos, ha biztonságos adatellenőrzést kell végrehajtani egy nagy adatkészletben. Mind a Bitcoin, mind az Ethereum a Merkle fákat használja fel számos technológiai akadály megoldására, amikor az adatokat nyílt hálózatban tárolja és fér hozzá.

Bármely központosított hálózatnak nem kell aggódnia az adatok tárolása és elérése miatt, mivel az adatokhoz való hozzáféréshez és tároláshoz csak egy forrás létezik. Az egyenlet azonban akkor változik, ha decentralizált hálózat van, mivel az adatokat másolni kell több száz résztvevő társ között.

A Merkle-fák megoldják a problémát azáltal, hogy megbízható és hatékony módszert kínálnak az adatok megosztására és ellenőrzésére a társaik között.

merkle-fa-példa

Merkle-fa példa

De miért tárgyaljuk itt a Merkle fákat? A Merkle fák a kivonatot használják mint alapvető funkciót a különböző csomópontok és adatblokkok összekapcsolására.

A Merkle Trees egy fejjel lefelé fordított fa, amely összefoglalhatja az egész tranzakciókészletet.

Ha többet szeretne megtudni a Merkle fákról és arról, hogy miként használja a hasítást a rejtjelezésben, nézze meg részletes útmutatónkat: Útmutató a Merkle fákhoz. Ott megvitattuk, hogy a Merkle fák eszközei hogyan kerülnek végrehajtásra bitcoinban és más felhasználási esetekben.

Bányászati ​​folyamat

A bányászati ​​folyamat a hasítást is kihasználja. Amikor a bitcoin bányászatról van szó, akkor egy új blokk kerül a blokkláncba, amikor igény van rá.

Egy módszert kell követni a blokk hozzáadásához a blokklánchoz. A hash értéke a blokk tartalmától függően jön létre, amikor új blokk érkezik. Továbbá, ha a létrehozott kivonat több mint hálózati nehézség, akkor elindul a blokk blokklánchoz adásának folyamata.

Ha elkészült, a hálózat összes társa elismeri az új blokk hozzáadását.

De ez ritkán fordul elő, mivel a hálózati nehézség a legtöbb esetben mindig nagyobb a létrehozott hashhoz képest. Van még egy szempont, amely döntő szerepet játszik a bányászati ​​folyamatban. Ez a nonce.

A nonce hozzáadódik a blokk kivonatához, és tetszőleges karakterlánc. Miután elkészült, az összefűzött karakterláncot összehasonlítjuk a nehézségi szinttel. Ha a nehézségi szint alacsonyabb, mint az összefűzött karakterlánc, akkor a nonce addig változik, amíg a nehézségi szint magasabb nem lesz.

A folyamat a következő lépésekben foglalható össze:

  • A tartalom kivonatolása új hash értéket hoz létre, valahányszor új blokkot hoznak létre vagy vesznek fel,
  • Új nonce érték generálódik és csatolódik a kivonathoz
  • A kivonatolási folyamat az új, kapcsolatba lépett húron történik
  • A hash végső értékét ezután összehasonlítják a hálózat nehézségi szintjével
  • ha a végső hash érték alacsonyabb, mint a nonce, akkor a folyamatot megismételjük. A folyamat csak akkor áll le, ha a kivonatolási érték nagyobb, mint a nonce.
  • Blokk akkor csatlakozik a lánchoz, ha a nehézségi szint magasabb
  • Ezután a bányászok felelősséget vállalnak az új blokk kibányászásáért, és megosztják maguk között a jutalmakat.

A „hash rate” kifejezés is innen származik. A hash sebesség az a sebesség, amellyel a hash műveletek végbemennek. A magasabb hash arány azt jelenti, hogy a bányászoknak nagyobb számítási erőre lenne szükségük a bányászati ​​folyamatban való részvételhez.

Következtetés

Ez elvezet minket a rejtjelezés mélyreható útmutatásának végéhez. Részletesen áttekintettük a kivonatot, és feltártuk a mögötte lévő kódot is.

Szóval, mit gondolsz erről? Hozzászólás az alábbiakban, és tudassa velünk.

#GYIK

Mi keveredik a rejtjelezésben?

A rejtjelezésben a kivonatolás olyan módszer, amellyel hatékony módszerrel konvertálhatunk adatokat egyedi szövegsorokká. Emellett nincs korlátozás az adatok típusára vagy méretére vonatkozóan – a hasholás mindegyiken működik.

Hogyan használják a hash-t a rejtjelezésben?

A rejtjelezés a hash-t használja a jelszavak kivonatolásához vagy egyedi azonosító számok létrehozásához.

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