وقتی صحبت از بلاکچین و اصطلاحات آن میشود، ما با کلماتی سر و کار داریم که ارتباط مستقیمی با مفاهیم بلاکچین و شبکههای غیرمتمرکز دارند. نانس یکی از این اصطلاحات مهم و فنی در زنجیره بلاکچین است.
عناوین مطلب:
نانس در زنجیره بلاکچین یک عدد 4 بایتی است که به هش بلاک اضافه میشود. وقتی این عدد دوباره هش شود، با قوانین تعیین شده برای سطح سختی مواجه خواهد شد.
برای درک این اصطلاح باید بدانید که از Nonce برای تشخیص ارتباطها، بلاکها و هشهای قدیمی استفاده میشود. با استفاده از این عدد ما میدانیم که یک پیام قدیمی است و نمیتوان آن را دستکاری کرد. در بلاکچینها گاهی از عدد Nonce با عنوان Salt نیز یاد میشود.
اما این عدد به صورت ترتیبی مثلا 1، 2، 3، 4 و … افزایش پیدا نمیکند بلکه کاملا تصادفی تولید میشود اما پس از تولید و استفاده، دیگر آن عدد قابل استفاده نخواهد بود.
بیشتر بخوانید: نقش اعداد تصادفی (Randomness) در بلاکچین چیست؟
برای این که نقش نانس را بهتر درک کنید باید با سیستمهای اعتبار سنج یا الگوریتمهای امضای دیجیتال آشنا باشید. در این روشها از Nonce به دفعات استفاده میشود اما نمیتوان یک امضای دیجیتال حتی با ورودی قبلی را دوباره تولید کرد چرا که عدد Nonce تغییر پیدا کرده است.
کاربرد نانس در بلاکچین
در دنیای بلاکچین، عدد Nonce بخشی از دادههایی است که توسط کلید عمومی ماینرها هش (Hash) میشود. البته در فرایند استخراج در کنار عدد نانس که فقط یک بار قابل استفاده است، از برچسب زمانی (TimeStamp) نیز برای تولید علامت یکتای بلاک استفاده میشود.
به طور کلی، هدف Nonce ایجاد سختی برای مهاجمانی که با هدف دستکاری بلاک یا تراکنشهای داخل آن به بلاکچین حمله میکنند کاربرد دارد. یک مهاجم پس از تغییر یک تراکنش یا بلاک باید آن را دوباره تبدیل به هش کند، این هش جدید باید با هشهای دیگر سازگار باشد تا یکپارچگی بلاکچین حفظ شود.
اعداد Nonce محرمانه نیستند در واقع آنها عموما توسط اکسپلوررهای بلاکچینها قابل مشاهده هستند. حتی با بررسی هش یک تراکنش یا بلاک میتوانید آن را مشاهده کنید. اما نکته مهم در مورد استفاده از نانس در بلاکچین این است که آنها نباید قابل پیش بینی باشند.
قابل پیش بینی بودن تولید Nonce باعث میشود یک مهاجم بتواند بلاکچین را دستکاری کند.
کاربرد نانس در بیتکوین
متغیر Nonce در بلاکچین بیتکوین یک فیلد 32 بیتی (4 بایتی) است که ماینرها با هر بار کار بر روی بلاک جدید آن را تغییر (به صورت غیرقابل پیشبینی) میدهند.
از آنجایی که عدد نانس تصادفی است، ماینرها از آن برای اطمینان از یکتا بودن یک بلاک در زنجیره بلاکچین استفاده میکنند. این موضوع در تراکنشها نیز صدق میکند.
با تغییر مقدار Nonce، ماینر میتواند هش یک بلاک را تغییر دهد. این موضوع به آنها اجازه میدهد تا حالتهای مختلف حل مشکل ریاضی را بررسی کرده و فرآیند پیدا کردن هش بلاک معتبر را انجام دهند.
در فرایند استخراج بیتکوین، در الگوریتمهای هش، ورودیهای آن مانند Merkle Root قابل پیش بینی هستند و تنها قسمت غیرقابل پیشبینی ورودی الگوریتم هش، مقدار Nonce است.
حدس زدن مقدار نانس مانند برنده شدن در لاتاری است چرا که با حدس درست، ماینر پاداش بلاک جدید بیتکوین را دریافت میکند. در این شبکه هر 10 دقیقه یک بلاک جدید ساخته میشود، از این رو هر 10 دقیقه یک Nonce جدید تولید میشود.
از آنجایی که مقدار Nonce کاملا تصادفی است، احتمال این که دو ماینر بتوانند همزمان دو هش یکسان را تولید کنند بسیار کم است. این موضوع بدان معناست که اگر یک ماینر بتواند مشکل ریاضی یک بلاک را حل کند، دیگران به سرعت آن را تایید و به زنجیره بلاکها اضافه خواهند کرد و به سراغ بعدی میروند.
با استفاده از نانس در شبکههای بلاکچینی، حملههای 51% تقریبا غیرممکن است. در یک حمله 51% گروه بزرگی از ماینرها سعی میکنند کنترل بیش از 50% کل قدرت استخراج شبکه را در اختیار خود در بیاورند که از نظر تئوری امکان دستکاری بلاکچین طبق میل آنها امکان پذیر میشود.
این موضوع به هوش ساتوشی ناکاماتو باز میگردد، او الگوریتم استخراج بیتکوین را با استفاده از SHA-256 برنامه نویسی کرده است. این الگوریتم هش، سختی استخراج را هر 4 سال یکبار افزایش میدهد که به دنبال آن پیش بینی Nonce سختتر میشود و قدرت پردازش بیشتری برای حدس زدن آن لازم است.
در این چرخه، هر چه قدرت پردازش مورد نیاز برای حدس زدن هش جدید بیشتر شود، امنیت شبکه افزایش پیدا میکند و در طرف دیگر حمله به آن نیز سختتر خواهد بود. بیتکوین با تکیه به این روش (اعداد تصادفی غیر قابل تکرار و پیش بینی) توانسته مشکل Double Spending را حل کند.
بیشتر بخوانید: دابل اسپندینگ (Double Spending) یا دوبار خرج کردن! چیست؟
دوبار خرج کردن همیشه یکی از مشکلات پولهای دیجیتال بوده است. اما با ظهور بلاکچین بیتکوین، ارز این شبکه توانست به عنوان اولین کارنسی موفق در حل این مشکل خود را نشان دهد.
جالب است بدانید مشکل دوبار خرج کردن حتی قبل از ظهور بیتکوین، فضای اینترنت و سایبری را مصموم کرده بود.
نمونهای از Nonce بیتکوین
برای درک بهتر کاربرد Nonce در بیتکوین و سایر کریپتو کارنسیهای رایج به این مثال توجه کنید. متغیر نانس در بلاکچین بیتکوین از یک رشته (string) تشکیل شده است که با تعدادی عدد 0 آغاز میشود. وقتی این رشته تبدیل به Hash شود، یک عدد کوتاهتر از آن تولید میشود.
این عدد میتواند هر چیزی از 82 تا 91240 باشد. البته عدد دقیق آن بسته به نیازمندیهای شبکه در آن زمان متفاوت است و تعداد نودها در کنار سختی شبکه نیز به صورت مستقیم در تولید این عدد تاثیر گذار هستند.
در تصویری که در ادامه مشاهده میکنید، نودهای بیتکوین (کامپیوترهای متصل به شبکه) که در مکانیزم اجتماع POW آن مشارکت دارند، سعی میکنند عدد درست Nonce را برای سازگاری با هش مورد نظر پیدا کنند.
یک عدد Nonce هش شده، عددی تولید میکند که ممکن است با مطابقت با بلاک معتبر باشد، البته در بیشتر اوقات معتبر نیست.
در این حالت، عدد نانس معتبر یک مقدار عددی 4 رقمی است. اولین کسی که بتواند با انجام محاسبات ریاضی به این عدد برسد پاداش بلاک را دریافت خواهد کرد.
مقایسه Nonce و Hash
متغیر Nonce یک پارامتر 32 بیتی است که ماینرها با کار بر روی هر بلاک جدید، باعث تغییر آن میشوند. برای این که مطمئن شویم در یک بلاکچین هر بلاک خاص بوده و از هش یکتا بهره میبرد، از متغیر نانس استفاده میشود. این متغیر مانع حمله 51% به شبکه خواهد شد.
اما در طرف دیگر یک الگوریتم Hash، یک تابع ریاضی است که با دریافت یک ورودی با هر اندازهای (چه یک کلمه و چه یک فایل 10 گیگابایتی)، یک خروجی یکتا مختص ورودی با طول ثابت خواهد داشت. به خروجی توابع هش معمولا مقدار هش، Hash code یا صرفا هش گفته میشود.
بیشتر بخوانید: هش ریت (Hashrate) چیست و چه کاربردی در ارزهای دیجیتال دارد؟
اگر با ظهور بیتکوین و تراکنشهای آن با هش آشنا شدهاید باید بدانید که الگوریتمهای هش مدت زیادی است که در تکنولوژی اینترنت و زیر ساختهای آن کاربرد دارند. ذخیره رمزهای عبور، تایید یکپارچگی فایل یا امضاهای دیجیتال فقط نمونههای ساده آن هستند.
اما نباید در اینجا توابع هش و Nonce را در مقابل یک دیگر مقایسه کنیم بلکه نانس به عنوان یک ورودی در توابع هش باعث یکتا بودن و خاص شدن خروجی خواهد شد.
اگر نام bourseiness را در یک تابع هش SHA-256 قرار دهیم خروجی به شکل زیر خواهد بود:
aabb5a98088fb129b33e5409274ae0f39d27cc385be3a06337d394ff83342e8d
حالا اگر ما یک عدد تصادفی (Nonce) را در کنار نام بورسینس قرار دهیم، هش به شکل زیر تولید میشود:
4ef032de3c9f76bb8ca2486a371c0f4743fcaf5aa91ae8ced8a15ba8ec411337
این دو هش کاملا متفاوت هستند، آیا شما میتوانید عددی که در کنار نام بورسینس استفاده کردهایم را حدس بزنید؟ به نظر شما چقدر قدرت پردازش برای حدس زدن آن لازم است؟
وقتی یک عدد تصادفی مانند Nonce (که گاهی به آن Salt نیز گفته میشود) را در کنار ورودی تابع هش قرار دهیم، حدس زدن آن با بازگشت مقدارهای اولیه بسیار مشکل خواهد بود.
به خاطر داشته باشید از نظر ریاضی نمیتوان مقدار هش را به ورودی اولیه معکوس کرد (حداقل چند صد سال برای پردازش معکوس آن زمان نیاز است!).
از این رو، وقتی قرار است یک بلاک جدید به زنجیره اضافه شود، همه دادههای داخل بلاک (تراکنش) قابل محاسبه هستند، ما میدانیم هش هر کدام از آنها چیست و با وارد کردن آنها به یک تابع هش، هش مربوط به بلاک ایجاد خواهد شد. اما در این حالت هر کسی میتواند آن بلاک را ایجاد کند، آیا اینطور نیست؟
پس با ترکیب Nonce که یک عدد تصادفی غیرقابل پیشبینی است با هش اولیه بلاک، هر کسی نمیتواند آن را حدس بزند از این رو، دستکاری تراکنشهای داخل بلاک نیز غیرممکن میشود چرا که یک نفر با قدرت پردازش محدود نمیتواند نانس را پیدا کند.
ماینرها چگونه نانس را پیدا میکنند؟
در ابتدای مقاله گفته شد، متغیر Nonce یک فیلد 4 بایتی است. اما 4 بایت که از هر بیت آن (32 بیت) استفاده میشود. برای درک بهتر مقدار این عدد، آن را مانند 32 رقم صفر در کنار یک دیگر تصور کنید.
یک ماینر عدد نانس خود را با هش هدر بلاک دوباره هش میکند (ورودی جدید به تابع هش میدهد)، اگر خروجی با هش نهایی بلاک سازگار بود، بلاک به زنجیره اضافه خواهد شد و ماینر پاداش میگیرد، در غیر این صورت عدد Nonce یکی اضافه میشود. با هر بار افزودن بلاک جدید به شبکه، کل این فرآیند دوباره تکرار میشود.
هر چه سختی شبکه افزایش پیدا کند، تعداد احتمالات نیز کاهش پیدا خواهد کرد و ماینرها باید بیشتر تلاش کنند.
نتیجه گیری
در بلاکچینهای POW یا مکانیزمهای مشابه که از ماینرها استفاده میشود، متغیر Nonce روشی برای جلوگیری از حمله به شبکه، افزایش سختی و ممانعت از Double Spending است.
عدد نانس غیرقابل پیشبینی و تصادفی توسط برنامه استخراج ایجاد میشود و با هش موجود در هدر بلاک دوباره هش خواهد شد، اگر با هش مقصد بلاک یکسان بود، ماینر بلاک را به زنجیره اضافه میکند و پاداش خود را میگیرد.
شما در بورس، علاوه بر خرید و فروش سهام:
- میتوانید در داراییهایی مانند طلا و مسکن سرمایهگذاری کنید
- در صندوقهای سرمایه گذاری بدون ریسک، سود ثابت بگیرید
برای شروع سرمایهگذاری، افتتاح حساب رایگان را در یکی از کارگزاریها انجام دهید:
نام شرکت | ویژگیها | امتیاز | لینک ثبتنام |
---|---|---|---|
کارگزاری آگاه |
|
برای سرمایهگذاری و معامله موفق، نیاز به آموزش دارید. خدمات آموزشی زیر از طریق کارگزاری آگاه ارائه میشود: