Ang hashing ay tumutukoy sa proseso ng pagbuo ng fixed-sized na output mula sa isang input na may iba-ibang laki. Ginagawa ito gamit ang mga mathematical formula na kilala bilang mga hash function (na ipinapatupad bilang mga hashing algorithm).
Bagama't hindi lahat ng hash function ay ginagamitan ng cryptography, ang mga tinatawag na cryptographic hash function ay nasa sentro ng mga cryptocurrency. Dahil sa mga ito, nagkakaroon ang mga blockchain at iba pang ipinamahaging system ng matataas na antas ng integridad at seguridad ng data.
Parehong deterministic ang mga conventional at cryptographic hash function. Nangangahulugan ang pagiging deterministic na hangga't hindi nagbabago ang input, laging pareho ang nagagawang output (kilala rin bilang digest o hash) ng hashing algorithm.
Kadalasan, idinidisenyo ang mga hashing algorithm ng mga cryptocurrency bilang mga one-way na function, ibig sabihin, hindi sila madaling naibabalik sa dati nang walang maraming computing time at mapagkukunan. Sa ibang salita, madaling bumuo ng output mula sa input, pero mahirap na tahakin ang salungat na direksyon (ang pagbuo ng input mula sa output lang). Sa pangkalahatan, kung mas mahirap hanapin ang input, maituturing na mas may seguridad ang hashing algorithm.
Paano gumagana ang hash function?
Makakagawa ng output na may iba-ibang laki ang iba't ibang hash function, pero laging pareho ang posibleng mga laki output sa bawat hashing algorithm. Halimbawa, makakagawa lang ng output na 256 bits ang SHA-256 algorithm, habang ang SHA-1 ay makakagawa lang ng 160-bits digest.
Para ilarawan ito, gamitin natin ang mga salitang “Binance” at “binance” sa SHA-256 hashing algorithm (na ginagamit sa Bitcoin).
Tandaan na ang maliit na pagbabago (ang case ng unang letra) ay nagresulta sa isang ibang-ibang hash value. Pero dahil ginagamit natin ang SHA-256, ang output ay laging may iisang laki na 256-bits (o 46 character) - anuman ang laki ng input. Bukod pa rito, hindi mahalaga kung ilang beses ilalagay ang parehong mga salita sa algorithm, ang dalawang output ay hindi mababago.
Salungat dito, kung ilalagay natin ang parehong mga input sa SHA-1 hashing algorithm, makukuha natin ang mga sumusunod na resulta:
Tandaan na ang mga letrang SHA ay nangangahulugang Secure Hash Algorithms. Tumutukoy ito sa isang set ng mga cryptographic hash function na kinabibilangan ng SHA-0 at SHA-1 na mga algorithm kasama ng SHA-2 at SHA-3 na mga grupo. Ang SHA-256 ay bahagi ng grupong SHA-2, kasama ng SHA-512 at iba pang klase nito. Sa kasalukuyan, ang mga grupong SHA-2 at SHA-3 lang ang itinuturing na ligtas.
Bakit mahalaga ang mga ito?
Maraming iba't ibang mapaggagamitan ang mga karaniwang hash function, kasama na ang paghahanap sa database, pagsusuri ng malalaking file, at pamamahala ng data. Sa kabilang banda, malawakang ginagamit ang mga cryptographic hash function sa mga application para sa seguridad ng impormasyon, gaya ng pag-authenticate ng mensahe at digital fingerprinting. Pagdating sa Bitcoin, ang mga cryptographic hash function ay mahalagang bahagi ng proseso ng pagmimina at may papel din ito sa pagbuo ng mga bagong address at key.
Ang totoong kapangyarihan ng hashing ay makikita sa paghawak sa malalaking bilang ng impormasyon. Halimbawa, puwedeng magpatakbo ng isang tao ng malaking file o data set sa isang hash function at gamitin ang output nito para agad na ma-verify ang katumpakan at integridad ng data. Posible ito dahil sa deterministic na katangian ng mga hash function: ang input ay laging magreresulta sa mas pinasimple at siniksik na output (hash). Tinatanggal ng ganitong technique ay pangangailangan sa pagtatago at “pagtanda” sa malalaking bilang ng data.
Partikular na kapaki-pakinabang ang hashing sa konteksto ng teknolohiya ng blockchain. Ang blockchain ng Bitcoin ay may ilang operasyon na may kinalaman sa hashing, karamihan sa mga ito ay nasa proseso ng pagmimina. Sa katunayan, halos lahat ng protocol ng cryptocurrency ay nakadepende sa hashing para iugnay at pagsama-samahin ang mga grupo ng mga transaksyon sa mga block, at para makagawa ng mga cryptographic na link sa pagitan ng bawat block, nang sa ganun ay epektibong makabuo ng blockchain.
Mga cryptographic hash function
Muli, ang hash function na gumagamit ng mga cryptographic na technique ay puwedeng ituring bilang isang cryptographic hash function. Sa pangkalahatan, ang pagbasag ng isang cryptographic hash function ay nangangailangan ng maraming puwersahang pagtatangka. Para “maibalik sa dati” ng isang tao ang cryptographic hash function, kinakailangan niyang hulaan kung ano ang input sa pamamagitan ng paulit-ulit na pagsubok hanggang sa mabuo ang katumbas na output. Gayunpaman, mayroon ding posibilidad ng pagkakaroon ng magkakaibang input na gumagawa ng parehong output, kung saan nagkakaroon ng “collision”.
Sa teknikal na paliwanag, kinakailangang sumunod ng isang cryptographic hash function sa tatlong katangian para maituring na ligtas. Puwede nating ilarawan ang mga ito bilang collision resistance, preimage resistance, at second preimage resistance.
Bago talakayin ang bawat isang katangian, ibuod natin ang lohika ng mga ito sa tatlong maiikling pangungusap.
Collision resistance: hindi posibleng makahanap ng dalawang magkaibang input na nakakagawa ng parehong hash bilang output.
Preimage resistance: hindi posibleng “ibalik sa dati” ang hash function (hanapin ang input mula sa ibinigay na output).
Second-preimage resistance: hindi posibleng makahanap ng ikalawang input na nagko-collide sa isang partikular na input.
Collision resistance
Tulad sa nabanggit, nangyayari ang collision kapag nakagawa ng eksaktong kaparehong hash ang magkaibang input. Samakatuwid, itinuturing na collision-resistant ang hash function hanggang sa may makahanap ng collision. Tandaan na laging may collision sa anumang hash function dahil walang hanggan ang posibleng mga input, habang bilang lang ang mga posibleng input.
Puwede rin itong tingnan sa ibang paraan, ang hash function ay collision-resistant kapag masyadong mababa ang posibilidad na may mahanap na collision na mangangailangan ito ng milyon-milyong taon ng pag-compute. Kaya sa kabila ng katotohanan na walang hash function na walang collision, ang ilan sa mga ito ay may sapat na lakas para ituring na resistant (halimbawa ang SHA-256).
Sa iba't ibang SHA algorithm, hindi na secure ang mga grupong SHA-0 at SHA-1 dahil may mga nakita nang collision. Sa kasalukuyan, itinuturing na resistant sa mga collision ang mga grupong SHA-2 at SHA-3.
Preimage resistance
Ang katangiang preimage resistance ay may kinalaman sa konsepto ng mga one-way na function. Ang hash function ay ituturing na preimage-resistant kapag masyadong mababa ang posibilidad na may makahanap ng input na bumuo sa isang partikular na output.
Tandaan na ang katangiang ito ay iba sa nauna dahil susubukan ng attacker na hulaan kung ano ang input sa pamamagitan ng pagtingin sa isang partikular na output. Sa kabilang banda, ang collision ay nagaganap kapag may nakahanap ng dalawang magkaibang input na bumubuo ng parehong output, hindi mahalaga kung anong mga input ang ginamit.
Ang katangian ng preimage resistance ay mahalaga sa pagprotekta ng data dahil ang isang simpleng hash ng isang mensahe ay makakapagpatunay ng pagiging totoo nito, nang hindi nangangailangang ilantad ang impormasyon. Nakasanayan na ng maraming service provider at web application na mag-store at gumamit ng mga hash na nabuo mula sa mga password sa halip mga password sa plaintext.
Second-preimage resistance
Para mas pasimplehin, puwede nating sabihin na ang second-preimage resistance ay nasa pagitan ng dalawang nabanggit na katangian. Nangyayari ang second-preimage attack kapag may nakahanap ng partikular na input na bumubuo ng parehong output ng isa pang input na alam na nila.
Sa ibang salita, ang second-preimage attack ay may kinalaman sa paghahanap ng collision, pero imbes na maghanap ng dalawang random na input na bumubuo ng parehong hash, naghahanap sila ng input na bumubuo ng parehong hash na binuo ng ibang partikular na input.
Samakatuwid, anumang hash function na resistant sa mga collision ay resistant din sa mga second-preimage attack, dahil kaugnay lagi ng huli ang collision. Gayunpaman, puwede pa ring makapagsagawa ng preimage attack sa isang collision-resistant na function dahil kaugnay nito ang paghahanap ng single input mula sa isang single output.
Pagmimina
Maraming hakbang sa pagmimina ng Bitcoin na gumagamit ng mga hash function, gaya ng pagtingin ng mga balanse, pag-link ng mga input at output ng transaksyon, at pag-hash ng mga transaksyon sa loob ng isang block para bumuo ng Merkle Tree. Pero isa sa mga pangunahing dahilan kung bakit secure ang blockchain ng Bitcoin ay kailangang magsagawa ang mga minero ng napakaraming pagpapatakbo ng hashing para makahanap ng valid na solusyon para sa susunod na block.
Sa partikular, kailangang sumubok ang isang minero ng ilang iba't ibang input kapag gumagawa ng hash value para sa kanyang kandidatong block. Sa pangkalahatan, mava-validate lang niya ang kanyang block kung bubuo siya ng output hash na nagsisimula sa isang partikular na bilang ng mga zero. Ang bilang ng mga zero ang tumutukoy sa hirap ng pagmimina, at nag-iiba-iba ito ayon sa hash rate na nakalaan sa network.
Sa ganitong sitwasyon, kinakatawan ng hash rate kung gaano karaming computer power ang ipinupuhunan sa pagmimina ng Bitcoin. Kung tataas ang hash rate ng network, awtomatikong ia-adjust ng Bitcoin protocol ang hirap ng pagmimina para manatiling malapit sa 10 minuto ang average na tagal na kinakailangan para makapagmina ng block. Sa kabaliktaran naman, kung magpapasyang huminto sa pagmimina ang ilang minero, na magdudulot ng matinding pagbagsak ng hash rate, ia-adjust ang hirap ng pagmimina, kaya naman magiging mas madaling magmina (hanggang sa bumalik sa 10 minuto ang average na tagal ng block).
Tandaan na hindi kinakailangang maghanap ng mga minero ng mga collision dahil maraming hash ang puwede nilang buuin bilang isang valid na output (na nagsisimula sa isang partikular na bilang ng mga zero). Kaya may ilang posibleng solusyon para sa isang partikular na block, at kinakailangan lang ng mga minero na hanapin ang isa sa mga ito - ayon sa threshold na itinakda ng hirap ng pagmimina.
Dahil isang magastos na gawain ang pagmimina ng Bitcoin, walang rason ang mga minero na dayain ang system dahil hahantong ito sa malaking pinansyal na pagkalugi. Kapag mas maraming minero ang sumali sa blockchain, nagiging mas malaki at mas malakas ito.
Mga pangwakas na pananaw
Walang duda na ang mga hash function ay mahahalagang tool sa computer science, lalo na sa pangangasiwa ng malalaking bilang ng data. Kapag isinama sa cryptography, nagkakaroon ng maraming gamit ang mga hashing algorithm, na nagbibigay ng seguridad at pagpapatunay sa maraming iba’t ibang paraan. Dahil dito, mahalaga ang mga cryptographic hash function sa halos lahat ng cryptocurrency network, kaya malaking tulong sa sinumang interesado sa teknolohiya ng blockchain ang pag-unawa sa mga katangian at mekanismo ng paggana ng mga ito.