Share Dialog
Share Dialog

امضاهای رمزنگاریشده ثابت میکنن که امضاکننده، کلید خصوصیِ یک آدرس عمومی رو در اختیار داره. یک آدرس عمومی در بلاکچین اتریوم، دارای 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

امضاهای رمزنگاریشده ثابت میکنن که امضاکننده، کلید خصوصیِ یک آدرس عمومی رو در اختیار داره. یک آدرس عمومی در بلاکچین اتریوم، دارای 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
<100 subscribers
<100 subscribers
No comments yet