ஹாஷ் செயற்கூறு — ETH.BUILD
ETH.BUILD கல்வி கருவியைப் பயன்படுத்தி குறியாக்கவியல் ஹாஷ் செயற்கூறுகளின் செயல்விளக்கம். ஹாஷ் செயற்கூறுகள் எவ்வாறு செயல்படுகின்றன என்பதையும், எத்திரியத்தின் கணக்கு மற்றும் தரவு ஒருமைப்பாடு மாதிரிக்கு அவை ஏன் அடிப்படையானவை என்பதையும் அறிக.
Date published: 14 ஜனவரி, 2021
ஆஸ்டின் கிரிஃபித் (Austin Griffith) வழங்கிய இந்த வழிகாட்டி, ETH.BUILD காட்சி நிரலாக்கக் கருவியைப் பயன்படுத்தி குறியாக்கவியல் ஹாஷ் செயற்கூறுகள் எவ்வாறு செயல்படுகின்றன என்பதை விளக்குகிறது. இது தீர்மானிக்கக்கூடிய தன்மை, நிலையான நீள வெளியீடு, ஒரு திசை பண்புகள் மற்றும் மெர்க்கல் மரங்கள் ஆகியவற்றை உள்ளடக்கியது.
இந்த உரை ஆஸ்டின் கிரிஃபித் வெளியிட்ட அசல் வீடியோ உரையின் (opens in a new tab) அணுகக்கூடிய நகலாகும். இது வாசிப்புத் திறனுக்காகச் சிறிதளவு திருத்தப்பட்டுள்ளது.
ஹாஷ் செயற்கூறுகளின் அறிமுகம் (0:00)
இது ETH.BUILD எனப்படும் தொடரின் முதல் வீடியோவாகும். இந்தக் கருவியைப் பயன்படுத்த நீங்கள் eth.build தளத்திற்குச் செல்லலாம், ஆனால் இது எத்திரியத்தில் உருவாக்கும்போது விஷயங்கள் எவ்வாறு செயல்படுகின்றன என்பதைப் பற்றி விளையாடிப் பார்ப்பதற்கும் ஒரு யோசனையைப் பெறுவதற்கும் மட்டுமே.
நாம் பார்க்கப் போகும் முதல் தொகுதி ஒரு ஹாஷ் செயற்கூறு ஆகும். ஹாஷ் செயற்கூறு என்றால் என்ன? சரி, இது ஒரு கைரேகை போன்றது. உங்களிடம் ஒரு உள்ளீடு உள்ளது — அது எதுவாக வேண்டுமானாலும் இருக்கலாம் — ஆனால் இப்போதைக்கு "hello world" என்ற உரையுடன் செல்வோம். மறுபுறம் நீங்கள் ஒரு வெளியீட்டைக் கொண்டிருப்பீர்கள், அந்த வெளியீடு 64-எழுத்து ஹெக்ஸாடெசிமல் (hexadecimal) சரமாகும். "0x" முன்னொட்டு காரணமாக இது 66 எழுத்துகள் என்று கூறுகிறது, ஆனால் இது உண்மையில் 64-எழுத்து ஹெக்ஸ் (hex) சரமாகும்.
ஹாஷ்களை வண்ணங்களாகக் காட்சிப்படுத்துதல் (0:50)
நீங்கள் ஹெக்ஸைப் பார்த்தால், அது ஒரு வண்ணம் போல் தெரிகிறது, மேலும் நாம் இங்கு பார்ப்பதை வண்ணமாக மாற்றினால் அதை விவரிப்பது எளிதாக இருக்கும். எனவே நாம் என்ன செய்யப் போகிறோம் என்றால், சரம் எதுவாக இருந்தாலும் அதன் முதல் ஆறு எழுத்துகளை எடுத்து அதை ஒரு வண்ணமாகக் காண்பிக்கப் போகிறோம். நாம் அதைப் பார்த்தால், அது ஒரு அழகான ஊதா நிறமாக இருப்பதைக் காண்கிறோம்.
என் பெயரின் நிறம் என்னவென்று பார்ப்போம் — இதோ, ஒரு அழகான அடர் பச்சை. இப்போது மீண்டும் "hello world" என்பதற்குச் செல்வோம் — அது மீண்டும் அந்த ஊதா நிறம்.
தீர்மானிக்கக்கூடிய தன்மை மற்றும் நிலையான நீள வெளியீடு (1:38)
நாம் இப்போது கண்டுபிடித்தது என்னவென்றால், இது தீர்மானிக்கக்கூடியது (deterministic). அடிப்படையில், நாம் உள்ளீடாக எதைக் கொடுத்தாலும், மறுபுறம் எப்போதும் அதே வெளியீட்டைப் பெறுவோம்.
இரண்டாவது பண்பு என்னவென்றால், நீங்கள் எந்த அளவிலான எதையும் உள்ளிடலாம். நான் விசைப்பலகையில் தட்டச்சு செய்து வண்ணம் மாறுவதைக் காண முடியும், ஆனால் அந்தச் சரம் அதே 66-எழுத்து நீளத்திலேயே இருக்கும். நீங்கள் இங்கு எதை உள்ளிட்டாலும் — ஒரு கோப்பாக இருந்தாலும் சரி — என் பையன் லியோவின் (Leo) இந்தக் கோப்பை நான் உள்ளிட்டு, அதை ஒரு ஹாஷாக மாற்றி ஒரு அழகான ஆரஞ்சு நிறத்தைப் பெற முடியும். பின்னர் நான் ஒரு BIP சொல் பட்டியல் உரை ஆவணத்தை உள்ளிடலாம், அது இந்த அழகான வெளிர் நீல நிறமாக இருக்கும். நான் லியோவை மீண்டும் கொண்டு வந்தால், அது என்ன நிறமாக இருக்கும் என்று யூகிக்க முடிகிறதா? அது அந்த ஆரஞ்சு நிறமாகத்தான் இருக்கும் என்று நமக்குத் தெரியும். நீங்கள் உள்ளிடும் பொருளின் இந்தத் தீர்மானிக்கக்கூடிய கைரேகையை நீங்கள் பெறுவீர்கள்.
ஒரு திசை பண்பு (2:37)
அடுத்த மிக முக்கியமான பண்பு என்னவென்றால், இது ஒரு திசை (one-directional) கொண்டது. நான் மீண்டும் "hello world" என்று உள்ளிட்டால், இந்த "4717" ஹாஷைப் பெறுவோம். அந்த ஹாஷை எடுத்து ஒருவருக்கு அனுப்பி, "இதோ என் ரகசியத்தின் ஹாஷ் — என் ரகசியத்தை உங்களால் யூகிக்க முடிந்தால், நான் உங்களுக்கு நூறு ரூபாய் தருகிறேன்" என்று சொன்னால், அவர்களால் நெருங்கக் கூட முடியாது.
ஹாஷ் "4717" என்று தொடங்குகிறது என்று வைத்துக்கொள்வோம், அவர்கள் ஒரு பொருத்தத்தைக் கண்டுபிடிக்க முயற்சிக்கிறார்கள். நீங்கள் சிறிய எழுத்துகளை மாற்றி நெருங்க முடியாது — ஒன்று உங்களுக்கு அது கிடைக்கும் அல்லது கிடைக்காது. நீங்கள் அடிப்படையில் அதை ப்ரூட்-ஃபோர்ஸ் (brute-force) முறையில் யூகிக்க வேண்டும். அவர்கள் "hello world" என்று யூகித்தால், அவர்களுக்குப் பதில் கிடைக்கும், ஆனால் அவர்கள் அதை யூகிக்கவில்லை என்றால், அவர்களுக்கு அது ஒருபோதும் கிடைக்காது. நீங்கள் நெருங்குகிறீர்களா என்பதைச் சொல்ல எந்த வழியும் இல்லை.
குறியாக்கவியலில் ஒரு டெவலப்பராக இது சில நேரங்களில் வெறுப்பாக இருப்பதை நீங்கள் காண்பீர்கள், ஏனென்றால் அது ஒன்று வேலை செய்யும் அல்லது செய்யாது — நீங்கள் நெருங்குகிறீர்களா என்பது பற்றிய எந்தக் குறிப்புகளும் உங்களுக்குக் கிடைக்காது. ஆனால் அது ஒரு நல்ல விஷயம். அதுதான் ஒரு ஹாஷ் செயற்கூறில் நாம் விரும்பும் பண்பு.
ஹாஷ் செயற்கூறு பண்புகளின் சுருக்கம் (3:43)
எனவே நாம் பெற்றிருப்பது: எந்த அளவிலான எதையும் ஒரு ஹாஷ் செயற்கூறில் உள்ளிடலாம், மேலும் அது அந்தத் தரவு என்ன என்பதன் சரியான 64-எழுத்து ஹெக்ஸாடெசிமல் கைரேகையை வெளியிடும். இது தீர்மானிக்கக்கூடியது. இது ஒரு திசை கொண்டது — நீங்கள் வேறு வழியில் திரும்பிச் செல்ல முடியாது. ஒரு ஹாஷை உருவாக்குவது மிகவும் எளிதானது, ஆனால் ஹாஷின் ரகசியத்தை யூகிப்பது மிகவும் கடினம்.
மெர்க்கல் மரங்கள் மற்றும் ஹாஷ்களை இணைத்தல் (4:06)
இதைக் கொண்டு நாம் ஒரு மெர்க்கல் மரம் போன்ற சில அருமையான விஷயங்களைச் செய்யலாம். எங்களிடம் மூன்று உள்ளீடுகள் உள்ளன, அவற்றை நாம் ஒன்றாக இணைக்கலாம். அந்த ஹாஷ்கள் அனைத்தையும் நாம் இணைத்து, பின்னர் அந்த இணைப்பை ஹாஷ் செய்யலாம்.
இங்குள்ள இந்த நிறம் — அந்த ஊதா — இந்த ஹாஷ்கள் அனைத்தின் ஹாஷைக் குறிக்கிறது. நான் "hello world" என்பதை "hello world one" என்று மாற்றினால், அந்த ஊதா நிறம் மாறும். இந்த உள்ளீடுகளில் ஏதேனும் ஒரு சிறிய மாற்றம் ஏற்பட்டாலும் இறுதி ஹாஷ் மாறும். நீங்கள் அனைத்து வகையான தரவுகளையும் பல்வேறு வழிகளில் கொண்டு வரலாம் — ஹாஷ்களின் மரம், ஒரு மெர்க்கல் மரம் கூட இருக்கலாம் — அல்லது வரிசையாகப் பல தொகுதிகளைக் கொண்டிருக்கலாம், மேலும் இந்த இறுதி ஹாஷ் இவை அனைத்தையும் அடிப்படையாகக் கொண்டதாக இருக்கும். வழியில் எங்கும் ஏதேனும் சிறிய விஷயம் மாறினால், இறுதி ஹாஷ் மாறும்.
முக்கியக் குறிப்பு (5:53)
முக்கியக் குறிப்பு என்னவென்றால், ஒரு ஹாஷ் செயற்கூறு அடிப்படையில் ஒரு கைரேகை போன்றது. நான் எதையாவது தட்டச்சு செய்தால், அது நான் எதிர்பார்க்கும் வெளியீட்டைத் தீர்மானிக்கக்கூடிய வகையில் எனக்குக் கொடுக்கும். அதுதான் ஒரு ஹாஷ் செயற்கூறு — ETH.BUILD-க்கு வரவேற்கிறோம். சில அருமையான விஷயங்களை உருவாக்குவோம், மேலும் வழியில் நிறையக் கற்றுக்கொள்வோம்.