هنگامی که شروع به قدم گذاشتن در دنیای رمزارزها میکنید، یکی از اصطلاحاتی که زیاد با آن مواجه میشوید، «کلیدهای خصوصی و عمومی» است. مهمترین هدف کلیدهای عمومی و خصوصی در حوزه فناوری بلاکچین، اثبات این موضوع است که یک تراکنش واقعا توسط صاحب داراییهای دیجیتال یا صاحب یک کیف پول ایجاد شده است. این مقاله به شما کمک میکند با مفاهیم کلید خصوصی، کلید عمومی، آدرس کیف پول و امضای دیجیتال آشنا شوید.
بیشتر بخوانید: کیف پول ارز دیجیتال چیست؟
هنگام نصب یک کیف پول رمزارزی، یک جفت کلید خصوصی و کلید عمومی به صورت تصادفی تولید میشود که این کلیدها، کدهایی هستند که در تامین امنیت تراکنشها استفاده میشوند. کلید خصوصی یک عدد هگزادسیمال تصادفی است که حق خرج کردن ارزهای دیجیتال را به صاحب آنها اعطا میکند.
وقتی میگوییم فردی «مالک» ارزهای دیجیتال است، آنچه که اساسا این فرد مالک آن میباشد، کلید خصوصی کیف پولی است که اجازه دسترسی به داراییهایی را میدهد که در شبکه بلاکچین ذخیره شده است.
همانطور که از نام این کلید پیداست، این کلید باید خصوصی باقی بماند؛ چرا که به عنوان رمز عبور برای حساب شما عمل میکند و تنها کسی که باید آن را بداند، فقط خود شما هستید. از این کلید برای رمزگذاری یا رمزگشایی پیامها و تولید امضای دیجیتال استفاده میشود. امضای دیجیتال را کمی جلوتر در این مقاله توضیح خواهیم داد.
با استفاده از یک تابع ریاضی، از یک کلید خصوصی، کلید عمومی مرتبط با آن ایجاد میشود. کلید عمومی نیز یک عدد هگزادسیمال است که میتواند به طور عمومی به اشتراک گذاشته شود. درواقع، این کلید، یک کد رمزنگاری است که برای رمزگذاری یا رمزگشایی پیامها و تایید امضای دیجیتال استفاده میشود.
به طور کلی، در شبکههای بلاکچینی به منظور اینکه تراکنشها به صورت امن انجام شود، از سیستم رمزنگاری کلید عمومی (Public-key cryptography یا PKC) استفاده میشود که اغلب به آن رمزنگاری نامتقارن (asymmetric) نیز گفته میشود.
رمزنگاری متقارن (symmetric) و رمزنگاری نامتقارن (asymmetric)، دو نوع اصلی از الگوریتمهای رمزنگاری هستند. در الگوریتمهای متقارن برای رمزنگاری و رمزگشایی اطلاعات، تنها از یک کلید استفاده میشود. در ابتدا رمزنگاری متقارن را بررسی میکنیم تا دلیل به وجود آمدن رمزنگاری نامتقارن را درک کنیم.
فرض کنید آلیس قصد به اشتراکگذاری یک داده حساس و محرمانه به فردی به نام باب را دارد. آلیس از یک برنامه رمزنگاری استفاده میکند تا از این داده مهم با یک رمز عبور که خودش انتخاب میکند، محافظت کند. سپس، او این دادهی رمزنگاری شده را به باب ارسال میکند. اما باب نمیتواند این پیام را باز کند؛ چراکه او رمزعبوری که آلیس استفاده کرده است را نمیداند. به عبارت دیگر، باب کلیدی برای باز کردن این قفل ندارد. از طرف دیگر، حتی اگر باب بتواند این داده را بخواند، نمیتواند مطمئن باشد که این داده از سوی «آلیس» ارسال شده است. در واقع راهی برای تایید صحت اعتبار فرستنده وجود ندارد.
اینجاست که دو مشکل مهم به وجود میآید: چطور آلیس رمزعبور را به طور کاملا امن با باب به اشتراک بگذارد و همچنین چطور مطمئن شود که فرستنده این داده، آلیس بوده و نه شخص دیگری؟
اینها مشکلاتی هستند که رمزنگاری نامتقارن قصد دارد تا حل کند. اجازه بدهید یک مثال قابل لمس برای تفهیم عملکرد آن بزنیم. یک صندوق پستی در یک خیابان را در نظر بگیرید. این صندوق برای هر کسی که موقعیت مکانی آن را بداند، قابل مشاهده است. در واقع، میتوان گفت موقعیت مکانی این صندوق پستی کاملا عمومی و آشکار است و هر کسی که آدرس را بداند، میتواند در این صندوق پستی نامهای را بیندازد. اما تنها صاحب این صندوق پستی کلیدی برای باز کردن آن و خواندن نامهها را دارد.
حال به توضیحات فنی این فرایند رمزنگاری برمیگردیم. با استفاده از رمزنگاری نامتقارن، آلیس و باب، هر دو باید یک جفت کلید در کامپیوترهای خودشان تولید کنند. الگوریتمهای متفاوتی برای تولید کلید خصوصی و کلید عمومی مرتبط با آن وجود دارد. نکته مهم این است که شما میتوانید کلید عمومی خودتان را از کلید خصوصی استخراج کنید، اما نمیتوانید با استفاده از کلید عمومی به کلید خصوصی جفت شده با آن برسید.
کلید خصوصی و کلید عمومی دو کاربرد در سیستم رمزنگاری PKC دارند:
فرستنده، داده مورد نظر را با کلید عمومی گیرنده رمزگذاری میکند و گیرنده تنها با کلید خصوصی خود میتواند این داده را رمزگشایی کند. در مثال صندوق پستی، آدرس این صندوق کلید عمومی خواهد بود که هر کسی قادر است تا در مورد آن بداند. صاحب صندوق پستی، تنها کسی است که کلید خصوصی برای باز کردن صندوق را در اختیار دارد.
حالا اگر آلیس و باب بخواهند از رمزنگاری نامتقارن استفاده کنند تا به طور امن با یکدیگر ارتباط برقرار کنند، این فرایند را با مبادله کلیدهای عمومی خودشان شروع میکنند. باب کلید عمومی خودش را به آلیس و آلیس نیز کلید عمومی خود را به باب میدهد. حال آلیس داده را با استفاده از کلید عمومی باب رمزنگاری میکند و آن را به باب ارسال میکند. اکنون، باب با کلید خصوصی خود داده را باز کرده و آن را میخواند. به دلیل رمزنگاری نامتقارن، تنها باب قادر به رمزگشایی این پیام از سمت آلیس است. قدرت و امنیت این گونه از رمزنگاری بستگی به آلیس و باب دارد که از کلیدهای خصوصی خودشان به خوبی محافظت کنند. اگر یک مهاجم، کلید خصوصی آلیس را سرقت کند، آنگاه میتواند تمام پیامهایی که مخاطب آنها آلیس بوده است را رمزگشایی کند.
امضای دیجیتالی برای حصول اطمینان از این است که پیام موردنظر توسط «فرستنده واقعی» ارسال شده است. در واقع امضای دیجیتالی؛ مهمترین کاربردی است که در بلاکچینها برای تایید صحت تراکنش و هویت تراکنشکننده مورد استفاده قرار میگیرد.
با استفاده از کلید خصوصی، یک تراکنش را امضا میکنید و این امضا ثابت میکند که این تراکنش واقعا توسط شما ایجاد شده است و به عبارتی، شما اجازه دسترسی و ارسال داراییهایی که در بلاکچین ذخیره شده است را به کیف پول دادهاید. در حوزه کریپتوکارنسی، این نوع رمزنگاری کمک میکند تا اطمینان حاصل کنیم تنها صاحب کیف پول میتواند رمزارز موجود در آن را برداشت یا منتقل کند.
در ادامه به مفهوم و نحوه عملکرد امضای دیجیتال در دنیای بلاکچین میپردازیم.
در بلاکچین هنگامی که یک کاربر تراکنش (یا داده) را ارسال میکند، باید به هر نود در سیستم ثابت کند که وی، دقیقا همان کسی است که مجاز به انجام آن تراکنش و انتقال داراییها از یک کیف پول میباشد. همانطور که پیشتر اشاره کردیم، اگر شما کلید خصوصی یک کیف پول را داشته باشید، میتوانید ثابت کنید که مالک داراییهای موجود در آن کیف پول هستید و حق انتقال یا خرج کردن آنها را دارید. به همین دلیل است که همواره به شما توصیه کردهاند که از کلیدهای خصوصی خود به خوبی محافظت کنید.
بنابراین، تنها راه برای شناسایی صاحب هر کیف پول، استفاده از کلید خصوصی است. اما مشکل اینجاست که کلیدهای خصوصی باید به صورت یک راز برای صاحب کیف پول باقی بماند. بنابراین، چگونه میتوانیم ثابت کنیم که کلید خصوصی یک کیف پول را در اختیار داریم، بدون اینکه آن را برای کسی افشا کنیم؟
اینجاست که امضای دیجیتال وارد میشود. امضای دیجیتال؛ یک تکنیک ریاضی است که برای حل مشکل دستکاری و جعل هویت در ارتباطات دیجیتال به خصوص در حوزه بلاکچین استفاده میشود. در حقیقت، هر تراکنش در بلاکچین باید توسط کلید خصوصی صاحب کیف پول امضا شود، تا اعضای شبکه اطمینان حاصل کنند که این تراکنش واقعا توسط یک شخص مجاز ایجاد شده است و نه شخص دیگری. این امضاها حکم اثر انگشت دیجیتالی را دارند که ثابت میکنند مالک واقعی کیف پول اجازه انتقال داراییها را صادر کرده است و بدین ترتیب، سطح بالایی از امنیت را در تراکنشهای مالی در بلاکچین فراهم میکنند.
برای ایجاد یک امضای دیجیتال، یک الگوریتم امضا، تراکنش و کلید خصوصی شما را ترکیب میکند و یک داده به شما ارائه میدهد. این الگوریتم از برخی تابعهای ریاضی استفاده میکند که سبب میشود شما نتوانید از روی امضا، کلید خصوصی را بدست آورید.
امضا → انتقال 0.5 واحد بیت کوین به باب + کلید خصوصی
اکنون ممکن است این سوال برایتان پیش آمده باشد که این امضا چطور میتواند این مساله که این تراکنش توسط شخص مجاز ایجاد شده است را تایید کند؟
در اینجا، کلید عمومی نقش یک «کلید تایید» را ایفا میکند. امضای دیجیتالی به همراه کلید عمومی شخص ارسال کننده، در یک الگوریتم قرار میگیرد تا این امضا رمزگشایی شود. خروجی این الگوریتم همان تراکنش و اطلاعات مربوط به آن است. در واقع، این موضوع که با رمزگشایی امضا به اطلاعات مربوط به تراکنش برسیم، نشان میدهد که شخصی که این امضا را تولید کرده است، همان کسی است که کلید خصوصی کیف پول دسترسی داشته است.
انتقال 0.5 واحد بیت کوین به باب → کلید عمومی + امضا
هر نود برای تایید تراکنش، میتواند به کلید عمومی شما دسترسی داشته باشد. هنگامی که تمامی نودها تراکنش شما را با استفاده از کلید عمومی شما تایید کردند، تراکنش تکمیل میشود.
بنابراین، امضای دیجیتال از دو جهت حائز اهمیت است:
الگوریتمهای زیادی وجود دارد که میتوانند امضای دیجیتال تولید کنند. بیتکوین و اتریوم از الگوریتم امضای دیجیتال منحنی بیضوی (ECDSA) استفاده میکنند. بدون امضای دیجیتال، هیچ کس نمیداند که آیا تراکنش توسط شما ایجاد شده است یا شخص دیگری سعی در جعل آن داشته است.
مراحل زیر، نحوه عملکرد کلید خصوصی، کلید عمومی و امضای دیجیتال در یک بلاکچین را در قالب یک تراکنش فرضی بیان میکند:
برخی از افراد گاها آدرس کیف پول را با کلید عمومی اشتباه میگیرند. آدرس بلاکچین یا کیف پول، نسخه هش شده و کوتاه شده کلید عمومی است. در واقع، به دلیل اینکه کلید عمومی، یک رشتهی بسیار طولانی از کاراکترهای الفبایی و عددی است، با استفاده از یک تابع یک طرفه، از کلید عمومی در کیف پولها، آدرس عمومی تولید میشود. برای مثال، در شبکه اتریوم، آدرس بلاکچین یک عدد هگزادسیمال است که با 0x شروع میشود.
کلیدهای خصوصی میتواند در فرمتهای متفاوتی نمایش داده شوند. یکی از رایج ترین فرمتها، استفاده از یک رشته طولانی از اعداد و کاراکترهای تصادفی است که چندان کاربرپسند نیست؛ چراکه ثبت کردن یا به خاطرسپردن این فرمت از کلید خصوصی بسیار سخت و مستعد خطا است. این امر، سبب شد تا به تدریج یک روش بهتر برای نمایش کلید خصوصی مورد استفاده قرار گیرد: عبارت بازیابی!
امروزه، در بسیاری از کیف پولهای رمزارزی، کلید خصوصی به دنبالهای از کلمات معنیدار تبدیل میشود. بسته به نوع کیف پول، تعداد این کلمات میتواند به عنوان مثال 12، 18 یا 24 عدد باشد که به مجموعهی این کلمات، عبارت یا کلمات بازیابی (Seed Phrase یا Recovery) گفته میشود. این عبارت، به شما امکان بازیابی و دسترسی به تمام سرمایههای موجود در یک بلاکچین را میدهد.
بیشتر بخوانید: نحوهی بازیابی کیف پول ارز دیجیتال
کسی که کلید خصوصی یک کیف پول را داشته باشد، قادر به جابجایی داراییها است؛ چراکه توانایی امضا کردن یک تراکنش را دارد. این امضا توسط کلید عمومی این کیف پول رمزگشایی میشود. میتوان گفت آدرس بلاکچینی از کلید عمومی و این کلید از کلید خصوصی مشتق شده است. در این مقاله سعی کردیم مفهوم و نحوه عملکرد کلید خصوصی، کلید عمومی و امضای دیجیتال و ارتباط آن با دنیای بلاکچین را توضیح دهیم.
من در رشته متالوژی صنعتی تحصیل کردم. از سال 1401 تصمیم گرفتم در رسانه بلاکپست به تولید محتوا در مورد فناوری بلاکچین و صنعت جذاب ارزهای دیجیتال بپردازم. سعی میکنم تا ...