نانس چیست و ارتباط Nonce با بلاک چین چگونه است؟ در پاسخی کوتاه میشه گفت نانس یکی از مفاهیم اصلی در شبکه بیت کوین و بلاک چین هایی هست که از الگوریتم اثبات کار استفاده می کنه و به ما در درک نحوه کارکرد این شبکه ها کمک زیادی می کنه. همچنین شبکه بلاک چین بیت کوین اولین شبکه پرداخت جهانی هست که بدون نظارت نهادی متمرکز فعالیت می کنه. با توجه به عدم کنترل بلاک چین توسط نهادی ناظر، اولین سوالی که ممکنه به ذهنتون برسه این هست که مسئله امنیت تراکنش ها در شبکه های بلاک چین مثل بیت کوین چجوری تامین میشه و چجوری میشه از عدد نانس در بلاک چین ارزهای دیجیتال استفاده کرد؟
بلاکچین یک فناوری نوظهور است که از نظر برخی افراد قرار است دنیا را تغییر دهد. در مقابل عدهای هم اعتقاد دارند که بلاکچین به اندازه کافی امن نیست. اما ساز و کارهایی در بلاکچین تعریف شده است که امنیت این فناوری را تضمین میکند. یکی از این ویژگیها نانس (NONCE) است. نانس همان عددی است که ماینرهای سراسر جهان با دستگاههای قدرتمند خود به دنبال پیدا کردن آن هستند تا بتوانند در ازای این کار، پاداش دریافت کنند.
در این مقاله قرار است به این سوال پاسخ دهیم که عدد نانس چیست و در استخراج ارزهای دیجیتال مانند بیت کوین چه نقشی دارد.
فهرست محتوا
عدد نانس چیست؟
کلمه نانس از دو عبارت تشکیل شده است. یکی حرف (n) که مخفف عدد (Number) است و دیگری عبارت (Once) به معنای فقط یکبار است. عدد نانس یا Nonce درواقع کوتاه شده عبارت (number only used once) به معنی “شمارهای که فقط یکبار استفاده شده” است.
Nonce یک شماره تصادفی یا نیمهتصادفی است که برای یک مصرف خاص به وجود میآید. عدد نانس عموماً در ارتباطات رمزنگاریشده و فناوری اطلاعات به کار میرود. نانس در واقع مقداری است که بر اساس زمان تغییر میکند، آن هم به این خاطر که تأیید کند، مقادیر خاص بیش از یکبار استفاده نشدهاند.
عدد نانس یکی از اجزای بلاک ها در بلاک چین هست که یکی از کاربردهای اصلی اون در استخراج ارزهای دیجیتال هست. همچنین نانس مخفف عبارت عددی که تنها یبار به کار میره هست و به عددی گفته میشه به یه بلاک هش شده یا رمزنگاری شده در بلاک چین اضافی شده و زمانی که این عدد به همراه هش بلاک مجددا هش بشن.
جالب اینجاست که بدونین زمانی که عدد نانس یا Nonce به همراه هش بلاک مجددا هش بشن می تونن هشی به وجود بیارن که شرایط و محدودیت های تعریف شده توسط پارامتر سختی شبکه رو برآورده کنند. نانس همون عددی هست که استخراج کننده های بلاک چین به دنبال پیدا کردن اون هستن.
زمانی که راه حل هش پیدا میشه، استخراج کننده ها در ازای اون ارز دیجیتال دریافت می کنند. در دنیای بلاک چین عدد نانس بخشی از داده هایی هست که توسط کلید عمومی ماینرها هش میشه. البته در فرایند استخراج در کنار عدد نانس که فقط یبار قابل استفاده هست از برچسب زمانی هم برای تولید علامت یکتای بلاک استفاده میشه.
مقدمه عدد Nonce : سربرگ یا هدر بلاک
در شبکه بیت کوین، هر بلاک دارای دوبخش اصلی است، بدنه بلاک که شامل تعدادی تراکنش است و هدر بلاک (Block Header) یا سربرگ، که شامل یک سری اطلاعات خلاصه در خصوص آن بلاک است.
اطلاعاتی که در هدر بلاک وجود دارند عبارتند از:
- ورژن: این عدد ورژن بلاک یا نسخهای از قوانینی است که این بلاک بر اساس آن قابل تایید است.
- هش هدر بلاک قبلی: بلاک قبل از این بلاک در بلاک چین هم دارای یک هدر مخصوص به خود است که هش آن در هدر بلاک بعدی ثبت میشود.
- هش ریشه مرکل تراکنشها: به صورت خلاصه و ساده، میشود “هش مجموع تراکنشهای موجود در این بلاک”.
- زمان: این عدد نشاندهنده دقیق زمانی است که در آن ماینر شروع به پیدا کردن هش بلاک کرده است.
- nBits: نشان دهنده تارگت یا هدفی است که توسط شبکه مشخص شده و در صورتی که هشی که ماینر برای این بلاک پیدا میکند از این عدد کوچکتر باشد، بلاک استخراج شده تلقی میشود و ماینر به پاداشش میرسد.
- نانس (nonce): یک عدد دلخواه است که توسط ماینر مدام عوض میشود و با عوض شدن آن هش هدر بلاک هم تغییر میکند، تا زمانی که این هش از Target یا هدف تعیین شده توسط شبکه مقدار کوچکتری داشته باشد و بلاک به اصطلاح استخراج شود.
برای آن که بهتر متوجه نحوه عملکرد و کاربرد عدد Nonce شوید، پیشنهاد میشود ابتدا با مکانیزم تابع هش آشنا شوید. اما به صورت خلاصه هش یک تابع رمزنگاری یک طرفه است که هر ورودی با هر حجمی، یک خروجی با طول ثابت ۲۵۶ بیتی میدهد که متمایز آن ورودی است و با کوچکترین تغییر در داده ورودی، خروجی یا همان هش کاملا تغییر میکند و یک چیز دیگر میشود. به همین دلیل به هش، اثر انگشت دیجیتال دادهها هم گفته میشود.
از بین این ۶ عددی که در هدر هر بلاک وجود دارد و در بالا هم به آنها اشاره شد، ۵ مورد مربوط به اطلاعات بلاک و شبکه بلاک چین هستند و ماینر قادر به تغییر آنها نیست و تنها چیزی که ماینر قادر به تغییر آن است همین عدد نانس است.
در واقع نانس یک عدد است که تنها کاربردی که دارد این است که ماینر با تغییر آن، قادر به تغییر اطلاعات هدر بلاک است (چون نانس یکی از اطلاعات موجود در هدر بلاک است) و بدین ترتیب با تغییر هدر بلاک، هش آن هم کاملا تغییر خواهد کرد.
ماینرها با استفاده از کامپیوترهای خود، با سعی و خطا آنقدر این عدد را تغییر میدهند تا هش هدر بلاک از تارگت تعیین شده توسط شبکه بیت کوین کوچکتر باشد.
اولین ماینری که موفق به پیدا کردن عدد نانس با شرایط گفته شده شود، برنده پاداش استخراج بلاک جدید میشود و بلاکی که آن ماینر موفق به استخراج آن شده است، به زنجیره بلاکها یا بلاک چین اضافه میگردد.
مفهوم عدد نانس در بلاکچین
بلاکچین بستری برای ایجاد رمز ارزها است. برای اینکه بلاکچین امن باقی بماند، دادههای بلاکهای قبلی به صورت یک سری اعداد یا حروف رمزگذاری یا به اصطلاح هش میشوند. این عمل با پردازش ورودی بلاک از طریق تابع هش (Hash Function) انجام میشود که یک خروجی با طول ثابت و مشخص به ما میدهد.
تابعی که برای ایجاد هش به کار میرود یک تابع قطعی و ثابت است؛ به این معنا که خروجی تابع هش در ازای یک ورودی مشخص، تغییر نخواهد کرد و هر تغییر کوچک در ورودی، یک هش بسیار متفاوت به وجود میآورد. این سیستم پیچیده، محرمانگی بلاکچین را به وجود میآورد.
بلاکچینهایی که از الگوریتم اثبات کار استفاده میکنند از نانس در تولید هش استفاده میکنند. در بلاکچین، ماینرها هنگام پردازش تراکنشهای بلاکها، با یکدیگر برای پیدا کردن نانس رقابت میکنند.
کاربردهای نانس
کاربردهای نانس Nonce در بلاکچین را میتوان به صورت زیر بیان کرد:
هشکردن یا Hashing: الگوریتم اثبات کار یا گواه کار (Proof of Work) از مقادیر نانس برای تغییر دادن ورودی تابع هش رمزنگاری استفاده میکند. در الگوریتم اثبات کار، بلاکهای جدید در بلاکچین از طریق استخراج به وجود میآیند. عدد نانس همان چیزی که استخرجکنندگان برای رسیدن به آن تلاش میکنند. وقتی که راهحل معادله پیدا میشود، در ازای این کار به ماینرها پاداش داده میشود.
مدیریت هویت افراد: بازیابی حساب و احراز هویت دو مرحلهای از کاربردهای مهم عدد نانس است. برای مثال وقتی بخواهیم حساب کاربریمان را چه با تأیید یک مرحلهای و چه دو مرحلهای بازیابی کنیم، این بازیابی با استفاده از مقادیر نانس انجام میشود. به همین ترتیب، نرمافزارهای ایجاد کنندهی امضاهای دیجیتال نیز از نانس استفاده کرده و به کمک آن امضاها را مقایسه و تأیید میکنند.
احراز هویت: الگوریتمهای اجماع باید اطمینان حاصل کنند که ارتباطات کریپتوگرافیک گذشته بازپردازش نمیشوند، به همین منظور این الگوریتمها از نانس استفاده میکنند. برای مثال از اعداد نانس در پروتکلهای احراز هویت استفاده میشود تا شخصی به واسطه اعداد قدیمی امکان وارد شدن به سیستم را نداشته باشد.
در حالت کلی کاربردهای عدد نانس عبارت است از:
- هش کردن
- مدیریت هویت
- احراز هویت
عدد نانس کجا قرار میگیرد؟
جایگاه استفادهی عدد Nonce در درخت مرکل است. درخت مرکل، راه حل ساتوشی ناکاموتو برای حل مشکل فضای ذخیره سازی بلاکچین بیت کوین است. در سیستمی که درخت مرکل ارائه میکند، زمانی که یک تراکنش جدید انجام و نهایی شد، تمامی تراکنشهای قبلی میتوانند نادیده گرفته شوند. البته در این راه حل تراکنشهای قبلی حذف یا شکسته نمیشوند، فقط به صورت خلاصه در ریشهی درخت ذخیره میشوند.
مهمترین قسمت درخت مرکل، سربرگ یا Header آن است. سربرگ محلی است که اطلاعاتی مانند: Nonce، هش بلاک و هش ریشه در آن ذخیره میشود. هنگامی که یک بلاک در بلاکچین استخراج و تایید شد، در واقع یک درخت مرکل در آن ایجاد شده است. نانس عددی است که تمامی اطلاعات درخت مرکل در آن ذخیره شده است.
کاربرد نانس در استخراج بیت کوین
استخراج بیت کوین به زبان ساده، حل کردن معادلات ریاضی مختلف برای پیدا کردن یک بلاک در بلاکچین است که توسط شبکه تایید شود. استخراج بیت کوین از الگوریتم گواه اثبات کار استفاده میکند. در واقع هر بیت کوین، یک رشته کد از حروف و اعداد است که در فضایی به نام بلاک ذخیره شده است. هر بلاک از دو بخش هدر بلاک (Block Header) و بدنه بلاک (Block Body) تشکیل شده است. اطلاعاتی که در هدر بلاک وجود دارند عبارتند از: هش هدر بلاک قبلی، هش ریشه مرکل تراکنشها، زمانی که ماینر شروع به پیدا کردن هش بلاک کرده، عدد نانس.
کاربرد نانس در استخراج بیت کوین این است که ماینر با تغییر آن، قادر به تغییر اطلاعات هدر بلاک است. ماینرهای بیت کوین آنقدر نانسهای مختلفی را آزمایش میکنند تا به عددی برسند که با استفاده از آن، عدد هش هدر بلاک از هدف تعیین شده توسط شبکه بیت کوین کوچکتر باشد. اولین ماینری که موفق شد این عدد را پیدا کند، یک بلاک میسازد و پاداش استخراج بلاک را دریافت میکند. به همین دلیل، به این عدد، عدد رویایی ماینرها گفته میشود. این فرایند به همین شکل برای تولید هر بلاک ادامه پیدا میکند.
فرآیند استخراج
اما برای آن که بهتر متوجه کاربرد عدد نانس و فرآیندی که در استخراج اتفاق میافتد شوید، بیایید یکبار دیگر به شکلی سادهتر به کل آن نگاه کنیم:
هر ماینر ابتدا تعدادی از تراکنشهای تایید نشده موجود در شبکه (این تراکنشها در فضای MemPool قرار دارند) را برای خود انتخاب میکند (معمولا تراکنشهایی را انتخاب میکنند که کارمزد بیشتری دارند) و آنها را در قالب یک بلاک طبق بندی میکند؛ یعنی بدنه بلاک پیشنهادی این ماینر، از همین تراکنشهای انتخابی او تشکیل شده است.
در قسمت سربرگ، ورژن یک عدد است که به واسطه آن ماینر به شبکه اعلام میکند که تابع کدام نسخه از قوانین شبکه است. هش هدر بلاک قبلی هم که بر اساس آخرین بلاک موجود در بلاک چین تعیین میشود.
هش ریشه مرکل هم که در واقع هش تمام تراکنشهای موجود در این بلاک پیشنهادی است و بر اساس تراکنشهای انتخاب شده تعیین میشود. زمان هم که مشخص است و nBits هم که به نوعی نشان دهنده تارگت است و توسط شبکه بیت کوین تعیین شده و معیاری برای سخت و آسان کردن رقابت (سختی شبکه) است. هرچه تارگت کوچکتر باشد، شرایط سختتر میشود.
بعد از آن که تمام این اطلاعات مشخص شد، تنها چیزی که باقی میماند عدد نانس است که ماینر باید آن را خودش پیدا کند. ماینر ابتدا یک عدد شانسی را به جای نانس قرار میدهد؛ اما فرض کنید مثلا ابتدا عدد ۱ را به عنوان نانس قرار میدهد. حال تمام اطلاعات هدر مشخص شده و میتوان هش آن را محاسبه کرد.
اگر این هش مقدارش از عدد تارگت تعیین شده توسط شبکه کوچکتر باشد، ماینر موفق به استخراج بلاک پیشنهادی خودش شده و میتواند بلاکش را به زنجیره بلاک چین اضافه کند و پاداشش را دریافت کند؛ اما احتمال این که ماینر در اولین حدس خود برای عدد نانس موفق شود، نزدیک به صفر است (جلوتر متوجه میشوید که این احتمال چقدر کم است) و احتمالا آن عدد نانس منجر به پیدا شدن هش هدری بزرگتر از تارگت میشود که قابل قبول شبکه نیست.
در گام بعدی، ماینر حدس خود برای نانس را عوض میکند به فرض عدد ۲ را قرار میدهد و هش بلاک را محاسبه میکند و میبیند که هش هدر از تارگت کوچکتر میشود یا خیر و مجدد در صورت بزرگتر بودن هش، باز هم حدس خود برای عدد نانس را تغییر میدهد و با سعی و خطا این کار را ادامه میدهد.
حال در آخر، بعد از کلی حدس یا موفق میشود که بلاک خود را به عنوان اولین نفر استخراج کند یا یک نفر دیگر در جایی دیگر از دنیا زودتر از او موفق میشود بلاک پیشنهادیش را استخراج کند؛ در این صورت ماینر از ادامه دادن به حدس زدن نانس برای بلاک خودش دست میکشد. چون حالا دیگر آخرین بلاک موجود در بلاک چین (بلاک قبلی) و هش آن تغییر کرده و ماینر باید این اطلاعات را هم به روز رسانی کند و دوباره مشغول به حدس زدن عدد نانس شود.
حتما شنیدهاید که میگویند مثلا فلان دستگاه ماینر، ۱۴ ترا هش بر ثانیه (Th/s) قدرت دارد. جالب است بدانید که این عدد یعنی آن دستگاه قادر است در هر ثانیه ۱۴ تریلیون حدس مختلف برای عدد نانس بزند؛ یعنی این دستگاه میتواند در یک ثانیه، کل فرآیند توضیح داده شده را ۱۴ تریلیون بار تکرار نماید!
با این توان خارقالعاده در حدس زدن پیاپی، اگر چنین دستگاهی بخواهد در حال حاضر (با فرض هش ریت کلی ۷۰ میلیون تراهش بر ثانیه)، به تنهایی در این رقابت جهانی شرکت کند، شانسش برای برنده شدن، در هر ده دقیقه که یک بلاک جدید به شبکه اضافه میشود، تقریبا یک در ۵ میلیون است! یعنی شاید سالها طول بکشد که این دستگاه بتواند به تنهایی موفق به استخراج یک بلاک جدید شود.
نانس صفر
بدون حضور عدد نانس در مشخصات یک تراکنش، ماینر نمیتواند با حفظ نظم تراکنشها به آنها ساماندهی کند. برای مثال اگر چهاردهمین اتریوم در حال استخراج باشد و نانس اتریوم شمارهی ۱۰، صفر باشد، یعنی توالی بلاکها و تراکنشها برهم خورده است. به همین دلیل تراکنشهایی با نانس ۰ در لیست تایید ماینرها قرار نمیگیرند چرا که انسجام بلاک چین را حفظ نمیکنند. به همین دلیل اگر نانس یک تراکنش صفر باشد، تراکنش هرگز انجام نخواهد شد.
کاربرد عدد نانس در لغو تراکنش در حال انتظار
ماینرها هنگام فعالیت در شبکه و استخراج ارز دیجیتال، به دنبال دو نوع پاداش هستند. یکی پاداش بلاک و دیگری کارمزد تراکنشهای کاربران.
به همین دلیل زمانی که یک تراکنش را برای تایید انتخاب میکنند، تلاش میکنند تراکنشهایی را انتخاب کنند که بیشترین کارمزد را دارند و زمانی که ترافیک شبکه زیاد است، تراکنشها با کارمزد پایین تایید نمیشوند.
ترتیب پردازش تراکنشها در شبکه با عدد Nonce تعیین میشود. در صورتی که کاربر بخواهد تراکنش در حال انتظار خود را لغو کند و مجدد آن را ارسال کند، اولین قدم این است که مقدار نانس آن را پیدا کند. سپس یک تراکنش جدید با همان نانس اما با کارمزد بالاتر ارسال کند. به این ترتیب، شبکه تراکنش دوم را جایگزین تراکنش در حال انتظار میکند.
نانس، نگهبان امنیت بلاکچین
ماینینگ، یکی از روشهای کسب درآمد از ارز دیجیتال است که افراد زیادی به آن علاقهمند هستند. یکی از چالشهای مهم که ماینرها با آن مواجه هستند، دسترسی به قدرت محاسباتی زیاد است. رقابت بین ماینرها روز به روز بیشتر میشود و عدد نانس راهی برای حذف ماینرهایی با توان محاسباتی کمتر است. زیرا یافتن عدد Nonce دشوار است.
علاوه بر این، عدد Nonce یک راه حل مطمئن برای حفظ امنیت رمزنگاری در انواع بلاکچین است. از آنجایی که موضوع امنیت در شبکههای غیرمتمرکز از اهمیت ویژهای برخوردار است، ایجاد ساز و کارهایی که امنیت شبکه را افزایش دهد یا تضمین کند هم بسیار حائز اهمیت است. از این رو میتوان گفت که عدد نانس در فناوری بلاکچین نقش مهمی دارد.