در امضای دیجیتال اتریوم، قابلیتی به نام تابع Ecrecover وجود دارد که صحت و یکپارچگی اطلاعات امضا شده را تایید نموده و این امضاها را ایمن تر می کند. در این مقاله به بررسی تابع Ecrecover در امضای دیجیتال می پردازیم اما قبل از آن باید با امضای دیجیتال، الگوریتم امضای دیجیتال مبتنی بر منحنی بیضوی (ECDSA)، استانداردهای امضای دیجیتال و چالش های این حوزه آشنا شویم. پس برای آشنایی با این تابع و نحوه تاثیرگذاری آن در فرآیند امضای دیجیتال تا انتهای مطلب با ما همراه باشید.
آشنایی با امضای دیجیتال
احتمالاً پیام هایی را با کیف پول خود امضا کرده اید اما آیا تا به حال به نحوه کارکرد آن فکر کرده اید؟ امضای دیجیتال به روشی مشابه رمزنگاری نامتقارن عمل می کند. رمزنگاری نامتقارن به عنوان رمزنگاری کلید عمومی شناخته می شود و فرآیندی است که در آن داده ها با استفاده از یک جفت کلید، رمزگذاری و رمزگشایی می شوند. در امضای دیجیتال، بخشی از اطلاعات با هش کردن پیام با کلید خصوصی فرستنده امضا می شود. این فرآیند یک هش دایجست تولید می کند که می تواند تنها با استفاده از یکی از کلیدهای جفت کلید فرستنده دوباره ایجاد شود. سپس گیرنده از کلید عمومی فرستنده برای هش کردن پیام استفاده می کند و اعلام خواهد کرد که با خلاصه هش دریافتی مطابقت دارد. به این ترتیب، گیرنده می تواند مطمئن شود که فرستنده شخصی است که پیام را امضا کرده نموده و پیام تغییر یا دستکاری نشده است.
الگوریتم امضای دیجیتال منحنی بیضوی (ECDSA)
اگر تا به حال نام الگوریتم امضای دیجیتال مبتنی بر منحنی بیضوی (ECDSA) را شنیده باشید، احتمالاً می دانید که این الگوریتم یکی از پیچیده ترین و کارآمدترین الگوریتم های رمزگذاری کلید عمومی است. کلیدهای تولید شده توسط رمزنگاری منحنی بیضی کوچکتر از کلیدهای معمولی هستند که توسط الگوریتم های امضای دیجیتال تولید می شوند. با این حال، این کلیدها می توانند همان سطح امنیت را با سایر الگوریتم های امضای دیجیتال ارائه دهند.
عملکرد تابع Ecrecover در امضای دیجیتال چیست؟
قراردادهای هوشمند در شبکه اتریوم از طریق تابع Ecrecover به الگوریتم تأیید امضای ECDSA دسترسی دارند. این روش صحت و یکپارچگی هر گونه اطلاعات امضا شده را تأیید می کند و آدرس مربوط به امضا کننده را با استفاده از طرح VRS و هش امضا بازیابی می کند. VRS مخفف Verifiable Ring Signature و به معنای امضای حلقه قابل تایید است. این طرح به کاربران اجازه می دهد تا معاملات را به صورت ناشناس در یک گروه امضا کنند تا بتوانند به تأیید کننده ثابت کنند که امضاکننده پیام هستند.
بررسی استانداردهای امضای دیجیتال
در زمینه امضای دیجیتال استاندارد، با 3 نوع اصلی مواجه هستیم که می توان از آنها برای امضای اطلاعات با کلید اتریوم استفاده کرد. این 3 نوع استاندارد عبارتند از:
- استاندارد Eth_sign: از جمله استانداردهای پرریسک برای امضای دیجیتال محسوب شده که از این روش، برای امضای اطلاعات مورد نظر استفاده می شود. به این ترتیب، کاربران می توانند اطلاعاتی را امضا کنند که امکان تراکنش های آینده را بدون تایید اضافی فراهم می کند. این ویژگی بسیار پرریسک است زیرا کاربران می توانند ناآگاهانه تراکنش های "بدون محافظ" را امضا کنند؛ به همین دلیل استفاده از استاندارد eth_sign کمتر شده است.
- استاندارد Personal_sign: پیشنهاد EIP-191 فرمت جدیدی را برای امضای اطلاعات و اطمینان از اعتبار تراکنش ها معرفی کرد. برای پیاده سازی این روش در Geth محبوب ترین کلاینت اتریوم برای اتصال کامپیوتر به بلاک چین این شبکه، عبارت "\x19Ethereum Signed Message:\n" + len(message) به ابتدای همه علامت ها اضافه می شود. بنابراین استفاده از این امضاها به عنوان معاملات معتبر غیرممکن می شود.
- استاندارد signTypedData_v4: پیشنهاد EIP-721 برای استاندارد کردن استفاده از امضا در اتریوم ایجاد شد که در حال حاضر بسیار کاربردی است. این روش استانداردی در نظر گرفته میشود که به توسعه دهندگان کمک میکند از مسائل امنیتی رایج هنگام تعامل با امضاها اجتناب کنند.
پیشنهاد EIP-712 و استفاده از آن در عملکرد تابع Ecrecover
هدف اصلی EIP-712 این است که اطمینان حاصل شود که کاربران می دانند چه چیزی را امضا می کنند. این EIP محتوای شفاف و اجزای شبکه و قرارداد آدرس را فراهم می کند؛ در نهایت، هدف EIP این است که اطمینان حاصل شود هر امضا فقط توسط قرارداد مورد نظر قابل استفاده است. این الزامات و پیش نیازها با ترکیب هش جداکننده دامنه و هش داده های ساخت یافته تایپ شده و استفاده از آنها در تابع Ecrecover به دست می آید.
- هش جداکننده دامنه: هش جداکننده دامنه در واقع هش است که از اطلاعات دامنه محاسبه و پردازش شده و برای جلوگیری از استفاده و امکان ادامه امضا در سایر برنامه های غیرمتمرکز استفاده می شود.
- داده های ساختاری هش تایپ شده: اطلاعاتی که باید امضا شود با استفاده از ساختارهای اصلی و انواع مقاومت مشخص و تعیین می شود.
متاتراکنش ها
متا تراکنش راهی برای جداسازی افرادی است که هزینه گس تراکنش را پرداخت می کنند و کسانی که از اجرای معامله سود می برند. کاربران متاتراکنش را امضا نموده و سپس آن را برای اپراتور ارسال می کنند. سپس اپراتور متا تراکنش امضا شده را دریافت می نماید، آن را در بلاک چین ثبت می کند و کارمزد تراکنش های عادی را می پردازد.
مجوز ERC-20 یا پیشنهاد EIP-2621
استاندارد ERC-20 به دو تراکنش مختلف برای انتقال توکن های ERC-20 از یک حساب خارجی(EOA) با استفاده از قرارداد هوشمند شخص ثالث نیاز دارد. ابتدا، EOA باید تراکنش ERC-20 را برای قرارداد هوشمند شخص ثالث اجرا کند. سپس EOA باید این تابع را از قرارداد هوشمند شخص ثالث فراخوانی کند که تابع را فعال می کند، به این ترتیب، توکن ها منتقل می شوند. با پیاده سازی EIP-2621 که به عنوان مجوز ERC-20 نیز شناخته می شود، این فرآیند با تأیید امضای دیجیتال ساده می شود. با استفاده از توکن ERC-20، کاربران می توانند مبلغ مورد نیاز را از کیف پول خود امضا کنند و اپراتور می تواند بقیه مراحل را انجام دهد.
آسیبپذیری ها و بهترین روشها برای رفع آنها
حمله پاسخ به امضا: یک امضا می تواند مکرراً برای انجام عملکرد مورد نظر استفاده شود مگر اینکه اقدامات پیشگیرانه انجام شود. برای جلوگیری از این حملات و سوء استفاده ها، استفاده از Nonce اکیداً توصیه می شود.
- انعطاف پذیری امضا: با توجه به ساختار متقارن منحنی های بیضوی، برای هر مجموعه از v,r,s مجموعه دیگری از v,r,s وجود دارد که رابطه مشابهی دارند که منجر به ایجاد دو امضای معتبر می شود و به عوامل مخرب و هکرها اجازه می دهد تا بدون هدف قرار دادن کلید خصوصی، امضای معتبر را به دست آورند. ساده ترین راه برای رفع این آسیب پذیری، استفاده از کتابخانه ECDS OpenZeppelin است.
نظر بدهید