ہیش فنکشن — ETH.BUILD
ETH.BUILD تعلیمی ٹول کا استعمال کرتے ہوئے کرپٹوگرافک ہیش فنکشنز کا ایک مظاہرہ۔ جانیں کہ ہیش فنکشنز کیسے کام کرتے ہیں اور یہ ایتھیریم کے اکاؤنٹ اور ڈیٹا انٹیگریٹی ماڈل کے لیے کیوں بنیادی حیثیت رکھتے ہیں۔
Date published: ۱۴ جنوری، ۲۰۲۱
آسٹن گریفتھ کا ایک ٹیوٹوریل جو ETH.BUILD ویژول پروگرامنگ ٹول کا استعمال کرتے ہوئے یہ ظاہر کرتا ہے کہ کرپٹوگرافک ہیش فنکشنز کیسے کام کرتے ہیں، جس میں ڈیٹرمنزم (حتمیت)، فکسڈ لینتھ آؤٹ پٹ (مقررہ طوالت کا آؤٹ پٹ)، ون ڈائریکشنل (یک طرفہ) خصوصیات، اور مرکل ٹری کا احاطہ کیا گیا ہے۔
یہ ٹرانسکرپٹ آسٹن گریفتھ کی جانب سے شائع کردہ اصل ویڈیو ٹرانسکرپٹ (opens in a new tab) کی ایک قابل رسائی کاپی ہے۔ اسے پڑھنے میں آسانی کے لیے معمولی طور پر ایڈٹ کیا گیا ہے۔
ہیش فنکشنز کا تعارف (0:00)
یہ ETH.BUILD نامی سیریز کی پہلی ویڈیو ہے۔ آپ اس ٹولنگ کو استعمال کرنے کے لیے eth.build پر جا سکتے ہیں، لیکن یہ صرف تجربہ کرنے اور یہ اندازہ لگانے کے لیے ہے کہ ایتھیریم پر تعمیر کرتے وقت چیزیں کیسے کام کرتی ہیں۔
پہلا ماڈیول جسے ہم دیکھنے جا رہے ہیں وہ ایک ہیش فنکشن ہے۔ ہیش فنکشن آخر کیا بلا ہے؟ دراصل، یہ ایک فنگر پرنٹ کی طرح ہے۔ آپ کے پاس ایک ان پٹ ہوتا ہے — یہ کچھ بھی ہو سکتا ہے — لیکن فی الحال ہم صرف "hello world" ٹیکسٹ کے ساتھ آگے بڑھیں گے۔ دوسری طرف آپ کے پاس ایک آؤٹ پٹ ہوگا، اور وہ آؤٹ پٹ ایک 64-character ہیکسا ڈیسیمل سٹرنگ ہے۔ یہ "<span dir="ltr">0x</span>" پری فکس کی وجہ سے 66 characters کہتا ہے، لیکن یہ دراصل ایک 64-character ہیکس سٹرنگ ہے۔
ہیشز کو رنگوں کے طور پر تصور کرنا (0:50)
اگر آپ ہیکس کو دیکھیں، تو یہ کسی رنگ کی طرح لگتا ہے، اور اگر ہم اسے رنگ بنا دیں تو جو کچھ ہم یہاں دیکھ رہے ہیں اسے بیان کرنا زیادہ آسان ہو سکتا ہے۔ لہذا ہم یہ کرنے جا رہے ہیں کہ سٹرنگ جو بھی ہو اس کے پہلے چھ کریکٹرز لیں گے اور اسے ایک رنگ کے طور پر دکھائیں گے۔ اگر ہم اسے دیکھیں، تو ہمیں ایک خوبصورت جامنی رنگ نظر آتا ہے۔
آئیے دیکھتے ہیں کہ میرے نام کا رنگ کیا ہے — یہ لیجیے، ایک خوبصورت جنگلی سبز (forest green) رنگ۔ اب واپس "hello world" پر چلتے ہیں — یہ دوبارہ وہی جامنی رنگ ہے۔
ڈیٹرمنزم اور فکسڈ لینتھ آؤٹ پٹ (1:38)
ہم نے ابھی جو دریافت کیا وہ یہ ہے کہ یہ ڈیٹرمنسٹک (حتمی) ہے۔ بنیادی طور پر، ہم اپنے ان پٹ کے طور پر جو کچھ بھی ڈالتے ہیں، ہمیں دوسری طرف ہمیشہ وہی چیز ملے گی۔
دوسری خصوصیت یہ ہے کہ آپ کسی بھی صوابدیدی (arbitrary) سائز کی کوئی بھی چیز ڈال سکتے ہیں۔ میں کی بورڈ پر بے ترتیبی سے بٹن دبا سکتا ہوں اور رنگ کو تبدیل ہوتے دیکھ سکتا ہوں، لیکن وہ سٹرنگ اسی 66-character کی لمبائی پر برقرار رہتی ہے۔ اس سے کوئی فرق نہیں پڑتا کہ آپ یہاں کیا ڈالتے ہیں — یہاں تک کہ ایک فائل بھی — میں اپنے بیٹے لیو (Leo) کی یہ فائل ڈال سکتا ہوں، اور اسے ایک ہیش کے طور پر رکھ کر ایک خوبصورت نارنجی رنگ حاصل کر سکتا ہوں۔ پھر میں ایک BIP ورڈ لسٹ ٹیکسٹ ڈاکیومنٹ ڈال سکتا ہوں اور یہ ایک خوبصورت ہلکا نیلا رنگ ہے۔ اگر میں لیو کو واپس لاؤں، تو اندازہ لگائیں کہ یہ کون سا رنگ ہوگا؟ ہم جانتے ہیں کہ یہ وہی نارنجی رنگ ہوگا۔ آپ جو چیز ڈالتے ہیں اس کا آپ کو یہ ڈیٹرمنسٹک فنگر پرنٹ ملتا ہے۔
یک طرفہ خصوصیت (2:37)
اگلی سب سے اہم خصوصیت یہ ہے کہ یہ یک طرفہ (one-directional) ہے۔ اگر میں دوبارہ "hello world" ڈالوں، تو ہمیں یہ "<span dir="ltr">4717</span>" ہیش ملے گا۔ اگر ہم وہ ہیش لیں اور کسی کو بھیجیں اور کہیں کہ "یہ میرے راز کا ہیش ہے — اگر آپ میرے راز کا اندازہ لگا لیں، تو میں آپ کو سو ڈالر دوں گا،" تو وہ اس کے قریب بھی نہیں پہنچ پائیں گے۔
فرض کریں کہ ہیش "<span dir="ltr">4717</span>" سے شروع ہوتا ہے اور وہ میچ تلاش کرنے کے لیے ادھر ادھر ہاتھ پاؤں مارنا شروع کر دیتے ہیں۔ آپ صرف چھوٹے کریکٹرز کو تبدیل کر کے قریب نہیں پہنچ سکتے — یا تو آپ اسے پا لیتے ہیں یا نہیں پاتے۔ آپ کو بنیادی طور پر بروٹ فورس (brute-force) کے ذریعے اس کا اندازہ لگانا پڑتا ہے۔ اگر وہ اتفاق سے "hello world" کا اندازہ لگا لیں، تو انہیں جواب مل جائے گا، لیکن اگر وہ اندازہ نہیں لگاتے، تو وہ اسے کبھی حاصل نہیں کر پائیں گے۔ یہ بتانے کا کوئی طریقہ نہیں ہے کہ آیا آپ قریب پہنچ رہے ہیں۔
آپ علمِ تشفیر کے ساتھ یہ پائیں گے کہ ایک ڈویلپر کے طور پر یہ بعض اوقات مایوس کن ہوتا ہے کیونکہ یہ یا تو کام کرتا ہے یا نہیں کرتا — آپ کو اس بارے میں کوئی اشارہ نہیں ملتا کہ آیا آپ قریب پہنچ رہے ہیں۔ لیکن یہ ایک اچھی بات ہے۔ یہی وہ خصوصیت ہے جو ہم ایک ہیش فنکشن سے چاہتے ہیں۔
ہیش فنکشن کی خصوصیات کا خلاصہ (3:43)
تو ہمارے پاس یہ ہے: کسی بھی سائز کی کوئی بھی چیز ہیش فنکشن میں ڈالی جا سکتی ہے، اور یہ اس ڈیٹا کا بالکل درست 64-character ہیکسا ڈیسیمل فنگر پرنٹ نکالے گا۔ یہ ڈیٹرمنسٹک ہے۔ یہ یک طرفہ ہے — آپ واپس دوسرے راستے پر نہیں جا سکتے۔ ہیش بنانا واقعی آسان ہے، لیکن ہیش کے راز کا اندازہ لگانا واقعی مشکل ہے۔
مرکل ٹریز اور ہیشز کو ملانا (4:06)
ہم اس کے ساتھ کچھ واقعی زبردست چیزیں کر سکتے ہیں، جیسے کہ ایک مرکل ٹری۔ ہمارے پاس اپنے تین ان پٹس ہیں، اور ہم انہیں ایک ساتھ جوڑ سکتے ہیں۔ ہم ان تمام ہیشز کو ملا سکتے ہیں اور پھر اس مجموعے کو ہیش کر سکتے ہیں۔
یہ رنگ جو یہاں ہے — وہ جامنی — ان تمام ہیشز کے ہیش کی نمائندگی کرتا ہے۔ اگر میں "hello world" کو "hello world one" میں تبدیل کر دوں، تو وہ جامنی رنگ بدل جائے گا۔ ان میں سے کسی بھی ان پٹ میں کوئی بھی چھوٹی سی تبدیلی حتمی ہیش کے تبدیل ہونے کا سبب بنے گی۔ آپ ہر طرح کا ڈیٹا ہر طرح کے مختلف طریقوں سے لا سکتے ہیں — یہاں تک کہ ہیشز کا ایک ٹری، ایک مرکل ٹری بھی بنا سکتے ہیں — یا ایک قطار میں بہت سے بلاکس رکھ سکتے ہیں، اور یہ حتمی ہیش ان تمام چیزوں پر مبنی ہوگا۔ اگر راستے میں کہیں بھی کوئی چھوٹی سی چیز تبدیل ہوتی ہے، تو حتمی ہیش بدل جائے گا۔
کلیدی نتیجہ (5:53)
کلیدی نتیجہ یہ ہے کہ ایک ہیش فنکشن بنیادی طور پر ایک فنگر پرنٹ کی طرح ہے۔ اگر میں کچھ ٹائپ کرتا ہوں، تو یہ مجھے ڈیٹرمنسٹک طور پر وہ آؤٹ پٹ دے گا جس کی میں توقع کرتا ہوں۔ یہ ایک ہیش فنکشن ہے — ETH.BUILD میں خوش آمدید۔ آئیے کچھ زبردست چیزیں بنائیں اور اس سفر میں بہت کچھ سیکھیں۔