برای فهمیدن اختیار خرج، باید نقش چند نوع داده را بشناسیم: کدام راز است، کدام اجازهٔ بررسی میدهد و کدام فقط مقصد را مشخص میکند. جزئیات ریاضی پس از توضیح نقشها میآیند.
مطالب مرتبط: دستهٔ ۱
مفاهیم این بخش: هش، رمزگذاری، کلید خصوصی، کلید عمومی، آدرس، امضای دیجیتال، شنور، آنتروپی، جمع کنترلی، قالب آدرس، کلید عمومی توسعهیافته
هدف توضیح: توضیح اینکه چه دادهای محرمانه است، چه دادهای امکان بررسی میدهد و چرا اعتبار ظاهری آدرس به معنی صحت مقصد نیست.
هش با رمزگذاری چه فرق دارد و آیا هش را میتوان رمزگشایی کرد؟
هش رمزنگارانه، داده را به خروجی با طول مشخص نگاشت میکند. طراحی آن باید یافتن ورودی برای یک خروجی هدف یا یافتن دو ورودی با هش یکسان را از نظر محاسباتی دشوار کند. اینها ادعاهای دشواریاند، نه اینکه برخورد از نظر ریاضی وجود ندارد. هش، تصویر کامل و برگشتپذیر ورودی نیست؛ برای آن کلید رمزگشایی تعریف نشده است. تعریف هش رمزنگارانه
رمزگذاری هدف دیگری دارد: پنهانکردن محتوای داده بهگونهای که با سازوکار و کلید مناسب بتوان آن را بازیابی کرد. تعریف رمزگذاری اگر کسی هش یک واژهٔ بسیار قابل حدس را بداند، میتواند واژههای محتمل را امتحان کند و هشها را مقایسه کند؛ این «رمزگشایی هش» نیست، جستوجوی ورودی است. بنابراین هشکردن یک راز ضعیف، خودبهخود آن را به رازی قوی تبدیل نمیکند. همچنین وجود رمزنگاری در یک سامانه لزوماً به معنی محرمانهبودن همهٔ دادههای آن نیست: تشخیص تغییر داده و پنهانکردن داده دو هدف متفاوتاند.
کلید خصوصی و عمومی چه رابطهای دارند و آیا برای دریافت پول باید رازی را فرستاد؟
کلید خصوصی برای ساخت امضاست و کلید عمومی به دیگران امکان بررسی آن امضا را میدهد. برای دریافت بیتکوین، لازم نیست رازِ امضا را به فرستنده بدهید.
از نظر فنی، کلید خصوصی عددی محرمانه در محدودهٔ معتبر منحنی است. کلید عمومی با یک عمل ریاضی روی آن ساخته میشود؛ در مشخصات شنور بیتکوین، این عمل ضرب نقطهٔ مولدِ منحنی در عدد خصوصی است. محاسبهٔ رو به جلو عملی است، اما بازیابی عدد خصوصی از کلید عمومی، با فرضهای امنیتی این طرح، از نظر محاسباتی دشوار است. کلید خصوصی با «رمز ورود برنامه» یکی نیست. تولید کلید در پیشنهاد ۳۴۰
برای دریافت، لازم نیست کلید خصوصی را در اختیار فرستنده بگذارید؛ کیف پول اطلاعات مقصد را فراهم میکند. کلیدها ابزار ادارهٔ اختیار خرجکردناند، نه ظرفی که خود سکهها داخل آن ذخیره شده باشند. نقش کلید در کیف پول تصور مفید این است که دادهٔ عمومی امکان بررسی میدهد و دادهٔ خصوصی توان انجام عمل مجاز را. البته «عمومی» به معنی بیپیامد برای حریم خصوصی نیست؛ دادهای که اجازهٔ خرج نمیدهد همچنان ممکن است فعالیتها را به یکدیگر مرتبط کند.
چرا آدرس همیشه همان کلید عمومی یا هش آن نیست؟
آدرس، نمایش استانداردی از اطلاعات لازم برای ساخت یک مقصد پرداخت است. در قالبهای مبتنی بر هش کلید عمومی، اطلاعات مقصد به یک کلید مربوط میشود؛ در قالبهای مبتنی بر هش اسکریپت، به شرایط خرجکردن تعهد داده میشود. بنابراین از همان ابتدا، جملهٔ «هر آدرس، هش یک کلید است» بیش از حد ساده است. مقصدهای مبتنی بر کلید و اسکریپت
در تپروت، برنامهٔ شاهدِ ۳۲بایتی، نمایش مختصات افقی یک کلید عمومیِ خروجی است. این کلید با تعدیل یک کلید داخلی ساخته میشود و میتواند به درختی از شرایط اسکریپتی هم تعهد داشته باشد؛ صرفاً هش کلید داخلی نیست. خرج ممکن است از مسیر کلید یا مسیر اسکریپت انجام شود. ساختار دقیق تپروت برای کاربر، نتیجه روشن است: آدرس را از کیف پول و در قالب پشتیبانیشده دریافت کنید، نه با یک فرمول دستیِ همگانی. تفاوت قالبها فقط تغییر ظاهر حروف نیست؛ داده و قواعدِ مقصد پشت آنها هم تفاوت دارد.
امضای دیجیتال چه چیزی را ثابت میکند و تفاوت امضاهای قدیمی با شنور چیست؟
امضا به بررسیکننده اجازه میدهد سازگاری پیام، امضا و کلید عمومی را بررسی کند، بدون آنکه کلید خصوصی را دریافت کند. در خرج بیتکوین، امضا به دادههای تعیینشدهٔ تراکنش متعهد میشود؛ دامنهٔ این تعهد به نوع امضاگذاری بستگی دارد. امضای معتبر بهتنهایی هویت حقوقی صاحب کلید، رضایت آگاهانهٔ کاربر یا صداقت گیرنده را ثابت نمیکند. دادههای امضاشدهٔ تراکنش
بیتکوین از الگوریتم ECDSA استفاده کرده و با تپروت، امضاهای شنور مطابق پیشنهاد ۳۴۰ نیز وارد شدهاند. خود امضای شنور در این مشخصات ۶۴ بایت است؛ قالبهای قدیمی خودبهخود به آن تبدیل نشدهاند. مشخصات شنور ساختار شنور برای بعضی طرحهای امضای چندطرفه مناسب است، اما این ویژگی به معنی ادغام خودکار همهٔ امضاهای یک تراکنش نیست. توضیح تخصصی اپتک مثال ساده: نرمافزار میتواند دستور اشتباه را با کلید درست امضا کند؛ رمزنگاری نیت انسان را از روی امضا نمیخواند.
آنتروپی چیست و چرا ساختن عبارت بازیابی از جملهٔ دلخواه خطرناک است؟
آنتروپی در این بحث به عدمقابلیت پیشبینیِ مادهٔ تصادفی اشاره میکند، نه به عجیببودن ظاهری یک رشته. جملهای طولانی از یک شعر یا ترکیبی شخصی از تاریخها میتواند برای برنامهٔ حدسزن در فضای کوچکی از گزینهها قرار بگیرد. طول متن، بهتنهایی معیار کافی نیست. پیشنهاد ۳۹ برای نمایش تصادفِ تولیدشده توسط رایانه با واژههای قابل نوشتن طراحی شده، نه تبدیل جملههای انتخابی انسان به راز امن. هدف و ساختار پیشنهاد ۳۹
در همین استاندارد، عبارت دوازدهواژهای از ۱۲۸ بیت آنتروپی و چهار بیت کنترل ساخته میشود؛ عبارت بیستوچهارواژهای ۲۵۶ بیت آنتروپی و هشت بیت کنترل دارد. واژههای بیشتر، ضعف یک فرایند تولید قابل پیشبینی را جبران نمیکنند. نکتهٔ آموزشی این است که ابتدا کیفیت تولید راز اهمیت دارد و سپس نمایش و نگهداری آن. نمونههای منتشرشده در کتاب، وب یا آزمون نرمافزار راز محسوب نمیشوند؛ همه میتوانند همان نمونه را ببینند. در این مرحله هیچ عبارت واقعی تولید یا وارد نکنید.
جمع کنترلی چه خطاهایی را میگیرد و چه تضمینهایی نمیدهد؟
جمع کنترلی، دادهٔ افزودهای است که از محتوای اصلی محاسبه میشود تا برخی خطاهای نوشتن یا انتقال آشکار شوند. در قالب آدرس، نرمافزار آن را دوباره محاسبه و مقایسه میکند. قالب بچ۳۲ برای کشف خطاهای رونویسی طراحی مشخصی دارد؛ این سازوکار جای احراز هویت گیرنده را نمیگیرد. طراحی قالب و تشخیص خطا
اگر مهاجم آدرس کامل و معتبر خودش را جایگزین کند، جمع کنترلی آن نیز معتبر است. اگر مجموعهای از واژهها آزمون کنترل یک عبارت بازیابی را بگذراند، فقط از این جهت با ساختار سازگار است؛ این آزمون نمیگوید عبارت برای شما تولید شده یا محرمانه مانده است. در پیشنهاد ۳۹ بیتهای کنترل از هش آنتروپی گرفته میشوند. بیتهای کنترل عبارت پس پیام «قالب معتبر» را اینگونه بخوانید: نرمافزار ناسازگاری مشخصی در ساختار پیدا نکرده است. آن را به «مقصد مورد نظر من» یا «راز امن» ترجمه نکنید.
پیشوندهای آدرس چه اطلاعاتی میدهند و بچ۳۲ با بچ۳۲اِم چه فرقی دارد؟
در شبکهٔ اصلی، آدرسهای قدیمی معمولاً با 1 برای هش کلید عمومی و با 3 برای هش اسکریپت دیده میشوند. این نشانهها نام صاحب آدرس یا کیفیت نگهداری او را نشان نمیدهند. آدرسهای بومی سگویت نسخهٔ صفر با bc1q نمایش داده میشوند و قالب کنترلشان بچ۳۲ است. زمینه و قالب بچ۳۲
برای نسخههای شاهد یک و بالاتر، پیشنهاد ۳۵۰ قالب بچ۳۲اِم را مقرر میکند؛ آدرس تپروت در شبکهٔ اصلی با bc1p آغاز میشود. بچ۳۲اِم اصلاحی در جمع کنترلی است و با بچ۳۲ قابل جایگزینی دلخواه نیست؛ نسخهٔ صفر همچنان بچ۳۲ میماند. قاعدهٔ نسخه و قالب کنترل پیشوند برای شناخت خانواده مفید است، اما معتبرشناختن کل رشته نیاز به بررسی کامل دارد. همچنین شبکههای آزمایشی پیشوندهای متفاوت دارند. هنگام دریافت، پشتیبانی نرمافزار از قالب و تطابق شبکه مهم است؛ بازنویسی دستی چند حرف ابتدایی، یک آدرس را به مقصد درست تبدیل نمیکند.
نکتهٔ نوشتن آدرس: در بچ۳۲ و بچ۳۲اِم، حروف میتوانند یکدست کوچک یا یکدست بزرگ باشند؛ ترکیب حروف کوچک و بزرگ نامعتبر است. بنابراین «حساسنبودن به بزرگی حروف» تعبیر مناسبی برای تغییر دلخواه نویسهها نیست. آدرس را از منبع احرازشده بگیرید و کامل تطبیق دهید. قاعدهٔ حروف؛ بچ۳۲اِم
کلید عمومی توسعهیافته چه چیزی را آشکار میکند و چرا اشتراک آن بیخطر مطلق نیست؟
کلید عمومی توسعهیافته یا xpub، همراه کلید عمومی اطلاعات مشتقسازی مانند کد زنجیره را دارد. با آن میتوان زیرشاخههای عمومیِ غیرسختشده را ساخت، بدون اختیار امضا. لزوماً همهٔ حسابها و آدرسهای کیف پول را پوشش نمیدهد. قواعد مشتقسازی سلسلهمراتبی
گیرنده میتواند مقصدهای مشتقشدنیِ همان شاخه را مرتبط کند. خطر فنی دیگری هم وجود دارد: کلید عمومی توسعهیافتهٔ والد، همراه کلید خصوصی یک فرزند غیرسختشده و اطلاعات مسیر لازم، میتواند کلید خصوصی والد را آشکار کند. مشتقسازی سختشده چنین رابطهای را قطع میکند. پس «امکان خرج نمیدهد» با «انتشارش هیچ پیامدی ندارد» یکی نیست.
چگونه یک بذر، درختی از کلیدها میسازد و چرا بازیابی باید آن درخت را جستوجو کند؟
سه چیز را جدا کنید: واژههای پشتیبان، بذر و کلید یک خروجی. در قالب BIP39، واژهها همراه گذرواژهٔ افزوده، که میتواند خالی باشد، به بذر ۶۴بایتی تبدیل میشوند. این مرحله تابع مشخصی به نام PBKDF2 دارد؛ چسباندن واژهها یا تبدیل مستقیم آنها به یک کلید خصوصی نیست. تبدیل عبارت به بذر
سپس BIP32 از بذر یک کلید خصوصی اصلی و یک «کد زنجیره» میسازد. کد زنجیره، ۳۲ بایت دادهٔ همراه کلید برای مشتقسازی است؛ شمارهٔ بلاک یا پیوندی به زنجیرهٔ بلاکها نیست. هر گرهٔ درخت میتواند با انتخاب شمارهٔ فرزند، گرههای بعدی را بسازد. ورودی یکسان و مسیر یکسان، نتیجهٔ یکسان دارند؛ برای هر آدرس لازم نیست تصادف تازهای ذخیره شود. درخت و کلید اصلی
کلید خصوصی توسعهیافته، با پیشوند متعارف xprv در شبکهٔ اصلی، راز همان گره، کد زنجیره و اطلاعات جایگاهش را حمل میکند. از آن میتوان کلیدهای خصوصی زیرشاخه را ساخت. xpub نسخهٔ عمومی است: کلید عمومی را جای راز دارد و فقط از مسیرهای غیرسختشده پایین میرود. هیچکدام ذاتاً به معنی «تمام کیف پول» نیست؛ ممکن است مربوط به یک شاخه باشند. ساختار کلیدهای توسعهیافته
مثال فرضیِ خواندن نقشه: مسیر m/44'/0'/0'/0/2 را در قرارداد BIP44 بخوانیم. از ریشه، شاخهٔ قرارداد ۴۴، سپس بیتکوین شبکهٔ اصلی، سپس حساب شمارهٔ صفر، شاخهٔ دریافت و سرانجام کلید شمارهٔ دو انتخاب میشود. چون شمارهگذاری از صفر است، این کلید سومِ آن شاخه است. تغییر بخش پایانی از دو به سه، کلید دریافت بعدی را میدهد؛ تغییر بخش ماقبل آخر از صفر به یک، به شاخهٔ باقیمانده میرود. علامت آپاستروف، مشتقسازی سختشده را مشخص میکند؛ علت آن در پرسش بعد است. این مسیر یک قرارداد معین است، نه مسیر اجباری همهٔ کیف پولها. معنای سطحهای مسیر
مثال فرضیِ کشف: برای کوتاهی، ابزار آموزشی ما پس از سه آدرس بیسابقهٔ متوالی متوقف میشود. این عدد آموزشی است؛ حد تعریفشدهٔ شاخهٔ دریافت در BIP44 بیست است و ملاک، سابقهٔ تراکنش است، نه موجودی امروز. قاعدهٔ کشف
| شمارهٔ آدرس فرضی | سابقه | شمار بیسابقههای پیاپی پس از بررسی |
|---|---|---|
| ۰ | دریافت داشته و اکنون خالی است | ۰ |
| ۱ | ندارد | ۱ |
| ۲ | ندارد | ۲ |
| ۳ | دریافت داشته است | ۰ |
| ۴ | ندارد | ۱ |
| ۵ | ندارد | ۲ |
| ۶ | ندارد | ۳؛ توقف |
| ۷ | دریافت دارد | هنوز بررسی نشده است |
آدرس سه شمارنده را از نو صفر میکند؛ خالیبودن آدرس صفر هم سابقهاش را پاک نمیکند. ابزار در شش میایستد و هفت را نمیبیند، با اینکه همان بذر قادر به ساخت کلید هفت است. پس «کلید قابلبازسازی است» و «ابزار آن را در جستوجوی فعلی پیدا کرده» دو نتیجهاند. حد فاصله مرز جستوجوست، نه پایان درخت. نمونهٔ مستندِ تفاوت بازیابی و کشف
مشتقسازی غیرسختشده چگونه بدون راز کار میکند و سختشدن چه چیزی را عوض میکند؟
در مشتقسازی غیرسختشده، نرمافزار از کلید عمومی والد، کد زنجیره و شمارهٔ فرزند، با HMAC-SHA512 دادهای میسازد. نیمهای از نتیجه، عدد تعدیل و نیمهٔ دیگر کد زنجیرهٔ فرزند میشود. عدد تعدیل به کلید خصوصی والد، با حساب پیمانهای، افزوده میشود. در مشتقسازی سختشده، ورودی این تابع بهجای کلید عمومی شامل کلید خصوصی والد است. اجرای مشتقسازی خصوصی
چرا نسخهٔ عمومی هم میتواند جلو برود؟ اگر k راز والد، K = kG کلید عمومی و t عدد تعدیل باشد، رابطهٔ عمومی چنین است: K_child = K + tG. بنابراین ناظرِ دارای اطلاعات عمومی میتواند کلید عمومی فرزند را بسازد، بدون آنکه k را بداند. این جمع، جمع نقطههای منحنی است؛ جمع معمولی مختصات نیست. پیادهسازی عمومی نیز فرزند سختشده نمیسازد. اجرای مشتقسازی عمومی
حساب کوچکِ فرضی، فقط برای فهم رابطه: بهجای مرتبهٔ بسیار بزرگ منحنی واقعی، پیمانهٔ ۱۹ را تصور کنید. راز والد را ۷ و تعدیل را ۵ بگیریم؛ راز فرزند میشود ۱۲. کسی که تعدیل ۵ و راز فرزند ۱۲ را داشته باشد، با تفریق، راز والد ۷ را بازمییابد. اگر جمع از ۱۹ بگذرد، باقیمانده را میگیریم: ۱۷ بهاضافهٔ ۵ برابر ۲۲ است و در این مدل، به ۳ میرسد؛ ۳ منهای ۵ نیز در پیمانهٔ ۱۹، همان ۱۷ است. این اعداد، منحنی، کلید یا الگوریتم قابلاستفادهٔ بیتکوین نیستند؛ تنها برگشتپذیریِ «افزودن مقدار معلوم» را نشان میدهند.
در سازوکار واقعی هم اگر کلید خصوصی یک فرزند غیرسختشده افشا شود، دارندهٔ xpub والد و شمارهٔ فرزند میتواند تعدیل را محاسبه کند و با تفریق پیمانهای به راز والد برسد. سختشدن، محاسبهٔ همین تعدیل را به راز والد وابسته میکند؛ در نتیجه xpub بهتنهایی مواد لازم را ندارد. رابطهٔ مشتقسازی و پیامد افشا
اکنون مسیر فرضی قبل را دنبال کنید: ناظر، xpub حساب m/44'/0'/0' را دارد. میتواند از آن شاخهٔ دریافت و کلیدهای آن را بسازد؛ اما نمیتواند به حساب بعدی برود، چون آن حساب خواهر این گره است، نه فرزندش. کلید عمومی توسعهیافته «دستور حرکت از همین نقطه» است، نه نقشهای که خودبهخود اختیار همهٔ شاخهها را بدهد. محدودهٔ عملیات مشتقسازی عمومی
مثال توضیحی: آدرس دریافت، کلید خصوصی، هش یک متن و کلید عمومی توسعهیافته نقشهای متفاوتی دارند. کلید خصوصی راز لازم برای امضای مربوط است؛ کلید عمومی توسعهیافته میتواند مقصدهای مشتقشدنی را مرتبط کند. آدرس دریافت اختیار امضا نمیدهد و هش متن نیز کلید رمزگشایی ندارد. درستبودن جمع کنترلی آدرس فقط سازگاری ساختاری را نشان میدهد؛ آدرس مهاجم هم میتواند جمع کنترلی درست داشته باشد.



