walletcenter

مفهوم کلید خصوصی و عمومی به زبان ساده

قاسم میلاجردی

زمان مورد نیاز برای مطالعه: 6 دقیقه

مفهوم کلید خصوصی و عمومی به زبان ساده

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

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

کلید خصوصی و عمومی و ادرس عمومی

 

مفهوم کلید خصوصی و عمومی به زبان ساده

در دنیای «کریپتوکارنسی‌ها» (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) در اینجا چه نقشی دارند؟ تابع هش نیز قادر است طی یک فرایند برگشت‌ناپذیر، ورودی با اندازه‌ی دلخواه را گرفته و خروجی با طول ثابت تولید کند. در اکثر بلاک چین‌ها برای تولید آدرس‌ها از روی کلیدهای عمومی، از تابع هش رمزنگاری استفاده می‌شود.
تفاوت کلید عمومی و آدرس عمومی

 

نقش ریاضیات در امنیت ارزهای دیجیتال

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

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

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

 

سخن پایانی

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

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