در این مطلب قرار است با هم چند نکته در مورد نحوه کار رمزارزها با محوریت بیتکوین و کمی عمیقتر، بلاک چین و الگوریتم های هش بیاموزیم.
(این مطلب با همکاری آقای سینا فلاح برای پروژه درس ریاضی۲ استاد حسنزاده نوشته میشود.)
همانطور که میدانید یکی از مهمترین موضوعات داغ این روز های دنیای تکنولوژی، بلاکچین و ارزهای مجازی است. در این میان مهمترین سوالاتی که برای افراد عادی پیش میآید این است که قیمت یک رمزارز چگونه تعیین میشود و در واقع چگونه و بر چه اساسی تغییر میکند و یا اصلا چه چیزی به این ارزها "ارزش" میدهد و در مرحله دوم اینکه آیا این رمز ارز ها امن هستند؟ آیا ارزش سرمایه گذاری دارند؟
در این مطلب علاوه بر پاسخ به سوالاتی از قبیل سوال بالا میخواهیم نگاهی عمیقتر به نحوه کارکرد این رمزارزها داشته باشیم.
خلاصهای درباره رمزارزها
همانطور که میدانید از دیرباز (پس از مبادله کالا با کالا) چیزی به نام پول وجود داشته که یا خودش ارزش داشته ( مانند سکه) و یا نماد چیزی با ارزش بوده مثلا اسکناس نماد یا واسط مقدار معینی طلا در خزانهی صادر کننده آن اسکناس است. سوالی که پیش میآید این است که آیا اسکناس به خودی خود ارزش دارد؟ جواب این است که خیر، ارزش آن به طلا ( چیز با ارزش) پشت آن در خزانه بستگی دارد.
در مورد شرایط و محدودیتهای پولهای رایج خودتان بهتر میدانید ولی مهم ترین آنها وابستگی به یک مرجع خاص مثلا بانک مرکزی شرکت صادر کننده است.
و اما پولهای نامتمرکز (رمزارزها) برای حل چه مشکلی آمده اند؟ با استفاده از رمزارزها کنترل پول دست یک نهاد واحد نیست (عملاً کنترلی بر شبکه وجود ندارد) و طبق پروتکلهایی که از ابتدا تعیین شدهاند به فعالیت ادامه میدهد، به دلیل استفاده از سیستمهای رمزنگاری پیشرفته و ریاضیاتی بسیار امن است(البته منوط به رفتار صحیح کاربر) و هیچ گونه قابلیت ردگیری تراکنشها وجود ندارد.
اما ارزش پولهای رمزنگاری شده از کجاست؟ همانطور که گفتیم خزانه و سیستم مرکزی برای رمزارزها وجود ندارد و موجودیت خود را مدیون مقبولیت و محبوبیت بین کاربران هستند، ارزششان هم دقیقاً از همینجا ناشی میشود، از مقبولیت بین کاربران، وقتی چیزی خواهان داشته باشد، ارزش پیدا میکند. البته باید تولید و مقدارش هم محدود باشد که همینگونه است. (در ادامه توضیح میدهیم تولید بیتکوین چگونه است.)
آیا ارزش بیتکوین تضمین شده است؟ خیر، هیچ تضمینی وجود ندارد که ارزش بیتکوین ناگهان سقوط نکند و حتی اخیراً ارزشش به نصف رسیده و یکبار در تاریخ نیز به شدت کاهش یافت و از چند هزار دلار به چند دلار رسید (البته موقتا) پس این سرمایهگذاری پر ریسکی است ولی نمیتوان منکر این شد که افراد زیادی نیز در این حیطه سرمایهگذاره کردهاند و سود بردهاند.
نکته دیگر چگونگی خرید و فروش رمزارز است، شیوه کار به این صورت است که گیرنده و فرستنده پول باید کیفپول الکترونیک داشته باشند و فرستنده میتواند با استفاده از برنامههای موجود(که در موبایل کامپیوتر و .. موجود هستند) به گیرنده به هر میزان پول(تا سقف موجودی خودش) انتقال دهد.
۲ راه اصلی نیز برای به دست آوردن بیتکوین وجود دارد که سادهترین آن خرید از صرافی است، این صرافیها ارزهای رایج را گرفته و بنا به قیمت روز بیتکوین به شما بیتکوین میدهند(یعنی به کیف پول شما واریز میکنند) که این راه برای عموم مردم مناسب و منطقی است.
اما راه دوم که پیچیدهتر و بیانگر مفاهیم پشت بیتکوین است، ماینکردن بیتکوین است. توضیح دقیق اتفاقات پشت سر ماینینگ را در ادامه میخوانیم ولی به طور خلاصه استفاده از قدرت پردازش کامپیوتر خود برای امن کردن شبکه بیتکوین را ماینینگ میگویند که در این صورت شبکه به عنوان جایزه مقداری بیتکوین میدهد. امروزه برخی در ماین کردن بیتکوین سرمایهگذاری میکنند و با خرید سیستمهای قدرتمند، بیتکوین استخراج (ماین) میکنند برای مثال دستگاههایی ساحتهشده که با اتصال به اینترنت روزانه حدودا به اندازه ۸دلار بیتکوین استخراج میکنند، افراد این دستگاهها را تهیه کرده و با تامین برق و اینترنتشان اقدام به ماینکردن میکنند.
تا اینجا با هر آنچه لازم است کاربر عادی درباره بیتکوین بداند را دیدهایم اما در ادامه به منطق و نحوه کار پشت رمزارزها بامحوریت بیتکوین میپردازیم.
در ابتدا لازم است مفهوم هش را با هم ببینیم:
الگوریتم های درهمسازی(هش)
به طور خلاصه الگوریتم هش، یک ورودی میگیرد و یک خروجی ثابت و منحصر به فرد(به ازای هر ورودی) تولید میکند که به ازای هر تغییر کوچک در ورودی، مقدار خروجی کاملا عوض میشود.
برای مثال هش عبارت "salam" برابر مقدار روبهرو خواهد بود:
DE6838252F95D3B9E803B28DF33B4BAA
ولی اگر در ورودی یک تغییر کوچک بدهیم و تبدیل به "sAlam" کنیم هش جدید برابر
F9CDFE53EB8A86BA24C4814EC6752C4A
خواهد بود که کاملا با قبلی تفاوت دارد.(نکته: از الکوریتم MD5 استفاده کردیم، الگوریتم های دیگر را خواهیم دید.)
بیایید برای فهم سادهتر یک نیاز معمول در دنیا را با هم بررسی کنیم و با استفاده از توابع ریاضی برای آن راه حل دهیم، فرض کنید میخواهیم تکلیف یک دانشجو را در ایام عید تحویل بگیریم. این دانشجو فرضا تا ۵ فروردین فرصت دارد که تکلیف را انجام دهد ولی دسترسی به اینترنت برای ارسال تکلیف ندارد. استاد میخواهد مطمئن شود که دانشجو تمرین را قبل از مهلت انجام دهد ولی هرموقع که دانشجو میتوانست تحویل دهد پس از این ایده استفاده میکند: استاد از دانشجو میخواهد که در روز ددلاین از فایل تکلیف خود هش بگیرد (یعنی توسط یک الگوریتم هش، از فایل خود یک عدد بسازد) و آن عدد را پیامک کند. در هنگام تحویل (مثلا ۱۰ روز بعد) استاد از فایل تحویلی مجددا هش میگیرد و اگر هش همان شد، یعنی دانشجو از ۵ فروردین فایل خود را تغییر نداده است(چون اگر تغییر داده بود هش به کلی عوض میشد) و تحویل موفقیت آمیز است.
مشابه مثالی که دیدیم، کاربرد اصلی هش در این است که مطمین شویم یک داده(مثلا فایل PDF تمرین) هیچ تغییری نکرده است، مثلا در شبکه های کامپیوتری همراه با ارسال داده، هش دادهها هم ارسال میشود و گیرنده نیز در مقصد از داده دریافتی هش میگیرد و با برابری هشها مطمین میشود که داده در طول مسیر هیچ تغییری نکرده است.
نکتهای که در این میان وجود دارد این است که آیا توابع هش یک به یک هستند یا خیر؟ جواب این سوال به سادگی امکان پذیر نیست، در نگاه اول به نظر میرسد که گفتیم برای هر ورودی، جواب منحصر به فرد است پس باید تابع یکبه یک باشد اما در این میان یک نکته وجود دارد، دامنه و برد! دامنه یک الگوریتم هش هرچیزی ممکن است باشد، فایلی با حجم ۱۰۰ها گیگابایت یا یک عدد یا هرچیز قابل تبدیل به صفر و یک، اما برد آن محدود است(بسته به الگوریتم) مثلا برای md5، تعداد ۳۲ رقم در مبنای ۱۶ هست که با محاسبه ساده درمیبابیم که حدود 3.4 در ده به توان ۳۸ حالت وجود دارد ولی تعداد حالتهای ورودی بی نهایت است، پس قطعا همپوشانی (collision) خواهیم داشت یعنی هش ۲ داده متفاوت، دقیقا یکی خواهد شد و این برای ما خوب نیست به این دلیل که مثلا یک هکر میتواند داده ما را با داده دیگری با همان هش عوض کند و ما اصلا متوجه نشویم. از این جا این ایده به وجود میاید که بیاییم الگوریتم های هش دیگری توسعه دهیم با تعداد حالتهای خروجی بیشتر و در نتیجه احتمال پیدا شدن همپوشانی کمتر.
الگوریتمهای هش زیر امروزه استفاده میشوند:
MD5
SHA1
SHA2
SHA256SHA3
که برای الگوریتم MD5 همپوشانی کشف شده و دیگر الگوریتم امنی به حساب نمیآید و مختصصات امنیت تاکید به استفاده از هشهای امنتر دارند.
نکته: تمام هشهایی که استفاده و معرفی شدند هشهای رمزنگاری (به اصطلاح cryptographic ) بودند، گونه دیگری از هشها هستند که با تغییر کوچک در ورودی، خروجی نیز اندکی تغییر میکند ولی این هشها در کاربردهای امنیتی استفاده نمیشوند.
در آخر برای تقریب به ذهن، یک الگوریتم فرضی و ساده برای هش کردن میگوییم: فرض کنید مقدار هش ما، تعداد بایت های ورودی باشد، اشکال اصلی این هش متغیر بودن رنج خروجیاست و محدود نیست پس با یک بازنگری، الگوریتم را به: باقیمانده تعداد بایتهای ورودی بر ۱۰۰ تبدیل میکنیم. در این حالت مطمئنیم هش ما بین ۰ تا ۱۰۰ است ولی ایرادی که وجود دارد همپوشانی بسیار زیادی وجود دارد مثلا هش هر دو ورودی ۲ بایتی، ۲ میشود پس طراحی الگوریتم هش به سادگی نیست و از الگوریتمهای پیچیده ریاضی و عملگرهای بولی استفاده میشود.
نکته: بیتکوین از یکیاز امنترین هشها با نام SHA256 استفاده میکند.
برای مطالعه بیشتر در مورد الگوریتمهای هش به لینک زیر مراجعه کنید:
https://coindoo.com/how-does-a-hashing-algorithm-work/
بلاکچین چیست
بیتکوین چگونه از بلاکچین استفاده میکند؟
حال این مسئله چجوری بیت کوین را امن می کند؟
با این رمز نگاری transaction(نقل و انتقال) ها امضا می شوند. رمز نگاری منحنی بیضوی شامل چند رویه جدا برای امضا و اطمینان از صحت اطلاعات هست که هر رویه دارای الگوریتم جدا می باشد، الگوریتم امضا داده ها را با استفاده از کلید خصوصی امضا و الگوریتم صحت اطلاعات با استفاده از کلید عمومی از صحت اطلاعات اطمینان حاصل میکند.
همانطور که قبلا گفته شد رمز نگاری منحنی بیضوی از فرمولی استفاده می کند که کلی حالت در خود جای میگیرد به عنوان مثال برای a = 0 و b = 7 (نسخه ای که بیت کوین از آن استفاده می کند) شبیه این می شود:
برای مثال ما یک نقطه دلخواه p در نظر میگیریم حالا p را با خودش جمع می کنیم، طبق گفته های بالا نقطه سوم به دست می آید که با نقطه دوم تلاقی دارد و آن را به آن سوی محور x انعکاس می دهیم. پس الان ما 2*P را داریم.
x = 55066263022277343669578718895168534326250603453777594175500187360389116729240
y = 32670510020758816978083085130507043184471273380659243275938904335757337482424
پس دریافتیم که ریاضیات در رمزارزها واقعا کاربرد دارد و همانطور که گفته شد باعث امنیت برای این سیستم می شود که بدون این ریاضیات امکانپذیر نبود.
موجودی چگونه محاسبه میشود؟
میدانیم که تنها اطلاعاتی که در دیتابیس نگهداری میشود اطلاعات گردش مالی هستند، پس اگر من بخواهم موجودی حسابم را بدانم از کجا باید بفهمم؟
اطلاعات چگونه ذخیره میشوند؟
ماینرها چه کار میکنند؟
پول از کجا میآید؟
منابع:
ویکیپدیا
https://en.wikipedia.org/wiki/Hash_function
https://en.wikipedia.org/wiki/Blockchain
https://en.wikipedia.org/wiki/Bitcoin
سایت زومیت
https://www.zoomit.ir/tag/bitcoin/
ویدیوهای یوتیوب جادی در مورد هش و بیتکوین
https://www.youtube.com/channel/UCgKePkWtPuF36bJy0n2cEMQ
سایت رسمی بیتکوین:
https://bitcoin.org/en/how-it-works
دیگر منابع:
https://www.coindesk.com/bitcoin-explained-five-year-old
https://coinsutra.com/bitcoin-double-spending/