امضاها، ابزاری برای احراز هویت در وب3

زمان تعامل با یک برنامه (اَپ) در فضای وب3، ممکنه با درخواست امضایی مشابه تصویر زیر، در ولت‌تون روبرو بشید. این مقاله توضیح میده که این امضا چیه و چطور برای احراز هویت مورد استفاده قرار می‌گیره؟

نمونه‌ای از درخواست امضا در ولت متامسک توسط پلتفرم اوپن‌سی
نمونه‌ای از درخواست امضا در ولت متامسک توسط پلتفرم اوپن‌سی

امضا چیه و چه چیزی رو احراز می‌کنه؟

امضاهای رمزنگاری‌شده ثابت می‌کنن که امضاکننده، کلید خصوصیِ یک آدرس عمومی رو در اختیار داره. یک آدرس عمومی در بلاکچین اتریوم، دارای 42 کاراکتر هستش که با 0x شروع میشه. مثل آدرس زیر 0x88c78f158cac85f17ecfc063259543c5dc345ef3

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

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

مزایای استفاده از امضا برای احراز هویت

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

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

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

نحوه استفاده از امضاها در اپ‌های هیبریدی

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

به طور مثال، برای تغییر جزییات پروفایل در اوپن‌سی، کاربر باید احراز هویت کنه از طریق یک امضا، تا ثابت کنه کنترل این آدرس در اختیارشه

نمونه‌ای از درخواست امضای ارسالی اوپن‌سی برای ثبت تغییرات ایجاد شده در پروفایل توسط کاربر
نمونه‌ای از درخواست امضای ارسالی اوپن‌سی برای ثبت تغییرات ایجاد شده در پروفایل توسط کاربر

برای برنامه‌هایی که از احراز هویت امضایی استفاده می‌کنن، مهمه که اجازه ندن از یک امضا دو بار استفاده بشه. به همین دلیله که پیام‌هایی که همراه امضاها نمایش داده میشه متفاوت هستن و اغلب شامل یک nonce می‌شن

نحوه تولید و تایید امضاها در اتراسکن

برای ساین یا تایید یک امضا، در حال حاضر می‌تونین از سایت زیر استفاده کنین

Etherscan's Verified Signature tool

نمونه‌ای از تولید امضا در اکسپلورر اتراسکن
نمونه‌ای از تولید امضا در اکسپلورر اتراسکن

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

نمونه‌ای از پیام نوشته شده برای تولید یک امضا
نمونه‌ای از پیام نوشته شده برای تولید یک امضا

برای تأیید اینکه این امضا از طرف صاحب کیف پول بوده، شخص دیگه‌ای می‌تونه هش امضا رو به همراه آدرس و پیام برای تأیید وارد کنه

هش تولید شده طی فرآیند تولید امضا
هش تولید شده طی فرآیند تولید امضا

برای درخواست امضا در برنامه‌های وب3 ایجاد شده توسط خودتون، می‌تونین از کتابخونه‌ای مثل web3.js در قسمت فرانت‌اند استفاده کنین. قطعه کد زیر نحوه ایجاد یک signatureHash رو با استفاده از روش web3.js نشون می‌ده؛ بعدش هم نمونه‌ای از ارسال اون به هر API تأیید امضا در بک‌اند

const signatureHash = await web3.eth.personal.sign(message, address)
someSignatureVerificationAPI(message, address, signatureHash)

نتیجه‌گیری

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

منبع

https://dev.to/lparvinsmith/signatures-as-authentication-in-web3-3kod