کاربرد تابع Ecrecover برای اتریوم؛ از احزار هویت تا تراکنش‌های بدون کارمزد

تاریخ انتشار:
۲۹ مرداد ۱۴۰۳
آخرین به‌روزرسانی:
۱۱ شهریور ۱۴۰۵
مفاهیم ارز دیجیتالهدیه آرمان
2,471
زمان مطالعه:
23 دقیقه

امضای دیجیتال در اتریوم، روشی برای اثبات مالکیت یک پیام یا تراکنش با استفاده از کلید خصوصی است و تابع Ecrecover در سالیدیتی دقیقا همین وظیفه را بر عهده دارد؛ یعنی بازیابی آدرس فرستنده از روی یک امضا. اما ماجرا به همین سادگی تمام نمی‌شود؛ در پشت صحنه‌ی این اعتبارسنجی، قراردادهای هوشمند با منطق پیچیده‌ای روبه‌رو هستند که کوچکترین اشتباه در تفسیر داده‌های خام می‌تواند ساختار یک اپلیکیشن غیرمتمرکز را دچار مشکل کند.

what-is-ecrecover-function

توسعه‌دهنده‌ای را تصور کنید که می‌خواهد امکان انتقال توکن بدون پرداخت گس (متاتراکنش‌ها) یا یک سیستم رای‌گیری روان را برای کاربرانش فراهم کند. او برای پیاده‌سازی این ویژگی به تابع Ecrecover متوسل می‌شود، غافل از اینکه یک خطای جزئی در مدیریت پارامترهای v و r و s، به مهاجمان اجازه می‌دهد امضاها را جعل کرده یا دارایی کاربران را به خطر بیندازند. در این مقاله، مکانیزم دقیق بازیابی آدرس در ماشین مجازی اتریوم را بررسی می‌کنیم. از نحوه عملکرد الگوریتم ECDSA تا پیاده‌سازی امن مجوزهای ERC-20، مسیری روشن برای استفاده اصولی از این تابع و جلوگیری از نفوذ هکرها پیش روی شما قرار خواهد گرفت.

امضای دیجیتال در شبکه‌ی اتریوم چگونه کار می‌کند؟

در دنیای فیزیکی، ما برای تایید یک قرارداد یا نامه‌ی مهم، پای آن را امضا می‌کنیم تا نشان دهیم آن را خوانده‌ایم و با محتوایش موافق هستیم. در دنیای رمزارزها و شبکه‌ی اتریوم نیز دقیقا به همین مکانیزم نیاز داریم؛ با این تفاوت که اینجا خبری از کاغذ و خودکار نیست و همه‌چیز با ریاضیات و کدهای کامپیوتری انجام می‌شود. امضای دیجیتال (Digital Signature) یک روش رمزنگاری‌شده است که به شبکه‌ی بلاکچین ثابت می‌کند یک تراکنش یا پیام، واقعا از طرف صاحب اصلی یک کیف پول صادر شده است و هیچ‌کس در بین راه آن را دستکاری نکرده است.

آشنایی ساده با مفهوم کلید خصوصی و کلید عمومی

برای درک بهتر امضای دیجیتال، ابتدا باید با دو مفهوم کلیدی و بسیار مهم آشنا شویم: کلید عمومی (Public Key) و کلید خصوصی (Private Key). این دو کلید همیشه به صورت جفت ساخته می‌شوند و به یکدیگر وابسته‌اند.

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

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

الگوریتم ECDSA چیست و چه نقشی در امنیت بلاکچین دارد؟

الگوریتم ECDSA (الگوریتم امضای دیجیتال منحنی بیضوی) نام همان موتور ریاضی قدرتمندی است که در شبکه‌ی اتریوم برای ساخت و بررسی امضاها استفاده می‌شود. شاید نام آن کمی پیچیده به نظر برسد، اما ایده‌ی اصلی آن بسیار ساده و جذاب است.

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

بررسی امضای دیجیتال: پارامترهای v و r و s چه هستند؟

وقتی شما یک پیام را در شبکه‌ی اتریوم امضا می‌کنید، خروجی نهایی یک رشته متن طولانی است که 65 بایت (Byte - واحد اندازه‌گیری داده‌های کامپیوتری) حجم دارد. ماشین مجازی اتریوم (EVM - محیطی که قراردادهای هوشمند اتریوم در آن اجرا می‌شوند) برای اینکه بتواند این امضای خام را تحلیل کند، آن را به سه قطعه‌ی ریاضی به نام‌های v و r و s تقسیم می‌کند. بیایید ببینیم هر کدام چه معنایی دارند:

  • پارامترهای r و s: این دو مقدار، خروجی‌های اصلی الگوریتم رمزنگاری هستند که با هم 64 بایت از امضا را تشکیل می‌دهند. این اعداد در واقع مختصات ریاضی نقطه‌ای روی همان منحنی بیضوی هستند که ثابت می‌کنند امضای شما معتبر و دست‌نخورده است.
  • پارامتر v: این مقدار که تنها 1 بایت حجم دارد، شناسه‌ی بازیابی (Recovery ID) نامیده می‌شود. از آنجا که در محاسبات ریاضی ممکن است دو کلید عمومی متفاوت بتوانند امضای مشابهی روی یک منحنی تولید کنند، پارامتر v به شبکه‌ی اتریوم کمک می‌کند تا مسیر درست را پیدا کرده و دقیقا کلید عمومی شخص شما را از میان احتمالات موجود بازیابی کند.

توابع برنامه‌نویسی اتریوم مانند تابع ecrecover با دریافت این سه پارامتر در کنار پیام اصلی، می‌توانند آدرس فرستنده‌ی پیام را با دقت کامل تشخیص دهند.

امضای دیجیتال | صرافی کیف پول من

جدول مرور تفاوت امضای تراکنش مالی با امضای پیام متنی

شاید برایتان سوال پیش بیاید که امضا کردن برای ارسال پول با امضا کردن یک پیام ساده برای ورود به یک سایت (DApp - برنامه‌های غیرمتمرکز) چه تفاوتی دارد. در جدول زیر این تفاوت‌ها را به صورت خلاصه بررسی کرده‌ایم:

ویژگی

امضای تراکنش مالی (مانند ارسال اتر)

امضای پیام متنی (مانند احراز هویت در سایت)

هدف اصلی

جابه‌جایی دارایی روی شبکه‌ی بلاکچین

تایید هویت کاربر یا تایید یک توافق دیجیتال

پرداخت کارمزد (Gas)

بله، برای ثبت در شبکه نیاز به پرداخت کارمزد دارد

خیر، کاملا رایگان و آفلاین انجام می‌شود

ثبت در شبکه‌ی اتریوم

برای همیشه در تاریخچه‌ی شبکه ثبت می‌شود

در شبکه ثبت نمی‌شود و فقط سیستم هدف آن را می‌خواند

خروجی فرآیند

کسر شدن مبلغ و کارمزد از موجودی کیف پول

صدور مجوز برای ورود یا انجام یک کار خاص در آینده

تابع Ecrecover چیست و دقیقا چه کاری انجام می‌دهد؟

در دنیای بلاکچین، قراردادهای هوشمند (Smart Contracts - برنامه‌هایی که به صورت خودکار روی شبکه‌ی اتریوم اجرا می‌شوند) نمی‌توانند چهره‌ی شما را ببینند یا کارت ملی شما را بررسی کنند. آن‌ها برای شناخت شما فقط به کدهای ریاضی تکیه می‌کنند. در اینجا پای یک کارآگاه دیجیتال به نام تابع Ecrecover به میان می‌آید. این تابع یکی از ابزارهای داخلی و بسیار مهم در شبکه‌ی اتریوم است که وظیفه‌ی آن، بررسی امضاهای دیجیتال و پیدا کردن هویت واقعی شخصی است که آن امضا را ثبت کرده است. به زبان ساده‌تر، این تابع به یک امضا نگاه می‌کند و دقیقا به ما می‌گوید که کدام آدرس کیف پول آن را ایجاد کرده است.

مفهوم بازیابی آدرس از روی امضای دیجیتال در سالیدیتی

سالیدیتی (Solidity - زبان اصلی برنامه‌نویسی قراردادهای هوشمند در اتریوم) برای تایید اینکه یک پیام واقعا از طرف شما صادر شده است، از تابع Ecrecover استفاده می‌کند. کارکرد این تابع شبیه به کار یک کارشناس خط است.

تصور کنید شما یک چک بانکی را امضا کرده‌اید. کارشناس بانک، امضای روی چک را با نمونه امضای شما مطابقت می‌دهد تا هویت شما را تایید کند. در سالیدیتی، تابع Ecrecover پیام هش‌شده (Hashed Message - تبدیل یک متن خوانا به یک رشته کد نامفهوم با طول ثابت) را به همراه قطعات امضای دیجیتال شما که در بخش قبل با آن‌ها آشنا شدیم یعنی پارامترهای v و r و s دریافت می‌کند. سپس با انجام محاسبات پیچیده‌ی ریاضی، بررسی می‌کند که این امضا متعلق به کدام کلید عمومی است و در نهایت، آدرس اتریومی شخصی که امضا را انجام داده است، به عنوان خروجی به ما نشان می‌دهد.

جایگاه و نحوه عملکرد Ecrecover در ماشین مجازی اتریوم (EVM)

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

برای حل این مشکل، توسعه‌دهندگان اتریوم تابع Ecrecover را به عنوان یک قرارداد از پیش کامپایل‌شده (Precompiled Contract) مستقیما در هسته‌ی ماشین مجازی اتریوم قرار داده‌اند. این یعنی تابع Ecrecover از قبل درون سیستم‌عامل این کامپیوتر جهانی تعبیه شده است تا سریع‌تر و با کمترین هزینه‌ی ممکن اجرا شود.

روند کار این تابع در ماشین مجازی اتریوم به این شکل است:

  • تابع، اطلاعات پیام و امضای رمزنگاری‌شده (همان مقادیر v، r و s) را دریافت می‌کند.
  • با استفاده از الگوریتم‌های ریاضی، کلید عمومی فرد امضاکننده را استخراج می‌کند.
  • کلید عمومی را به یک آدرس استاندارد اتریوم تبدیل کرده و آن را برمی‌گرداند.

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

چرا قراردادهای هوشمند برای شناخت کاربران به این تابع نیاز دارند؟

ممکن است بپرسید وقتی خود شبکه‌ی اتریوم می‌تواند تراکنش‌ها را تایید کند، چرا قراردادهای هوشمند به صورت جداگانه به تابع Ecrecover نیاز دارند؟ پاسخ در انعطاف‌پذیری و کاهش هزینه‌ها نهفته است.

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

  • صرفه‌جویی در هزینه‌ها: گاهی نیاز است کاربران یک توافق را تایید کنند اما نمی‌خواهند کارمزدی بپردازند. کاربر پیام را به صورت کاملا رایگان در کیف پول خود امضا می‌کند و بعدا قرارداد هوشمند با کمک Ecrecover، آن امضا را اعتبارسنجی می‌کند.
  • مدیریت متاتراکنش‌ها: (Meta-transactions - تراکنش‌هایی که در آن‌ها شخص دیگری به جای شما کارمزد شبکه را می‌پردازد) در این حالت، شما فقط پیام را امضا می‌کنید و قرارداد هوشمند با استفاده از این تابع مطمئن می‌شود که درخواست واقعا از سمت شما بوده است و سپس شخص ثالث کارمزد آن را پرداخت می‌کند.
  • احراز هویت بدون نیاز به تراکنش: بسیاری از برنامه‌های غیرمتمرکز برای ورود به حساب کاربری، به جای درخواست یک تراکنش مالی، از شما می‌خواهند یک پیام متنی را امضا کنید. تابع Ecrecover در پس‌زمینه بررسی می‌کند که آیا شما واقعا صاحب آن آدرس کیف پول هستید یا خیر.

کاربردهای Ecrecover در توسعه قراردادهای هوشمند

حالا که با مفهوم اصلی این تابع رمزنگاری آشنا شدیم، وقت آن است که ببینیم در دنیای واقعی چگونه از آن استفاده می‌شود. برنامه‌نویسان و توسعه‌دهندگان از این ابزار قدرتمند استفاده می‌کنند تا برنامه‌های غیرمتمرکز (DApps - نرم‌افزارهایی که روی بلاکچین اجرا می‌شوند و تحت کنترل هیچ شخص یا شرکتی نیستند) را کاربرپسندتر، سریع‌تر و ارزان‌تر کنند. این تابع مانند یک دفترخانه‌ی دیجیتال و خودکار عمل می‌کند که اسناد را اعتبارسنجی می‌کند. در ادامه، مهم‌ترین کاربردهای آن را بررسی می‌کنیم.

احراز هویت بدون نیاز به پرداخت کارمزد

در بسیاری از سایت‌ها و برنامه‌های سنتی، ما با وارد کردن نام کاربری و رمز عبور وارد حساب خود می‌شویم. اما در دنیای وب ۳ (Web3 - نسل جدید اینترنت که بر پایه‌ی فناوری بلاکچین ساخته شده است)، کیف پول دیجیتال شما همان هویت و نام کاربری شماست. حال سوال اینجاست که آیا برای هر بار ورود به یک پلتفرم باید کارمزد پرداخت کنید؟ خوشبختانه خیر!

به کمک تابع Ecrecover، سایت مورد نظر از شما می‌خواهد که یک پیام متنی ساده را در کیف پول خود امضا کنید. این کار کاملا آفلاین انجام می‌شود و هیچ هزینه‌ای برای شما ندارد. سپس سیستم این امضا را بررسی کرده و اگر متعلق به آدرس شما بود، اجازه‌ی ورود می‌دهد. این فرآیند دقیقا مثل نشان دادن کارت شناسایی به نگهبان یک ساختمان است؛ شما هویت خود را ثابت می‌کنید، بدون اینکه نیاز باشد هزینه‌ای پرداخت کنید.

متاتراکنش ها و نقش آن‌ها در بهبود تجربه‌ی کاربری

یکی از بزرگ‌ترین چالش‌های کاربران تازه‌وارد به دنیای رمزارز، نیاز به داشتن ارز بومی شبکه (مانند اتر در اتریوم) برای پرداخت هزینه‌ی تراکنش‌ها است. متاتراکنش‌ها (Meta-transactions - تراکنش‌هایی که در آن‌ها کارمزد شما توسط شخص دیگری پرداخت می‌شود) این مشکل بزرگ را حل کرده‌اند.

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

متاتراکنش ها و نقش آن‌ها در بهبود تجربه‌ی کاربری | صرافی کیف پول من

سیستم‌های رای‌گیری غیرمتمرکز امن بر پایه‌ی امضا

سازمان‌های خودگردان غیرمتمرکز (DAO - گروه‌ها یا شرکت‌هایی که مدیرعامل ندارند و توسط اعضای جامعه با رای‌گیری اداره می‌شوند) برای تصمیم‌گیری‌های مهم به مشارکت کاربران نیاز دارند. اگر قرار باشد برای ثبت هر رای روی شبکه‌ی اتریوم کارمزد پرداخت شود، بسیاری از افراد از رای دادن منصرف می‌شوند.

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

معرفی استاندارد EIP-712 برای ساختاردهی و خوانایی بهتر امضاها

اگر تا به حال پیامی را در کیف پول خود امضا کرده باشید، احتمالا با دیدن یک رشته طولانی از حروف و اعداد نامفهوم سردرگم شده‌اید. امضاهای سنتی برای ماشین‌ها قابل فهم هستند، اما برای انسان‌ها بسیار گنگ و ناخوانا به نظر می‌رسند. این موضوع می‌تواند راه را برای کلاهبرداران باز کند تا شما را فریب دهند و پیام اشتباهی را امضا کنید.

استاندارد EIP-712 (مخفف پیشنهادهای بهبود اتریوم - راهکارهایی که برنامه‌نویسان برای ارتقای شبکه ارائه می‌دهند) برای حل این مشکل ایجاد شد. این استاندارد به جای نمایش کدهای درهم‌ریخته، اطلاعات پیام را به صورت ساختاریافته و کاملا خوانا به شما نشان می‌دهد.

  • شما می‌توانید ببینید دقیقا چه مقدار ارز جابه‌جا می‌شود.
  • گیرنده‌ی دارایی چه کسی است.
  • تاریخ و زمان توافق چیست.

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

مجوز ERC-20 یا استاندارد EIP-2612: انتقال توکن بدون نیاز به تایید اولیه (Approve)

در حالت عادی، وقتی می‌خواهید توکن‌های خود را در یک صرافی غیرمتمرکز (DEX - صرافی‌هایی که بدون واسطه و فقط با قراردادهای هوشمند کار می‌کنند) معامله کنید، باید دو مرحله‌ی پرهزینه را طی کنید. ابتدا باید یک تراکنش برای دادن اجازه‌ی برداشت (Approve) ثبت کنید و بعد تراکنش اصلی خرید و فروش را انجام دهید. این یعنی اتلاف وقت و پرداخت دو بار کارمزد!

استاندارد EIP-2612 یا همان مجوز ERC-20 یک راهکار فوق‌العاده برای این مشکل است. با این روش، شما به جای انجام تراکنش اول، فقط یک پیام دیجیتال را امضا می‌کنید که به قرارداد هوشمند اجازه‌ی دسترسی می‌دهد. سپس قرارداد هوشمند با کمک تابع Ecrecover صحت امضای شما را بررسی کرده و عملیات تایید و انتقال را در یک مرحله‌ی یکپارچه انجام می‌دهد. این نوآوری هم در زمان شما صرفه‌جویی می‌کند و هم هزینه‌های کارمزد را به شدت کاهش می‌دهد.

محدودیت‌ها، آسیب‌پذیری‌ها و نکات امنیتی تابع Ecrecover

همان‌طور که یک چاقوی جراحی بسیار تیز و کاربردی است، اما در دست فرد بی‌تجربه می‌تواند خطرناک باشد، تابع Ecrecover نیز ابزار قدرتمندی است که اگر برنامه‌نویسان به درستی از آن استفاده نکنند، باعث هک شدن و از دست رفتن سرمایه‌ی کاربران می‌شود. این تابع وظیفه‌ی خود را به صورت کاملا ماشینی و بدون هیچ‌گونه قضاوت اضافه‌ای انجام می‌دهد؛ بنابراین، این وظیفه‌ی توسعه‌دهنده‌ی بلاکچین است که نکات امنیتی را در کدهای خود با دقت رعایت کند. در ادامه، مهم‌ترین خطرات و راه‌حل‌های آن‌ها را با زبانی ساده بررسی می‌کنیم.

خطر حملات تکرار یا Replay Attack در اعتبارسنجی امضا

فرض کنید شما یک چک بانکی معتبر را امضا کرده و به دوستتان می‌دهید تا پول نقد دریافت کند. اگر متصدی بانک شماره سریال چک را در سیستم باطل نکند، دوست شما می‌تواند از همان چک یک کپی بگیرد و فردا دوباره همان مبلغ را از حساب شما برداشت کند! به این کار در دنیای شبکه‌های غیرمتمرکز، حمله‌ی تکرار (Replay Attack - استفاده‌ی مجدد و غیرمجاز از یک پیام یا تراکنش تایید شده توسط شخص دیگر) می‌گویند.

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

مشکل تغییرپذیری امضا (Signature Malleability) و دریافت خروجی‌های نامعتبر

الگوریتم‌های ریاضی پشت این امضاها یک ویژگی بسیار عجیب دارند. به دلیل ماهیت پیچیده‌ی محاسبات در اتریوم، هر امضای معتبر در واقع یک همزاد پنهان دارد. یعنی یک هکر با کمی دانش ریاضی می‌تواند بدون نیاز به کلید خصوصی شما، تغییرات بسیار کوچکی در اعداد تشکیل‌دهنده‌ی امضای شما (به خصوص در پارامتر s) ایجاد کند. نتیجه‌ی کار، یک امضای جدید است که از نظر ظاهری متفاوت است، اما اگر آن را به تابع Ecrecover بدهیم، در کمال تعجب دوباره همان آدرس شما را تایید می‌کند!

به این پدیده تغییرپذیری امضا (Signature Malleability - قابلیت تغییر دادن ساختار ریاضی امضا بدون از بین رفتن اعتبار آن) می‌گویند. اگر قرارداد هوشمند به گونه‌ای نوشته شده باشد که برای جلوگیری از حمله‌ی تکرار، فقط ظاهر امضاها را چک کند، هکر با ارائه‌ی این امضای همزاد و ساختگی، می‌تواند سیستم را فریب دهد.

خطر بازگشت آدرس صفر (Zero Address) در صورت نامعتبر بودن امضا

یکی از عجیب‌ترین و در عین حال خطرناک‌ترین ویژگی‌های تابع Ecrecover این است که در برابر امضاهای جعلی، دستکاری شده یا اشتباه، هیچ خطایی صادر نمی‌کند. در برنامه‌نویسی عادی، اگر اطلاعات اشتباه باشد، برنامه متوقف شده و با یک اخطار قرمز رنگ به ما هشدار می‌دهد. اما این تابع در مواجهه با خطاهای محاسباتی، در کمال آرامش یک آدرس صفر (Zero Address - آدرسی مانند 0x000...000 که هیچ‌کس کنترل آن را در اختیار ندارد و توکن‌های ارسال شده به آن برای همیشه می‌سوزند) را به عنوان خروجی تحویل می‌دهد.

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

خطر بازگشت آدرس صفر (Zero Address) | صرافی کیف پول من

بهترین روش‌ها برای رفع آسیب‌پذیری‌ها و نوشتن کدهای امن‌تر

برای جلوگیری از تمام این مشکلات، جامعه‌ی توسعه‌دهندگان اتریوم راهکارهای استاندارد و مطمئنی را ایجاد کرده‌اند. برای نوشتن کدهای امن‌تر، رعایت موارد زیر الزامی است:

  • استفاده از اعداد یکبار مصرف (Nonce): برای جلوگیری از حمله‌ی تکرار، باید به هر پیام یک عدد یکبار مصرف اختصاص دهید. با این کار، وقتی یک امضا برای اولین بار در شبکه‌ی اتریوم استفاده شد، عدد مربوط به آن در قرارداد هوشمند باطل می‌شود و سیستم به هیچ‌کس اجازه‌ی استفاده‌ی مجدد از آن پیام را نمی‌دهد.
  • بررسی شرط آدرس صفر: همیشه و بدون استثنا، برنامه‌نویس باید بعد از فراخوانی تابع Ecrecover یک خط کد شرطی بنویسد تا مطمئن شود آدرس بازیابی شده برابر با آدرس صفر نیست. اگر خروجی آدرس صفر بود، عملیات باید بلافاصله لغو شود.
  • استفاده از کتابخانه‌ی استاندارد: به جای اینکه برنامه‌نویسان مستقیما با کدهای خام و پرخطر تابع Ecrecover کار کنند، بهتر است از کتابخانه‌های آماده و ایمن مانند کتابخانه‌ی شرکت اوپن‌زپلین (OpenZeppelin - یک سازمان معتبر که کدهای امن و استاندارد برای توسعه‌دهندگان قراردادهای هوشمند تولید می‌کند) استفاده کنند. این کتابخانه‌ها به صورت خودکار مشکل تغییرپذیری امضا را مسدود کرده و جلوی خطای آدرس صفر را می‌گیرند تا خیال شما از بابت امنیت پروژه‌ی خود راحت باشد.

جمع‌بندی نهایی کاربرد توابع رمزنگاری در اتریوم

دنیای بلاکچین و قراردادهای هوشمند بدون وجود توابع رمزنگاری (Cryptography - علمی برای مخفی‌سازی و حفظ امنیت اطلاعات به کمک ریاضیات) عملا هیچ تفاوتی با یک پایگاه داده‌ی ساده و ناامن نداشتند. در طول این مقاله متوجه شدیم که امضای دیجیتال چگونه با استفاده از کدهای پیشرفته، جایگزین امضای کاغذی ما در اینترنت نسل جدید شده است و امنیت سرمایه‌ی ما را تضمین می‌کند.

همان‌طور که بررسی کردیم، تابع Ecrecover در شبکه‌ی اتریوم، نقش یک کارآگاه دیجیتال و خستگی‌ناپذیر را بازی می‌کند. این تابع بدون اینکه نیازی به دانستن رمز عبور یا کلید خصوصی شما داشته باشد، تنها با دریافت سه قطعه‌ی ریاضی از پیام امضاشده یعنی پارامترهای v و r و s می‌تواند با قطعیت کامل تشخیص دهد که آیا یک درخواست واقعا از طرف آدرس کیف پول شما صادر شده است یا شخص دیگری قصد کلاهبرداری دارد.

بیایید مهم‌ترین دستاوردهای استفاده از این توابع شگفت‌انگیز را در یک نگاه مرور کنیم:

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

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


سوالات متداول

برچسب‌ها:

دیدگاه‌های کاربران

تاکنون 1 کاربر در مورد این مقاله دیدگاه و تحلیل ثبت کرده‌اند
مرتضی سروی
2 سال قبل
واقعا مقالات مفید و آموزشی بودش ممنون از شما
0
0

افزودن دیدگاه

با ثبت‌نام در صرافی کیف پول من و ارسال تحلیل و نظر در سایت ارز دیجیتال رایگان هدیه بگیرید.
به این مطلب چند امتیاز می‌دهید؟
انتخاب کنید

دنبال آخرین اخبار بازار هستید؟

قیمت لحظه‌ای، رویدادها و تحلیل‌های روزانه را در اتاق خبر کیف پول مدیا دنبال کنید.

رفتن به اتاق خبر

ویدئو رسانه

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