تابع Ecrecover در امضاهای دیجیتال اتریوم چیست و چگونه امنیت این امضاها را تامین میکند؟

در امضاهای دیجیتال اتریوم، تابعی به نام Ecrecover وجود دارد که صحت و یکپارچگی اطلاعات امضا شده را تایید میکند و باعث امنیت بیشتر این امضاها میشود. در این مقاله به بررسی تابع Ecrecover در امضاهای دیجیتال میپردازیم؛ اما قبل از آن باید با امضاهای دیجیتال، الگوریتم امضای دیجیتال مبتنی بر منحنی بیضوی (ECDSA)، استانداردهای امضای دیجیتال و آسیبپذیریهای موجود در این زمینه آشنا میشویم. در ادامه با میهن بلاکچین همراه باشید.
امضای دیجیتال چیست؟
احتمالا پیش آمده که پیامها را با کیف پول خود امضا کنید، اما آیا تاکنون درباره نحوه عملکرد این موضوع فکر کردهاید؟ نحوه عملکرد امضاهای دیجیتال مشابه رمزنگاری نامتقارن است. رمزگذاری نامتقارن (Asymmetric Cryptography) که با نام رمزنگاری کلید عمومی نیز شناخته میشود، پروسهای است که در آن دیتاها با استفاده از یک جفت کلید رمزگذاری و رمزگشایی میشوند.
در امضاهای دیجیتال، بخشی از اطلاعات توسط هش کردن پیام با کلید خصوصی ارسالکننده (و مشخصا هش کردن الگوریتم) امضا میشود. این موضوع، یک هش دایجست (Hash Digest یا همان اثر انگشت هش) تولید میکند که فقط با استفاده از یکی از کلیدهای موجود در جفت کلید ارسالکننده، میتوان مجددا آن را ایجاد کرد. سپس دریافتکننده برای هش کردن پیام و اعلام اینکه با هش دایجست دریافتی مطابق است، از کلید عمومی ارسالکننده استفاده میکند. بدین ترتیب، دریافتکننده میتواند مطمئن شود که ارسالکننده همان فردی بود که پیام را امضا کرده است و پیام مذکور تغییر نکرده و دستکاری نشده است.
الگوریتم امضاهای دیجیتال منحنی بیضوی (ECDSA)
اگر تاکنون الگوریتم امضای دیجیتال مبتنی بر منحنی بیضوی (ECDSA) را شنیده باشید، احتمالا میدانید که این الگوریتم یکی از پیچیدهترین و کارآمدترین الگوریتمهای رمزگذاری کلید عمومی است. کلیدهایی که از طریق رمزنگاری منحنی بیضوی ایجاد میشوند، کوچکتر از کلیدهای معمولی هستند که توسط الگوریتمهای امضای دیجیتال به وجود میآیند. با این حال، این کلیدها میتوانند سطح امنیت یکسان و مشابه با سایر الگوریتمهای امضای دیجیتال را ارائه دهند.
تابع Ecrecover در امضاهای دیجیتال چیست؟
قراردادهای هوشمند بر بستر شبکه اتریوم، از طریق تابع Ecrecover به الگوریتم تایید امضای ECDSA دسترسی دارند. این روش، صحت و یکپارچگی هرگونه اطلاعات امضا شده را تایید میکند و با استفاده از طرح VRS و هش امضا، آدرس متناظر با امضاکننده را بازیابی میکند. VRS مخفف Verifiable Ring Signature و به معنی امضای حلقه قابل تایید است. این طرح به کاربران اجازه میدهد که در یک گروه، بهصورت ناشناس به امضای تراکنشها بپردازند؛ بهطوری که میتواند به تاییدکننده ثابت کند که او امضاکننده پیام است.
امضاها موارد جالب توجهی هستند؛ زیرا کاربران میتوانند بدون ثبت تراکنش، موارد مذکور خود را تایید کنند. این ویژگی بسیار مفید است، زیرا میتواند تجربه کاربری را بهبود ببخشد و با استفاده از متاتراکنشها (Meta-transactions) یا ERC20-Permit (یا مجوز ERC-20 که در ادامه بیشتر درباره آن صحبت خواهیم کرد)، به کاهش هزینه گس بپردازند.
با این حال، طبق معمول تجربه کاربری بهتر و آسودگی کاربران، معمولا به بهای از دست رفتن امنیت آنها منجر میشود. به همین دلیل، پیروی از استانداردهای توسعهیافته توسط جامعه و انجام بهترین اقدامات هنگام تعامل با امضاهای دیجیتال، از اهمیت ویژهای برخوردار است.
استانداردهای امضای دیجیتال
در زمینه استاندارد امضاهای دیجیتال با ۳ نوع اصلی مواجه هستیم که میتوان از آنها برای امضای اطلاعات با کلید اتریوم استفاده کنیم. این ۳ نوع استاندارد عبارتند از:
- استاندارد Eth_sign: سادهترین، قدرتمندترین و البته خطرناکترین روش برای امضای پیامها است. این روش به منظور امضای اطلاعات دلخواه استفاده میشود. بدین ترتیب، کاربران میتوانند اطلاعاتی را امضا کنند که انجام تراکنشهای آتی بدون تاییدیههای اضافی را امکانپذیر میسازند. این ویژگی بسیار خطرناک است؛ زیرا ممکن است کاربران بدون آنکه بدانند، تراکنشهای «بدون محافظ» را امضا کنند. به همین دلیل، استفاده از استاندارد eth_sign کاهش یافته است.
- استاندارد Personal_sign: پروپوزال EIP-191 فرمت جدیدی برای امضای اطلاعات و اطمینان از معتبر بودن تراکنش معرفی کرده است. به منظور پیادهسازی این روش در گث (Geth) (محبوبترین کلاینت اتریوم برای اتصال کامپیوتر به بلاکچین این شبکه)، ابتدای تمام اطلاعات امضا شده، عبارت “\x19Ethereum Signed Message:\n” + len(message) اضافه میشود؛ بنابراین استفاده از این امضاها بهعنوان تراکنشهای معتبر، غیرممکن میشود.
- استاندارد signTypedData_v4: پروپوزال EIP-712 به منظور استانداردسازی استفاده از امضا در اتریوم معرفی شد و در حال حاضر به طور گسترده استفاده میشود. این روش به عنوان استانداردی در نظر گرفته میشود که به توسعهدهندگان کمک میکند که از مسائل و مشکلات امنیتی رایج در خصوص تعامل با امضاها اجتناب کنند.
پروپوزال EIP-712 و استفاده از آن در تابع Ecrecover
هدف اصلی EIP-712 اطمینان از این موضوع است که کاربران بدانند چه چیزی را امضا میکنند. این EIP، مفاد و مولفههای شفاف شبکه و آدرس قرارداد را ارائه میدهد. نهایتا، این EIP در صدد اطمینان از این موضوع است، که هر امضا فقط توسط قرارداد مدنظر قابل استفاده باشد.
این الزامات و پیشنیازها با ترکیب هش Domain Separator و هش Typed Structed Data و استفاده آنها در تابع ecrecover به دست میآیند.
- هش Domain Separator: هش تقکیککننده دامنه یا Domain Separator در واقع هشی است که از اطلاعات دامنه محاسبه و پردازش میشود و به منظور جلوگیری از استفاده و قابلیت ادامه دادن یک امضا در سایر برنامههای غیرمتمرکز استفاده میشود.
- هش Typed Structed Data: اطلاعاتی که باید امضا شوند، با استفاده از ساختارها و انواع اصلی سالیدیتی مشخص و تعیین میشوند.
متاتراکنشها
متاتراکنش (Meta-transaction) روشی برای جداسازی افرادی است که هزینه گس تراکنش را میپردازند و افرادی که از اجرای تراکنش سود کسب میکنند.
کاربران به امضای متاتراکنش میپردازند و سپس آن را به اپراتور ارسال میکنند (توجه کنید که از آنجایی که هیچگونه تعاملی با بلاکچین صورت نمیگیرد، به گس برای امضا نیازی وجود ندارد). سپس اپراتور متاتراکنش امضا شده را دریافت میکند، آن را در بلاکچین ثبت کرده و کارمزد تراکنش معمولی را پرداخت میکند.
مجوز ERC-20 یا پروپوزال EIP-2612
استاندارد ERC-20 به دو تراکنش متفاوت نیاز دارد، تا با استفاده از قرارداد هوشمند شخص ثالث، توکنهای ERC-20 را از حساب تحت مالکیت خارجی (Externally Owned Account یا EOA) انتقال دهد.
ابتدا، EOA باید تراکنش ()ERC20.approve را اجرا کند تا قرارداد هوشمند شخص ثالث را در فهرست مجاز قرار دهد. سپس EOA باید این تابع را از قرارداد هوشمند شخص ثالثی فراخوانی کند که تابع ()ERC20.transferFrom را فعال میکند. بدین ترتیب، توکنها انتقال مییابند.
با پیادهسازی EIP-2612 که به آن مجوز ERC20 نیز گفته میشود، این فرایند با استفاده از تایید امضاهای دیجیتال سادهتر میشود. با استفاده از مجوز ERC-20، کاربران میتوانند فرایند امضای مقدار مدنظر از کیف پول خود را امضا کنند و اپراتور میتواند بقیه فرایند را به عهده بگیرد.
آسیبپذیریها و بهترین اقدامات در مقابله با آنها
- حمله پاسخ به امضا یا Signature Reply: از یک امضا میتوان به دفعات استفاده کرد تا تابع مدنظر را اجرا کند، مگر آنکه اقدامات پیشگیرانه صورت بگیرد. به منظور جلوگیری از این حملهها و اکسپلویتها، استفاده از نانسها (Nonce) به شدت توصیه میشود.
- انعطافپذیری یا نرمی امضا (Signature Malleability): به دلیل ساختار متقارن منحنیهای بیضوی، برای هر مجموعه از v,r,s مجموعه دیگری از v,r,s وجود دارد که همان ارتباط را یکدیگر دارند. این موضوع به ایجاد دو امضای معتبر منجر میشود و به عوامل مخرب و هکرها امکان میدهد که بدون هدف قرار دادن کلید خصوصی، امضای معتبر را به دست آورند. آسانترین روش برای برطرف کردن این آسیبپذیری، استفاده از کتابخانه ECDS OpenZeppelin است.
سوالات متداول (FAQ)
تابعی است که صحت و یکپارچگی اطلاعات امضاشده را تایید کرده و امنیت بیشتری برای آنها فراهم میکند.
استاندارد Eth_sign، استاندارد Personal_sign و استاندارد signTypedData_v4 سه نوع اصلی استانداردهای امضای دیجیتال هستند که از آنها برای امضای اطلاعات با کلید اتریوم استفاده میشود.
نتیجهگیری
در این مقاله به بررسی مفهوم امضای دیجیتال، تابع ecrecover در امضاهای دیجیتال و انواع مختلف استانداردهای امضا در شبکه اتریوم و نقاط آسیبپذیر آنها پرداختیم. همچنین باید بیان کنیم که این امضاها زمینه جلوگیری از بروز اقدامات خلاف قانون را به طور کامل فراهم کرده است. نظر شما در مورد این کاربرد رمزنگاری و امنیت آن چیست؟ آیا امضای دیجیتال به حداکثر کاربرد خود خواهد رسید؟