مفهوم مالکیت در دنیای بلاک چین با آنچه در دنیای واقعی در ذهن داریم متفاوت است. ما در دنیای واقعی از چیزهایی مثل کلید و امضا، برای اثبات مالکیت خود نسبت به یک کالا یا دارایی استفاده میکنیم و هر کسی که آنها را در اختیار داشته باشد، مالکیت کالا یا اجازه ورود به یک محل خاص را خواهد داشت. اما در دنیای بلاک چین و کریپتو، مفهوم مالکیت با دانستن یا آگاهی ترکیب شده است. کلید خصوصی و عمومی پارامترهایی هستند که در این فضا برای اثبات مالکیت مورد استفاده قرار میگیرند.
ما در وبلاگ ولت سنتر در تلاش هستیم تا علاوه بر معرفی کیف پولهای سختافزاری، اطلاعات کاربردی و مرتبط با امنیت کاربرها در استفاده از کیف پولها و همچنین پلتفرمهای غیرمتمرکز این حوزه را به بیان ساده ارائه دهیم. هر چند در اکثر مقالات ولت سنتر، توضیحاتی در خصوص کلیدهای خصوصی و عمومی بیان شده است اما لازم دانستیم تا در این مقاله به طور جامع به معرفی مفهوم کلید خصوصی و عمومی به زبان ساده اختصاص دهیم. تا پایان همراه ما باشید.
مفهوم کلید خصوصی و عمومی
در دنیای «کریپتوکارنسیها» (Cryptocurrencies) برای اثبات مالکیت داراییها، نمیتوان از چیزهایی مثل امضای فیزیکی روی کاغذ یا رسیدهای کاغذی استفاده کرد. شبکه ارزهای دیجیتال با استفاده از «فناوری رمزنگاری» (Cryptography) ساخته شده و کار میکند و به همین دلیل از واژه Crypto به معنی رمزنگاری در نامگذاری آنها استفاده شده است. در چنین فضایی، برنامهنویسها و توسعهدهندهها برای مدیریت مالکیت داراییها، از راهکاری استفاده میکنند که مفهوم «کلید خصوصی و عمومی» (Private and Public Key) را به وجود آورده است.
در بلاک چینها برای نگهداری داراییها از مفهومی به نام «آدرس» (Address) استفاده میشود. هر آدرس میتواند مقداری کوین یا توکن در خود نگهداری کند، به همین دلیل به این آدرسها، کیف پول هم گفته میشود و از آنجایی که مثل دنیای واقعی، آدرسها را میتوان در اختیار همه قرار داد، به آنها «کلید عمومی» (Public Key) هم میگوییم. در بخشهای بعدی بیشتر درباره کلید عمومی صحبت میکنیم.
موضوعی که مالکیت واقعی یک فرد را نسبت به رمزارزهای درون یک آدرس کیف پول مشخص میکند، کلید خصوصی است. در دنیای کریپتو، در اختیار داشتن یا دانستن کلید خصوصی تنها چیزی است که برای خرج کردن داراییها ضروری است. برای مثال شبکه بیت کوین، اجازه خرج کردن بیت کوینهای یک آدرس خاص را به هر کسی که کلید خصوصی منحصربهفرد آن را بداند، خواهد داد. به همین دلیل است که کاربرها باید در نگهداری از آن نهایت دقت را داشته باشند.
احتمالا بارها شنیدهاید که میگویند: «Knowledge is power» (یعنی دانش، قدرت است). مفهوم این جمله به خوبی در دنیای کریپتو جلوه پیدا میکند. زیرا دانستن کلید خصوصی، تمام اختیارات یک حساب را با خود به همراه میآورد. همچنین یک جمله قدیمی در این حوزه وجود دارد که میگوید: «Not your keys, Not your coins» (یعنی اگر کلید خصوصی اکانت خود را در اختیار ندارید، در حقیقت هیچ چیزی ندارید).
کلید خصوصی چیست و چطور ساخته میشود؟
اگر بخواهیم کلید خصوصی را به سادهترین شکل ممکن تعریف کنیم، باید گفت که این کلید چیزی نیست جز یک عدد بسیار بسیار بزرگ. بله، به همین سادگی. اگر بخواهیم ماجرا را کمی پیچیدهتر کنیم، از نظر ریاضی، کلید خصوصی یک رشته از «اعداد تصادفی مثبت» (random positive integer) است. در واقع کلید خصوصی یک رشته عدد تصادفی رمزنگاریشده است که با کمک یک تولیدکننده اعداد تصادفی یا RNG در یک محدوده تعریفشده تولید میشود.
طبیعی است که این مراحل با استفاده از قدرت پردازش کامپیوتر انجام میشود. البته امروزه از مدلهای خاصی از تولیدکننده اعداد تصادفی استفاده میشود که این عملیات را در واقع به صورت نیمه تصادفی انجام میدهند. به همین دلیل به آنها PRNG گفته میشود و حرف P اشاره به Pseudorandom یا همان نیمهتصادفی بودن دارد.
اگر مفهوم «انتروپی» (Entropy) را از درس شیمی دوران دبیرستان بهخاطر داشته باشید، طرز کار تولیدکنندههای اعداد تصادفی را بهتر درک میکنید. انتروپی به معنی بینظمی ذرات است و در کل مفهوم پیچیدهای دارد؛ اما نقش آن در اینجا خیلی ساده است. یک PRNG (یا همان تولیدکننده اعداد نیمهتصادفی) به کمک یک منبع انتروپی مناسب، قادر است اعدادی تولید کند که امکان حدس زدن تصادفی آنها بسیار بسیار کم است. در حقیقت یک رنج یا محدوده برای PRNG تعریف میکنند و اعداد تصادفی را به عنوان خروجی از آن تحویل میگیرند که در آینده در نقش کلید خصوصی از آنها استفاده خواهد شد.
برای شفافتر شدن موضوع، بیایید نگاهی به مدل ساخت کلیدهای خصوصی در شبکه بیت کوین و اتریوم بیندازیم. گفتیم که یک تولید کننده اعداد نیمهتصادفی یا PRNG قادر است این اعداد را در یک محدوده تعریفشده ایجاد کند. بیت کوین و اتریوم (و بسیاری از شبکههای بلاک چینی) از محدوده ۲۵۶ بیتی استفاده میکنند. تصور کنید ۲۵۶ خانه حافظه خالی وجود دارد که هر کدام میتوانند با مقدار صفر یا ۱ پر شوند. (در دنیای دیجیتال، همه چیز صفر و یک است).
اگر کمی حساب و کتاب کنیم مشخص میشود که ۲۲۵۶ ( ۲ به توان ۲۵۶) حالت مختلف برای این عدد وجود خواهد داشت. اگر این عدد را در مبنای قابل درک برای انسانها یعنی مبنای۱۰ (یعنی با رقمهای ۰ تا ۹) بنویسیم، به یک عدد بسیار بسیار عظیم ۷۸ رقمی میرسیم.
تمام مراحل گفتهشده به خاطر این است که احتمال حدس زدن تصادفی این عدد (که در نهایت همان کلید خصوصی ماست)، نزدیک به صفر و ناممکن باشد. قبلاً گفتیم که کلید خصوصی چه جایگاهی دارد و داشتن آن چه قدرتی به همراه دارد. پس طبیعی است که بالاترین ضریب امنیتی در ساخت آن در نظر گرفته شود. بد نیست بدانید که گفته میشود آن عدد ۷۸ رقمی، از تعداد اتمهای تمام کیهان هم بیشتر است. یعنی احتمال اینکه یک نفر بتواند کلید خصوصی بیت کوین ما را درست حدس بزند از اینکه بتواند یک اتم خاص را در تمام کیهان شناسایی کند، کمتر است.
به طور کلی میتوان گفت کلید خصوصی یک رشته عددی خاص است که برای اثبات مالکیت یک کیف پول مورد استفاده قرار میگیرد. کلید خصوصی با ایجاد یک ساختار امنیتی بسیار قوی برای کاربر از دسترسی افراد غیرمجاز به کیف پول افراد جلوگیری میکند. در واقع در ارزهای دیجیتال از کلیدهای خصوصی علاوه بر اثبات مالکیت، برای امضای تراکنشها نیز استفاده میشود.
کلید عمومی و نحوه ارتباط آن با کلید خصوصی
تا اینجا، بیشتر در مورد کلید خصوصی صحبت کردیم؛ اما کلید عمومی چطور ساخته میشود و چه کاربردی دارد؟ بارها گفتیم که نگهداری از کلید خصوصی اهمیت زیادی دارد، آیا این نکات را در مورد کلید عمومی هم باید رعایت کنیم؟
اگر هیج دانشی از دنیای کریپتو نداشته باشیم هم به سادگی میتوان از نحوه نامگذاری کلیدها متوجه شد که کلید خصوصی، فقط برای یک نفر است و کلید عمومی، برای همه! یعنی اگر بخواهیم برای فردی مقداری رمزارز مثل بیت کوین ارسال کنیم، باید کلید عمومی یا همان آدرس کیف پول او را داشته باشیم و در ادامه برای اینکه شبکه به ما اجازه خرج کردن بیت کوینهایمان را بدهد، باید از کلید خصوصی حساب خودمان استفاده کنیم تا بتوانیم این تراکنش را ارسال کنیم.
گفتیم که داراییهای دیجیتال در فضاهایی از بلاک چین به نام آدرس ذخیره میشوند که ماهیت عمومی دارند و به آنها کلید عمومی نیز گفته میشود. البته بد نیست بدانیم که آدرسهای عمومی دقیقاً همان کلیدهای عمومی نیستند؛ بلکه در واقع این آدرسها از روی کلید عمومی ساخته میشوند و کلید عمومی هم از روی کلید خصوصی ایجاد میشود. اگر ماجرا کمی پیچیده شد، نگران نباشید، در ادامه موضوع شفافتر میشود.
هر آدرس بلاک چین توسط یک کلید عمومی ساخته میشود و این کلید عمومی نیز از روی یک کلید خصوصی ایجاد میشود. در حقیقت بین این سه فاکتور، یک رابطه ریاضی «یکطرفه» (Unidirectional) و برگشتناپذیر وجود دارد؛ به این معنی که از کلید خصوصی میتوان به کلید عمومی و از کلید عمومی به آدرس بلاک چین رسید، ولی هیچگاه نمیتوان از روی آدرس بلاک چین، کلید خصوصی آن را حساب کرد.
فرآیند ساخت کلید عمومی از روی کلید خصوصی توسط توابع خاصی به نام «Cryptographic Trapdoor Functions» انجام میشود. Trapdoorها توابعی برگشتناپذیر هستند و با دریافت یک ورودی، قادرند یک خروجی منحصربهفرد تولید کنند، به طوری که امکان برعکس کردن این فرآیند وجود نداشته باشد. یعنی نمیتوان از روی خروجی، ورودی اولیه را پیدا کرد. درست مثل اینکه از روی مواد اولیه میتوان غذا پخت، ولی از غذای پخته شده نمیتوان به مواد اولیه آن رسید!
در هر بلاک چین ممکن است برای انجام این محاسبات از توابع برگشتناپذیر مختلفی استفاده شود. بیشتر بلاک چینهای معروف از سیستمهای «Elliptic Curve-base» برای تولید کلیدهای عمومی استفاده میکنند. در هر صورت، نکتهای مهم این است که کلیه این سیستمها یک نتیجه قطعی را تولید میکنند و همواره به ازای هر کلید خصوصی، یک کلید عمومی منحصربهفرد تولید میشود و خروجی تولید شده تا زمانیکه ورودی تغییر نکند، ثابت خواهد بود.
پس متوجه شدیم که کلید خصوصی توسط تولیدکننده اعداد نیمهتصادفی تولید میشود و کلید عمومی با استفاده از توابع یکطرفه Trapdoor از روی کلید خصوصی ساخته میشود. پس «توابع هش» (Hash functions) در اینجا چه نقشی دارند؟ تابع هش نیز قادر است طی یک فرآیند برگشتناپذیر، ورودی با اندازه دلخواه را گرفته و خروجی با طول ثابت تولید کند. در اکثر بلاک چینها برای تولید آدرسها از روی کلیدهای عمومی، از تابع هش رمزنگاری استفاده میشود.
نقش ریاضیات در امنیت ارزهای دیجیتال
حالا که با مفهوم و طرز ساخت کلید خصوصی و عمومی و همچنین آدرسهای بلاک چین آشنا شدیم، بهتر میتوانیم نقش ریاضیات و رمزنگاری را در طراحی پروژههای کریپتویی و امنیت داراییهای دیجیتال درک کنیم. بهتر است اینطور بگوییم که اگر ما مسئولیت خود را در نگهداری صحیح از کلیدهای خصوصی درست انجام دهیم، بلاک چین هم به خوبی قادر است مسئولیت خود را انجام داده و امنیت ما را تأمین کند.
تا امروز هیچ کس نتوانسته از روی یک کلید عمومی، کلید خصوصی آن را به درستی حدس بزند و به داراییهای آن دسترسی پیدا کند. البته چنین کاری غیرممکن نیست ولی برای انجام آن باید هزینه و انرژی فراوانی صرف شود و شاید چند هزار سال طول بکشد. به نظر شما هکرها چقدر حاضرند برای چنین کاری هزینه کنند؟
بحث کلید خصوصی و عمومی به اینجا ختم نمیشود و میتوان ساعتها در مورد آن صحبت کرد. مطلب را بیشتر از این طولانی نکرده اما این قول را میدهیم که در مقالات آینده، به سایر ابعاد این بحث و همچنین موضوعاتی مثل چند امضایی، ارتباط کلمات بازیابی با کلیدهای خصوصی و عمومی، انواع الگوریتمهای یکطرفه و غیره بپردازیم.
سخن پایانی
در این مقاله به تشریح موضوع جذاب کلید خصوصی و عمومی پرداختیم و با مفهوم، عملکرد و طرز ساخت آنها آشنا شدیم. این مفاهیم در حقیقت ابزاری برای مدیریت مالکیت در فضای غیرمتمرکز بلاک چین هستند و توسعهدهندهها با استفاده از آنها میتوانند امنیت داراییهای کاربرها را تامین و کنترل آنها را به دست خود کاربرها بسپارند.
ارزهای دیجیتال در فضایی از بلاک چین به نام آدرس عمومی ذخیره میشوند. این آدرس از روی کلید عمومی ساخته شده و خود کلید عمومی نیز با استفاده از کلید خصوصی تولید میشود. کلیه این مراحل با استفاده از توابع ریاضی برگشتناپذیر انجام میشود. به این ترتیب بهراحتی میتوان از روی کلید خصوصی، آدرسهای بلاکچین را تولید کرد ولی از روی یک آدرس عمومی، هیچگاه نمیتوان کلید خصوصی منحصربه فرد آن را پیدا کرد. از آنجایی که دارنده کلید خصوصی مالک داراییهای کیف پول شناخته میشود، تنها فردی که آن را در اختیار داشته باشد، اجازه خرج کردن داراییها را خواهد داشت.
در این مقاله از وبسایت ولت سنتر، سعی کردیم شما را با زبانی ساده و بهصورت کامل با کلید خصوصی و کلید عمومی آشنا کنیم تا با درک بهتری از این موضوع کنترل امنیت رمزارزهای خود را در دست خود بگیرید. اگر تجربهای در راستای استفاده از کلید خصوصی و عمومی کیف پول خود دارید، آن را با همراهان ولت سنتر به اشتراک بگذارید.