⛓ دانشکدهٔ ۲ · رمزنگاری کاربردی
کلید عمومی، کلید خصوصی و آدرس
Public keys, private keys and addresses
پیشنیازها: تابع هش و SHA-256
📚 آموزش در سه سطح
از سطح ساده شروع کنید؛ اگر روشن بود، سطح بعد را بخوانید. سطح مناسب شما ذخیره میشود.
🌱 توضیح ساده
در بلاکچین، «مالکیت» یعنی در اختیار داشتن یک عدد مخفی به نام «کلید خصوصی». از روی این عدد، یک «کلید عمومی» ساخته میشود و از روی کلید عمومی، «آدرس». آدرس را مثل شمارهٔ حساب یا شمارهٔ صندوق پستی تصور کنید که میتوانید به همه بدهید تا برایتان پول بفرستند. کلید خصوصی مثل تنها کلید آن صندوق است: هر کس داشته باشد میتواند محتوای صندوق را بردارد و هیچ بانکی هم نیست که بعداً پول را برگرداند.
نکتهٔ جادویی این است که مسیر فقط یکطرفه است. از کلید خصوصی بهراحتی میتوان کلید عمومی و آدرس را ساخت، اما از آدرس یا کلید عمومی هیچ راه عملی برای رسیدن به کلید خصوصی وجود ندارد. مثل اینکه دو رنگ را با هم مخلوط کنید: ساختن رنگ مخلوط آسان است، ولی جداکردن دوبارهٔ دو رنگ اولیه تقریباً ناممکن.
کیف پول در واقع پول را نگه نمیدارد؛ پول همیشه روی بلاکچین است. کیف پول فقط کلیدها را نگه میدارد و با آنها تراکنش امضا میکند. به همین دلیل هر کس کلید خصوصی یا عبارت بازیابی شما را ببیند، عملاً صاحب داراییتان شده است. هیچ پشتیبان واقعی، هیچ صرافی و هیچ سایتی هرگز به آنها نیاز ندارد و درخواستش همیشه نشانهٔ کلاهبرداری است.
📘 توضیح متوسط
کلید خصوصی بیتکوین و اتریوم یک عدد تصادفی ۲۵۶ بیتی است؛ دقیقتر، عددی میان ۱ و مرتبهٔ گروه منحنی secp256k1 که تقریباً ۱٫۱۶ × ۱۰ به توان ۷۷ است. کلید عمومی با «ضرب نقطهای» این عدد در نقطهٔ مولد منحنی به دست میآید. کلید عمومی در قالب فشرده ۳۳ بایت است (یک بایت پیشوند 02 یا 03 و ۳۲ بایت مختص x) و در قالب فشردهنشده ۶۵ بایت (پیشوند 04 و هر دو مختص x و y).
آدرس معمولاً هشِ کلید عمومی یا هشِ یک اسکریپت است، بهاضافهٔ کد خطایاب تا اشتباه تایپی منجر به گمشدن پول نشود. در بیتکوین چهار قالب رایج وجود دارد: آدرس قدیمی P2PKH که با 1 شروع میشود و از RIPEMD-160 روی SHA-256 کلید عمومی و کدگذاری Base58Check ساخته میشود؛ P2SH که با 3 شروع میشود؛ SegWit بومی (P2WPKH) که با bc1q شروع میشود و از کدگذاری Bech32 استفاده میکند؛ و Taproot که با bc1p شروع میشود و Bech32m دارد. در اتریوم آدرس ۲۰ بایت آخر Keccak-256 کلید عمومی فشردهنشده (بدون پیشوند) است که با 0x و ۴۰ نویسهٔ هگز نوشته میشود؛ ترکیب حروف بزرگ و کوچک در آن (EIP-55) نقش کد خطایاب را دارد.
کیف پولهای امروزی معمولاً «سلسلهمراتبی قطعی» (HD، استاندارد BIP32) هستند: از یک بذر واحد، که با عبارت بازیابی ۱۲ یا ۲۴ کلمهای (BIP39) نمایش داده میشود، تعداد نامحدودی کلید و آدرس ساخته میشود. به همین دلیل کیف پول میتواند برای هر دریافت یک آدرس تازه بسازد و با همان ۱۲ کلمه همه را بازیابی کند. جزئیات امنیتی نگهداری این عبارت در دانشکدهٔ کیف پول و امنیت آمده است.
🔬 توضیح تخصصی
امنیت این ساختار بر «مسئلهٔ لگاریتم گسستهٔ منحنی بیضوی» (ECDLP) تکیه دارد: با داشتن نقطهٔ k·G، یافتن k با بهترین الگوریتمهای کلاسیک شناختهشده حدود ۲ به توان ۱۲۸ عملیات لازم دارد. اما این امنیت فقط وقتی برقرار است که k واقعاً تصادفی و از کل فضا انتخاب شده باشد. هر محدودیتی در منبع تصادف، مثلاً بذر ۳۲ بیتی یا مولد عدد تصادفی معیوب، فضای جستوجو را از ۲ به توان ۲۵۶ به عددی کوچک تقلیل میدهد که با کارت گرافیک قابل پیمایش است.
هشکردن کلید عمومی در آدرس دو فایده دارد: آدرس کوتاهتر میشود و کلید عمومی تا پیش از نخستین خرج، روی زنجیره آشکار نیست. این لایهٔ اضافی گاهی بهعنوان محافظت در برابر رایانههای کوانتومی آینده مطرح میشود، ولی محدودیت دارد: بهمحض خرجکردن، کلید عمومی در تراکنش منتشر میشود و آدرسهای Taproot هم کلید عمومی (تنظیمشده) را مستقیماً در خروجی دارند. استفادهٔ مجدد از آدرس هم حریم خصوصی را از بین میبرد، چون همهٔ دریافتها و پرداختها را به هم پیوند میدهد و تحلیل زنجیره را ساده میکند.
در اتریوم، آدرس حسابهای کاربری (EOA) مستقیماً از کلید مشتق میشود، اما آدرس قراردادهای هوشمند از آدرس سازنده و یک شمارنده یا یک مقدار نمک ساخته میشود و کلید خصوصی ندارد. «آدرسهای شیک» (vanity) که با الگوی دلخواه شروع میشوند، با تولید انبوه کلید ساخته میشوند و فقط وقتی امناند که ابزار سازنده از تصادف کامل ۲۵۶ بیتی استفاده کند. ریسک دیگر «مسمومیت آدرس» است: مهاجم آدرسی میسازد که چند نویسهٔ اول و آخرش با آدرس واقعی شما یکی است و با تراکنشهای بیارزش آن را در تاریخچهٔ شما مینشاند تا هنگام کپیکردن اشتباه کنید؛ همیشه کل آدرس را بررسی کنید.
🌍 مثال واقعی: حادثهٔ Wintermute و ابزار Profanity (سپتامبر ۲۰۲۲)
Profanity ابزاری محبوب برای ساخت آدرسهای شیک اتریوم بود. در ۱۵ سپتامبر ۲۰۲۲، شرکت 1inch گزارشی منتشر کرد که نشان میداد این ابزار کلیدها را از یک بذر تصادفی ۳۲ بیتی میسازد؛ یعنی فضای کلیدهای ممکن بسیار کوچکتر از ۲ به توان ۲۵۶ است و با سختافزار کافی، کلید خصوصی چنین آدرسهایی از روی کلید عمومی قابل بازیابی است.
در ۲۰ سپتامبر ۲۰۲۲ شرکت بازارسازی Wintermute اعلام کرد از یکی از حسابهایش که با Profanity ساخته شده بود حدود ۱۶۰ میلیون دلار (به ارزش زمان رویداد) سرقت شده است. منحنی secp256k1 یا Keccak-256 شکسته نشده بود؛ مشکل فقط منبع تصادف ضعیف بود.
درس عملی: امنیت کلید به اندازهٔ ضعیفترین بخش زنجیرهٔ تولید آن است. از ابزارهای ناشناس برای ساخت کلید یا آدرس استفاده نکنید و کیف پولهایی را ترجیح دهید که کدشان باز، شناختهشده و ممیزیشده است.
🔤 واژگان تخصصی
عدد مخفی ۲۵۶ بیتی که توانایی امضای تراکنش و در نتیجه خرجکردن دارایی را میدهد.
مثال: کیف پول سختافزاری کلید خصوصی را درون تراشهٔ خود نگه میدارد و فقط امضا را بیرون میدهد.
نقطهای روی منحنی بیضوی که از ضرب کلید خصوصی در نقطهٔ مولد به دست میآید و برای بررسی امضا به کار میرود.
مثال: کلید عمومی فشردهٔ بیتکوین ۳۳ بایت است و با 02 یا 03 شروع میشود.
نمایش کوتاه و دارای کد خطایاب از هش کلید عمومی یا اسکریپت که دیگران برای فرستادن دارایی از آن استفاده میکنند.
مثال: آدرسی که با bc1q شروع میشود SegWit بومی و آدرسی که با 0x شروع میشود حساب اتریوم است.
منحنی بیضوی استانداردی که بیتکوین و اتریوم برای کلیدها و امضاها استفاده میکنند.
مثال: کلید عمومی هر حساب اتریوم نقطهای روی secp256k1 است.
کیف پولی که از یک بذر واحد تعداد نامحدودی کلید را با الگوریتمی قطعی مشتق میکند.
مثال: با یک عبارت بازیابی ۱۲ کلمهای میتوان همهٔ آدرسهای یک کیف پول HD را دوباره ساخت.
🔑 نکات کلیدی
- مسیر کلید خصوصی ← کلید عمومی ← آدرس یکطرفه است؛ از آدرس نمیتوان به کلید خصوصی رسید.
- کیف پول دارایی را نگه نمیدارد، کلید را نگه میدارد؛ هر کس کلید یا عبارت بازیابی را داشته باشد، مالک است.
- امنیت کلید به تصادفیبودن کامل آن وابسته است؛ منبع تصادف ضعیف، کل رمزنگاری را بیاثر میکند.
- قالب آدرس نوع آن را نشان میدهد: 1، 3، bc1q و bc1p در بیتکوین و 0x در اتریوم و شبکههای سازگار با آن.
- استفادهٔ مجدد از آدرس حریم خصوصی را کاهش میدهد و همیشه باید کل آدرس را پیش از ارسال بررسی کرد.
⚠️ اشتباهات رایج
- واردکردن کلید خصوصی یا عبارت بازیابی در سایت یا ربات برای «بررسی موجودی» یا «پشتیبانی»؛ هیچ خدمت معتبری به آن نیاز ندارد و این راه اصلی سرقت است.
- بررسی فقط چند نویسهٔ اول و آخر آدرس؛ مهاجمان آدرسهایی با همان ابتدا و انتها میسازند.
- استفاده از ابزارهای ناشناس برای ساخت آدرس شیک یا کلید؛ منبع تصادف ضعیف یعنی کلید قابل بازیابی.
- تصور اینکه آدرس اتریوم و آدرس شبکههای سازگار با آن (مثل BNB Chain) چون یکساناند، دارایی هم در همهجا یکسان است؛ آدرس یکی است، ولی موجودی و تراکنشها در هر شبکه جداست.
🛠 تمرین عملی: ساخت جفت کلید آزمایشی و شناسایی قالب آدرسها
- در ابزار کلید و امضای آزمایشگاه آکادمی یک جفت کلید آزمایشی بسازید (این کلیدها فقط برای آموزشاند و نباید برای دارایی واقعی استفاده شوند).
- طول کلید عمومی را بر حسب نویسهٔ هگز بشمارید و حساب کنید چند بایت است.
- چند بار کلید تازه بسازید و ببینید آیا هیچ الگویی میان کلیدهای پشتسرهم دیده میشود یا نه.
- در mempool.space آخرین بلاک را باز کنید و از میان خروجیهای چند تراکنش، یک آدرس از هر قالب 1، 3، bc1q و bc1p پیدا کنید.
- برای هر قالب بنویسید چه نوع اسکریپتی است و کدام قالب کارمزد کمتری برای خرجکردن دارد.
✅ معیار درستی: باید برای هر چهار قالب یک نمونهٔ واقعی پیدا کرده باشید؛ میان کلیدهای پشتسرهم نباید هیچ الگوی قابل تشخیصی وجود داشته باشد؛ و بدانید که هیچ کلید یا عبارت بازیابی واقعیای در این تمرین وارد نشده است.
🔒 در هیچ تمرینی از سرمایهٔ واقعی، عبارت بازیابی (Seed Phrase)، کلید خصوصی یا اتصال کیف پول اصلی استفاده نکنید.
📝 آزمون تطبیقی
هر بار ۵ سؤال از بانک ۸ سؤالی این درس انتخاب میشود؛ سؤالهایی که قبلاً اشتباه زدهاید زودتر برمیگردند. حدنصاب قبولی ۸۰٪ (۴ از ۵) است و درس بعد با قبولی باز میشود.
✍️ پرسش تشریحی
توضیح دهید چرا جملهٔ «کیف پول، پول شما را نگه میدارد» نادرست است و این برداشت نادرست چگونه میتواند به از دست رفتن دارایی منجر شود.
بعد از نوشتن، پاسخ خود را با این معیارها بسنجید
خودارزیابی: هر نکتهای را که پاسخ شما بهروشنی پوشش داده علامت بزنید.
🤖 دستیار آموزشی
دستیار آفلاین آکادمی: پاسخها فقط از متن درسها و واژگان همین آکادمی پیدا میشوند و منبع هر پاسخ نشان داده میشود. هوش مصنوعی مولد نیست، حدس نمیزند و هیچ سیگنال خرید و فروشی نمیدهد.
📎 منابع مطالعاتی
- Bitcoin Developer Guide — Transactions (public key formats, addresses)
- ethereum.org — Ethereum accounts
- Bitcoin Optech — Taproot
🏁 معیار تسلط بر این درس: بتوانید مسیر کلید خصوصی تا آدرس را با اندازهٔ هر جزء توضیح دهید، قالب آدرسها را از روی پیشوند تشخیص دهید و سه خطای امنیتی رایج دربارهٔ کلیدها را نام ببرید.