الگوریتم درهم سازی بیت کوین

الگوریتم هش (Hash) بیت کوین چیست؟ توضیح کامل تابع درهم سازی بیت کوین

هر کسی که به نوعی سر و کارش با بیت کوین بوده باشد، با یکی از اولین اصطلاحاتی که آشنا خواهد شد، تابع هشینگ رمزنگاری یا الگوریتم درهم سازی (Hashing) بیت کوین خواهد بود. در این مطلب قصد داریم توضیح دهیم که تابع رمزنگاری بیت کوین چیست و چه طور به بیت کوین ربط پیدا می کند.

تابع هش (Hash Function) چیست؟

به طور کلی تابع هش یا تابع درهم سازی یک تابع ریاضی است که یک ورودی (Input) از شما دریافت می کند و بعد از انجام برخی از عملیات بر روی آن یک خروجی (Output) با اندازه ثابت (مثلاً همیشه 32 کاراکتر) به شما ارائه می کند.

رشته متنی (String) چیست؟

به ورودی ها که معمولاً یک متن شامل عدد و حروف و کلمات هستند، یک رشته متنی (String) گفته می شود. رشته متنی معمولاً با چشم قابل خواندن و فهمیدن است. برای مثال عبارت های «سال 1399 را به همراهان سایت بخت تبریک می گوییم.» یا «1365» یا «سلام» یا «123456@1» یک رشته متنی است. رشته های متنی که دارای یک پیغام یا مفهوم در خود هستند، معمولاً به عنوان ورودی الگوریتم های رمزنگاری قرار خواهند داشت.

چکیده (Digest) چیست؟

مستقل از اینکه ورودی شما یک حرف، کلمه، یک جمله یا یک رمان باشد، تابع درهم سازی بعد از انجام یک سری عملیات بر روی، یک خروجی به شما ارائه می کند که همواره طول ثابتی دارد (مثلا 32 کاراکتر). به همین دلیل به این خروجی یک چکیده (Digest) گفته می شود. حال بسته به نوع الگوریتم درهم سازی، اندازه این خروجی ممکن است متفاوت باشد، اما همیشه یک الگوریتم، طول چکیده ثابتی خواهد داشت.

کاربرد تابع هش یا درهم سازی چیست؟

به طور کلی توابع درهم‌سازی برای سرعت بخشیدن در جستجوی جدول های،فشرده‌سازی داده‌ها، درج یا حذف برای مجموعه پویایی که تعداد عناصر آن در طول زمان تغییر می‌کند، استفاده می‌شوند.

فرض کنید شما عضو یک سایت می شوید و برای خودتان یک رمزعبور (Password) انتخاب می کنید. حال فرض کنید برنامه نویسان آن سایت، به پایگاه های داده آن سایت دسترسی دارند، اگه رمزعبور شما به صورت یک رشته متنی در سایت ذخیره شود، برنامه نویسان می توانند با دیدن آن رشته متنی، به راحتی رمزعبور شما را یاد بگیرند و چه بسا در همان سایت یا سایت های دیگر از رمزعبور شما سوء استفاده کنند.

برای همین، یکی از رایج ترین کاربردهای توابع درهم سازی این است که رشته های متنی مهم یا محرمانه، برای اینکه توسط انسان یا ماشین قابل فهم یا تغییر و دست کاری نباشند، با انجام برخی عملیات تبدیل به چکیده هایی شوند که ویژگی هایی دارد.

مثال تابع درهم سازی ساده در Python

اگر دوست دارید، خودتان امتحان کنید که تابع درهم سازی چیست این بخش را بخوانید، در غیر اینصورت بدون اینکه چیزی را از دست بدهید، با گذشتن از این بخش، به بخش بعدی این مطلب بروید.

شما می توانید با استفاده از زبان برنامه نویسی Python خودتان تست کنید که چطور یک تابع درهم سازی وقتی یک ورودی از شما را می گیرد، یک خروجی تولید می کند. زبان برنامه نویسی Python به این دلیل به عنوان مثال آورده شده است که به صورت پیش فرض روی سیستم عامل های Mac و Linux نصب است. در صورتیکه ویندوز دارید و امکان نصب این زبان را ندارید، می توانید این دستورات را به صورت آنلاین در این سایت امتحان کنید.

برای تست کردن، ابتدا Terminal را باز کنید، تایپ کنید Python و کلید Enter را بزنید. با این کار شما وارد محیطی می شوید که REPL نام دارد و شما دستورات زبان برنامه نویسی Python را در آن به اجرا درمی آورید. حال عبارت زیر را بنویسید و بعد از هر خطی که می نویسد کلید Enter را بزنید و در جاهایی که با [TAB] مشخص شده، کلید TAB را بزنید.

import hashlib
def hash(mystring):
[TAB] hash_object = hashlib.md5(mystring.encode())
[TAB] print(hash_object.hexdigest())
[ENTER]

خب با نوشتن عبارت بالا، شما در واقع یک الگوریتم درهم سازی ساخته اید که یک رشته متنی به عنوان ورودی دریافت می کند و با استفاده از الگوریتم رمزنگاری md5 یک خروجی به شما بر میگرداند. البته می توانستیم از یک الگوریتم رمزنگاری دیگر نیز استفاده کنیم، اما اینجا برای مثال از md5 استفاده کرده ایم. حال بیایید دو رشته متنی را به صورت امتحانی با تابعی که داریم، درهم سازی کنیم:

hash(“bakht.org website”)

خروجی این دستور چکیده زیر خواهد بود:

7c5131a7a99b0922d8b14b689a4512fd

و اگر دستور زیر را بزنیم که رشته متنی کمی در آن تغییر کرده است:

hash(“bakht.org website”)

خروجی دستور چکیده زیر خواهد بود:

211fa66ce62d7eb533b13308705a0d4f

به این ترتیب دیدید که با تغییر جزئی در رشته متنی ورودی، یک خروجی کاملاً متفاوت از خروجی اول ایجاد شد اما اندازه هر دو خروجی ثابت و یکسان و هر دو خروجی برای انسان بی مفهوم هستند.

تابع هش بیت کوین

در پروتکل بیت کوین، توابع درهم سازی بخشی از الگوریتم درهم سازی بلوک ها هستند که برای نوشتن یک تراکنش در زنجیره ای از بلوک ها در فرآیند استخراج بیت کوین مورد استفاده قرار می گیرند.

حال که با برخی از اصطلاحات آشنا شده اید، در فرآیند استخراج بیت کوین، ورودی های الگوریتم درهم سازی همه تراکنش های اخیری هستند که هنوز تایید نشده اند (به اضافه برخی اطلاعات دیگر مربوط به بلوک قبلی و زمان).

الگوریتم SHA-256 بیت کوین

در بیت کوین برای رمزنگاری از الگوریتمی به نام SHA-2 یا اطلاحاً SHA-256 (چون اندازه چکیده 256 بیت است) استفاده می شود. SHA-2 مجموعه‌ای از توابع درهم سازی محسوب می‌شود (SHA-224 , SHA-256 , SHA-384 , SHA-512) که توسط آژانس امنیت ملی ایالات متحده آمریکا طراحی و توسط مؤسسه ملی فناوری و استانداردها در سال ۲۰۰۱ به عنوان استاندارد پردازش اطلاعات انتشار یافت. SHA برگرفته از الگوریتم درهم‌سازی ایمن است که به انگلیسی اگر بنویسیم و ابتدای آن‌ها را در نظر بگیریم این عبارت مخفف را به ما می‌دهد.

توابع درهم سازی در بیت کوین

در بخش قبل دیدیم که چطور رشته های متنی یا ورودی های مختلف با کوچکترین تغییر ممکن است خروجی های کاملاً متفاوتی داشته باشند. برای مثال وقتی رشته متنی «bakht.org website» را به عنوان ورودی با الگوریتم md5 رمزنگاری کردیم، خروجی شد «7c5131a7a99b0922d8b14b689a4512fd» و وقتی ورودی را «bakht.org website» در نظر گرفتیم خروجی شد «211fa66ce62d7eb533b13308705a0d4f».

خب همانطور که مشخص است، قرار نیست ورودی ها و خروجی ها شباهتی به هم داشته باشند که بتوان از روی ورودی ها خروجی ها را حدس زد یا فهمید. در واقع این بخشی از انتظاری است که از یک الگوریتم درهم سازی به درد بخور داریم و در روش گواه اثبات کار (Proof of Work) یا PoW مورد نیاز است.

استخراج کنندگان بیت کوین باید برای حل کردن مساله هر بلوک، هر بار، ورودی ها را با مقادیری دلخواه خود که به آن نانس (Nonce) گفته می شود ترکیب کنند تا خروجی با تعداد مشخصی از صفر (الان 18 صفر) آغاز شود. رسیدن به این الگو، بسیار زمان بر و پیچیده است. به طوری که در حال حاضر با استفاده از تمام ظرفیت کامپیوترهای موجود در فرآیند استخراج بیت کوین، 10 دقیقه زمان می برد تا یک بلوک حل (Solve) یا کامل شود.

به همین دلیل فرآیند استخراج بیت کوین فرآیند گران قیمتی است. در ازای حل مساله یادشده استخراج کنندگان پاداش دریافت می کنند که این پاداش در واقع بیت کوین است. حال فرض کنید از هر 4 سال یکبار این پاداش در پی فرآیند هاوینگ بیت کوین نصف شود! به این ترتیب هر چی پیش می رویم، فرآیند استخراج سخت تر و قیمت بیت کوین های موجود بیشتر خواهد شد!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *