رمز ۲۱۸مرحلهٔ ایمنی، درس ۱۸ از ۲۵ کیف پول و امنیت
کلید خصوصی چیست و چه فرقی با کلید عمومی دارد
کلید خصوصی چیست و چه نسبتی با کلید عمومی و آدرس کیف پول دارد؛ مسیر یکطرفهٔ ساخت آنها، پیوندشان با عبارت بازیابی و آنچه نباید به کسی داد.
پیشنیاز رمز ۲۰۱ کیف پول ارز دیجیتال چیست و چطور امن نگهش داریم
کلید خصوصی عددی تصادفی و محرمانه است که فقط در اختیار شماست و با آن تراکنش را امضا میکنید؛ کلید عمومی از همین عدد ساخته میشود و هر کسی میتواند آن را ببیند تا درستی امضای شما را بسنجد. آدرس کیف پول هم شکل کوتاهشده و قابلاشتراکی است که از کلید عمومی بهدست میآید. تفاوت اصلی همین است: کلید عمومی و آدرس برای نشاندادناند و کلید خصوصی برای امضاکردن، و هر کس کلید خصوصی را داشته باشد، دارایی را در اختیار دارد.
دو کلید، دو نقش
کیف پولهای ارز دیجیتال بر پایهٔ روشی به نام رمزنگاری کلید عمومی (Public Key Cryptography) کار میکنند. مؤسسهٔ ملی استاندارد و فناوری آمریکا (NIST) در واژهنامهٔ امنیتی خود این روش را سامانهای تعریف میکند که در آن هر کاربر یک کلید خصوصی محرمانه دارد، کلید عمومی از آن ساخته میشود و کلید عمومی آزادانه در اختیار دیگران قرار میگیرد [۱]. در همین تعریف آمده است که یک کلید برای رمزگذاری یا امضای دیجیتال داده به کار میرود و کلید دیگر برای رمزگشایی یا تأیید امضا [۱].
برای درک بهتر، مهر شخصی و نمونهٔ اثر آن را در نظر بگیرید. مهر اصلی را فقط صاحبش نگه میدارد و پای هر سند میزند؛ نمونهٔ اثر مهر را همه میتوانند ببینند و با آن بسنجند که آیا سند واقعاً مهر همان شخص را خورده است یا نه. کلید خصوصی همان مهر اصلی است و کلید عمومی همان نمونهٔ اثر مهر. تفاوت مهم این است که در دنیای واقعی شاید بتوان از روی اثر مهر، مهری جعلی ساخت؛ اما در رمزنگاری کلید عمومی، ساختن کلید خصوصی از روی کلید عمومی با دانش و توان محاسباتی امروز عملاً شدنی نیست.
در بیتکوین و اتریوم، کاربرد اصلی این دو کلید امضاکردن است، نه پنهانکردن محتوا. تراکنشها روی بلاکچین برای همه قابلدیدناند؛ آنچه کلید خصوصی ثابت میکند این است که دستور جابهجایی دارایی از سوی صاحب واقعی آن صادر شده است؛ کیف پول هم در واقع کلیدها را نگه میدارد، نه خود دارایی را. اگر این نکته هنوز برایتان تازه است، پیش از ادامه کیف پول ارز دیجیتال چیست و چطور امن نگهش داریم را بخوانید.
کلید خصوصی؛ امضای شما
کلید خصوصی در ظاهر چیز پیچیدهای نیست: یک عدد بسیار بزرگ است. طبق ویکی بیتکوین، کلید خصوصی بیتکوین یک عدد تصادفی ۲۵۶ بیتی است که برابر با ۳۲ بایت یا ۶۴ کاراکتر هگزادسیمال است [۲]. هگزادسیمال یعنی نوشتن عدد با شانزده نماد، یعنی رقمهای صفر تا نه و حروف A تا F. همین منبع توضیح میدهد که هر عدد ۲۵۶ بیتی کلید معتبری نیست و فقط اعدادی پذیرفته میشوند که در بازهٔ مشخصی قرار بگیرند [۲]. در اتریوم هم وضع مشابه است و مستندات رسمی ethereum.org میگوید کلید خصوصی از ۶۴ کاراکتر هگزادسیمال تشکیل شده است [۳].
ارزش امنیتی کلید خصوصی از تصادفیبودن آن میآید. تعداد عددهای ممکن در این بازه آنقدر زیاد است که حدسزدن کلید دیگران با آزمودن یکییکی عددها راه عملی نیست. به همین دلیل کلید خصوصی را خود نرمافزار کیف پول با مولد تصادفی میسازد و شما نباید آن را از روی عبارتی دلخواه، تاریخ تولد یا جملهای بهیادماندنی بسازید؛ عددی که انسان «انتخاب» میکند، دیگر تصادفی نیست و حدسزدنش بسیار آسانتر است.
هر بار که دارایی را از کیف پول خود میفرستید، نرمافزار کیف پول با کلید خصوصی یک امضای دیجیتال برای همان تراکنش میسازد. ethereum.org صریحاً میگوید برای امضای تراکنش به کلید خصوصی نیاز است [۳]. این امضا به همان تراکنش مشخص گره خورده است؛ یعنی اگر کسی پس از امضا مقصد یا مقدار را تغییر دهد، امضا دیگر معتبر نیست و شبکه تراکنش را نمیپذیرد. در بیتکوین این امضا با الگوریتم امضای دیجیتال منحنی بیضوی (ECDSA) و روی منحنیای به نام secp۲۵۶k۱ ساخته میشود [۴].
نکتهٔ مهم برای شما این است که امضا در دستگاه خودتان ساخته میشود و خود کلید خصوصی هیچوقت همراه تراکنش به شبکه فرستاده نمیشود. شبکه فقط امضا و کلید عمومی را میبیند و با آنها درستی امضا را میسنجد. پس هیچ سرویس مشروعی برای «فعالسازی»، «همگامسازی» یا «تأیید» کیف پول به کلید خصوصی شما نیاز ندارد.
درخواست کلید یعنی دام
اگر سایت، اپلیکیشن، پیام یا فردی از شما خواست کلید خصوصی یا عبارت بازیابی را وارد کنید تا کیف پول «تأیید» یا «بازگشایی» شود، این درخواست را نشانهٔ کلاهبرداری بدانید. هر کس کلید خصوصی را داشته باشد میتواند بدون اجازهٔ شما تراکنش امضا کند و تراکنش تأییدشده روی بلاکچین برگشتپذیر نیست. نشانههای رایج این دامها در تشخیص ولت مشکوک یا فیشینگ آمده است.
کلید عمومی و آدرس
کلید عمومی از کلید خصوصی محاسبه میشود. در اتریوم، طبق مستندات ethereum.org، کلید عمومی با الگوریتم امضای دیجیتال منحنی بیضوی (ECDSA) از کلید خصوصی ساخته میشود [۳]. در بیتکوین هم همین خانواده از رمزنگاری به کار میرود؛ به توضیح River Financial، منحنی بیضوی secp۲۵۶k۱ پایهٔ رمزنگاری کلید عمومی بیتکوین است و این شبکه آن را همراه با ECDSA به کار میبرد [۴].
آدرس کیف پول، با اینکه اغلب با کلید عمومی یکی گرفته میشود، چیز دیگری است: آدرس از کلید عمومی مشتق میشود و معمولاً کوتاهتر و برای جابهجایی مناسبتر است. در اتریوم، آدرس حساب از ۲۰ بایت پایانی هش Keccak-۲۵۶ کلید عمومی بهدست میآید و پیشوند «۰x» به ابتدای آن افزوده میشود [۳]. هش تابعی است که از هر ورودی، خروجیای با طول ثابت میسازد و از روی خروجی نمیتوان ورودی را بازسازی کرد؛ برای آشنایی بیشتر، هش در بلاکچین و نقش اثر انگشت دادهها را ببینید.
در بیتکوین، شکل آدرس به نوع آن بستگی دارد. کتاب «تسلط بر بیتکوین» (Mastering Bitcoin) نوشتهٔ آندریاس آنتونوپولوس توضیح میدهد که در شبکهٔ اصلی بیتکوین، آدرسهای قدیمی از نوع P۲PKH با «۱» و آدرسهای P۲SH با «۳» شروع میشوند و هر دو با کدگذاری Base۵۸Check ساخته میشوند [۵]. این کدگذاری از ۵۸ نویسه استفاده میکند، نویسههای گیجکنندهای مثل ۰، O، I و l را کنار میگذارد و یک چکسام داخلی هم برای تشخیص خطا دارد [۵]. قالبهای دیگری هم برای آدرس وجود دارد، اما در همهٔ آنها آدرس نتیجهٔ محاسبه روی کلیدهاست، نه چیزی جدا از آنها.
چکسام جلوی خطای تایپی را میگیرد، نه کلاهبردار را: آدرسی که یک بدافزار در حافظهٔ کپی جایگزین میکند، آدرسی کاملاً معتبر است؛ پس مقایسهٔ دقیق آدرس مقصد همچنان بر عهدهٔ شماست.
آدرس مثل شمارهٔ حساب است
آدرس را مثل شمارهٔ حساب در نظر بگیرید: دادنش به دیگران برای دریافت دارایی لازم است و از آن نمیتوان برای برداشت استفاده کرد. ولی چون همهٔ تراکنشهای یک آدرس روی بلاکچین عمومی دیده میشود، هر کس آدرس شما را بداند میتواند موجودی و تاریخچهٔ آن را هم ببیند. این مسئلهای مربوط به حریم خصوصی است، نه خطر سرقت.
مسیر یکطرفه: خصوصی، عمومی، آدرس
سه چیزی که تا اینجا دیدیم، یک زنجیرهٔ یکطرفه میسازند: از کلید خصوصی، کلید عمومی محاسبه میشود و از کلید عمومی، آدرس. حرکت در این جهت برای نرمافزار کیف پول آسان و سریع است. حرکت در جهت عکس، یعنی رسیدن از آدرس به کلید عمومی یا از کلید عمومی به کلید خصوصی، با روشها و توان محاسباتی شناختهشدهٔ امروز عملاً شدنی نیست و امنیت کل سامانه بر همین فرض بنا شده است.
در این مسیر دو قفل جداگانه وجود دارد. قفل اول ریاضیات منحنی بیضوی است: حرکت از یک عدد به نقطهای روی منحنی آسان است، اما پیداکردن آن عدد از روی نقطهٔ حاصل، مسئلهای است که راهحل کارآمدی برایش شناخته نشده است. قفل دوم تابع هش است که از کلید عمومی آدرس را میسازد و از اساس برگشتناپذیر طراحی شده است. نتیجهٔ عملی برای شما ساده است: دادن آدرس یا دیدهشدن کلید عمومی، راهی به کلید خصوصی باز نمیکند.
| ویژگی | کلید خصوصی | کلید عمومی | آدرس |
|---|---|---|---|
| از کجا میآید | عدد تصادفی که کیف پول میسازد | از کلید خصوصی محاسبه میشود | با هش از کلید عمومی بهدست میآید |
| کاربرد | امضای تراکنش | سنجش درستی امضا | دریافت دارایی |
| چه کسی باید ببیند | فقط شما | هر کسی | هر کسی که قرار است برایتان بفرستد |
| اگر دیگری ببیند | کنترل دارایی از دست میرود | خطری برای دارایی ندارد | موجودی و تاریخچه دیده میشود |
رابطه با عبارت بازیابی
اگر کیف پول نرمافزاری ساخته باشید، احتمالاً هرگز خود کلید خصوصی را ندیدهاید؛ آنچه دیدهاید فهرستی از کلمهها بوده است: عبارت بازیابی (Seed Phrase). بیشتر کیف پولهای امروزی از همین عبارت، با روشی استاندارد و بهترتیب، کلیدهای خصوصی متعددی میسازند؛ برای هر شبکه یا هر حساب یکی. پس عبارت بازیابی در عمل سرچشمهٔ همهٔ کلیدهای خصوصی یک کیف پول است و هر کس آن را داشته باشد، میتواند تکتک آن کلیدها را دوباره بسازد.
تفاوت این دو را میتوان اینطور خلاصه کرد: کلید خصوصی به یک آدرس مشخص مربوط است و فقط همان را باز میکند، اما عبارت بازیابی همهٔ آدرسهای آن کیف پول را باز میکند. به همین دلیل لو رفتن عبارت بازیابی معمولاً از لو رفتن یک کلید خصوصی پرهزینهتر است. جزئیات ساختهشدن این کلمهها و روش نگهداری آنها در عبارت بازیابی (سید فریز) چیست و چطور نگهش داریم آمده است و آنچه پس از گمشدنشان رخ میدهد در پیامد گم کردن کلید خصوصی یا سید فریز.
این رابطه یک پیامد عملی هم دارد. پاککردن اپلیکیشن یا خرابشدن گوشی، کلیدها را از بین نمیبرد، به شرط آنکه عبارت بازیابی را داشته باشید؛ چون کلیدها از آن قابلبازسازیاند. برعکس، اگر اپلیکیشن سالم باشد ولی کسی عبارت بازیابی شما را ببیند، میتواند در دستگاه خودش همان کلیدها را بسازد، بیآنکه به گوشی شما دست بزند.
کیف پول صرافی و مالکیت کلید
وقتی دارایی شما در حساب یک صرافی است، کلید خصوصی وجود دارد، اما دست شما نیست. آدرسی که صرافی برای واریز نشان میدهد به کلیدهایی تعلق دارد که خود صرافی نگه میدارد و شما فقط با نام کاربری و رمز عبور به حسابی در سامانهٔ صرافی دسترسی دارید. بخش آموزشی Kraken دربارهٔ نگهداری امانی دارایی، عبارت مشهور «کلید تو نیست، کوین تو نیست» را اینطور توضیح میدهد که هر کس کلید خصوصی کیف پول را در اختیار دارد، کنترل کامل داراییهای آن را دارد [۶]. به گفتهٔ همین منبع، وقتی صرافی کلیدها را نگه میدارد، میتواند تراکنش را محدود یا دارایی را مسدود کند و اگر ورشکست شود ممکن است همهٔ دارایی از دست برود [۶].
این به آن معنا نیست که هر کسی باید بیدرنگ همهچیز را از صرافی بیرون ببرد؛ نگهداری کلید به دست خودتان هم مسئولیت کامل حفاظت از آن را بر دوش شما میگذارد. هدف این است که بدانید در هر حالت، کنترل واقعی دست کیست. سنجش این دو گزینه در اشتباه رایج: نگهداری کل دارایی در کیف پول صرافی آمده است و اگر کیف پول خودگردان میخواهید، ساخت کیف پول جدید گامبهگام و تفاوت کیف پول سرد و گرم نقطهٔ شروع مناسبیاند.
چه چیزی را هرگز نباید به کسی داد
قاعدهٔ این بخش را میتوان در یک جمله گفت: آنچه برای دریافت است آزادانه داده میشود و آنچه برای امضاست به هیچکس داده نمیشود. آدرس کیف پول را برای دریافت دارایی به دیگران میدهید و کلید عمومی هم بخشی از هر تراکنش است و روی بلاکچین دیده میشود. اما کلید خصوصی و عبارت بازیابی، هر دو، در حکم امضای شما هستند و دادنشان یعنی سپردن اختیار کامل دارایی به دیگری.
پیش از آنکه چیزی را به کسی بدهید
- آدرس کیف پول را فقط برای دریافت بدهید و پیش از هر ارسال، آن را کامل با مقصد مقایسه کنید، نه فقط چند نویسهٔ اول و آخر.
- کلید خصوصی را به هیچ فرد، سایت، ربات یا «پشتیبانی» ندهید؛ پشتیبانی واقعی به آن نیازی ندارد.
- عبارت بازیابی را جز در اپلیکیشن رسمی کیف پول و فقط هنگام بازیابی همان کیف پول، در هیچ سایت یا برنامهای وارد نکنید.
- از کلید خصوصی یا عبارت بازیابی عکس، اسکرینشات یا نسخهٔ تایپی در یادداشت گوشی، ایمیل و پیامرسان نگه ندارید.
- هر درخواستی را که با فوریت همراه است، مثل «همین حالا تأیید کنید وگرنه حساب بسته میشود»، نشانهٔ هشدار بدانید و پیش از هر اقدام مکث کنید.
- اگر گمان میکنید کلید خصوصی یا عبارت بازیابی دیده شده است، بدانید که عوض کردن رمز ورود اپلیکیشن کلید را عوض نمیکند؛ کیف پول تازهای با عبارت جدید بسازید و دارایی را به آن منتقل کنید.
دلیل اینکه نباید از این کلمهها عکس گرفت یا آنها را جایی تایپ کرد، با جزئیات در اشتباهات رایج نگهداری سید فریز آمده است. برای مرور همهٔ عادتهای امن، چکلیست امنیت کیف پول برای مبتدیان را در دسترس نگه دارید و نقشهٔ کامل این درسها را در صفحهٔ کیف پول و امنیت ارز دیجیتال ببینید.
خودتان را بسنجید
میشود از روی آدرس، کلید خصوصی را پیدا کرد؟
در عمل خیر. آدرس با تابع هش از کلید عمومی ساخته میشود و کلید عمومی با ریاضیات منحنی بیضوی از کلید خصوصی؛ هر دو مرحله یکطرفه طراحی شدهاند. به همین دلیل دادن آدرس برای دریافت دارایی، راهی به کلید خصوصی شما باز نمیکند.
کلید خصوصی با عبارت بازیابی چه فرقی دارد؟
کلید خصوصی یک عدد محرمانه است که یک آدرس مشخص را کنترل میکند. عبارت بازیابی فهرستی از کلمههاست که کیف پول از آن، کلیدهای خصوصی همهٔ حسابهایش را میسازد. پس لو رفتن عبارت بازیابی یعنی لو رفتن همهٔ کلیدهای آن کیف پول.
اگر کلید عمومیام را کسی ببیند خطر دارد؟
با دانش و توان محاسباتی امروز، برای دارایی شما خطری ندارد؛ کلید عمومی برای همین ساخته شده است که دیگران ببینند و امضای شما را با آن بسنجند. تنها پیامدش این است که مانند آدرس، ممکن است فعالیتهای آن حساب روی بلاکچین به شما نسبت داده شود.
کیف پول صرافی کلید خصوصی دارد؟
بله، ولی کلید در اختیار صرافی است، نه شما. شما با نام کاربری و رمز عبور به حسابی در سامانهٔ صرافی دسترسی دارید و صرافی با کلیدهای خودش تراکنش را امضا میکند. به همین دلیل صرافی میتواند برداشت را محدود یا دارایی را مسدود کند.
منابع
- public key cryptography (PKC) - Glossary | CSRC مشاهدهٔ منبع public key cryptography (PKC) - Glossary | CSRC
- Private key - Bitcoin Wiki مشاهدهٔ منبع Private key - Bitcoin Wiki
- Ethereum accounts | ethereum.org مشاهدهٔ منبع Ethereum accounts | ethereum.org
- Secp256k1 - River Financial مشاهدهٔ منبع Secp256k1 - River Financial
- Keys, Addresses - Mastering Bitcoin, 2nd Edition [Book] مشاهدهٔ منبع Keys, Addresses - Mastering Bitcoin, 2nd Edition [Book]
- What is crypto custody? | Kraken مشاهدهٔ منبع What is crypto custody? | Kraken