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

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

رمزنگاری در بلاکچین چه کاری انجام می‌دهد؟

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

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

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

تابع هش چیست و چه نقشی در بلاکچین دارد؟

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

یک مثال ساده: اگر محتوای یک پرونده تغییر کند، هش تازه معمولا با هش قبلی یکسان نخواهد بود. بنابراین می‌توان با مقایسه چکیده‌ها به تغییر مشکوک شد. در بلاکچین نیز هش در پیونددادن داده‌های بلاک‌ها، شناسه‌گذاری و ساختارهای تاییدپذیر استفاده می‌شود. روش دقیق در هر شبکه فرق دارد؛ برای نمونه بیت کوین در بخش‌های مختلف از SHA-256 استفاده می‌کند و اتریوم در بخش‌هایی مانند ساخت آدرس از Keccak-256 بهره می‌برد.

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

اینفوگرافیک مراحل تابع هش و چکیده داده در بلاکچین
هش یک چکیده یک‌طرفه از داده می‌سازد و برای رمزگشایی متن طراحی نشده است.

کلید خصوصی و عمومی چگونه با هم کار می‌کنند؟

کلید خصوصی چیست و چرا باید مخفی بماند؟

کلید خصوصی (Private Key) یک مقدار محرمانه است که در حساب‌های مبتنی بر کلید به دارنده امکان امضای تراکنش یا پیام را می‌دهد. برنامه کیف پول معمولا فرایند امضا را برای کاربر انجام می‌دهد. اگر شخص دیگری به کلید خصوصی کنترل‌کننده دارایی دسترسی پیدا کند، ممکن است بدون رضایت صاحب حساب عملیات مجاز با آن کلید را انجام دهد؛ این موضوع به طراحی حساب و محدودیت‌های پروتکل هم وابسته است.

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

کلید عمومی چیست و چه تفاوتی دارد؟

کلید عمومی (Public Key) از کلید خصوصی با محاسبات رمزنگاری به دست می‌آید و برای بررسی امضای مربوط به آن قابل استفاده است. آشکاربودن کلید عمومی در یک طرح امن نباید راه عملی به‌دست‌آوردن کلید خصوصی را فراهم کند. این دو کلید نقش یکسانی ندارند: با کلید خصوصی امضا می‌کنیم؛ با اطلاعات عمومی مربوط، صحت امضا را می‌سنجیم.

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

امضای دیجیتال چگونه یک تراکنش را تایید می‌کند؟

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

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

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

اینفوگرافیک امضای دیجیتال تراکنش بدون ارسال کلید خصوصی
امضای تراکنش بررسی می‌شود؛ خود کلید خصوصی نباید از کنترل صاحب آن خارج شود.

آدرس بلاکچین چه فرقی با کلید عمومی دارد؟

آدرس، شناسه‌ای است که شبکه یا کیف پول برای دریافت دارایی و شناسایی حساب به کار می‌برد. در برخی شبکه‌ها آدرس از کلید عمومی و با محاسبات مشخصی ساخته می‌شود. برای نمونه در حساب‌های معمولی اتریوم، از بخشی از هش Keccak-256 کلید عمومی برای ساخت آدرس استفاده می‌شود؛ اما روش تولید آدرس در بیت کوین و دیگر بلاکچین‌ها یکسان نیست.

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

اثبات دانش صفر چیست و چه ارتباطی با هویت دارد؟

اثبات دانش صفر (Zero-Knowledge Proof) روشی است که در آن یک طرف می‌تواند درستی یک ادعای مشخص را به طرف دیگر ثابت کند، بدون اینکه اطلاعات محرمانه لازم برای اثبات را افشا کند. نمونه مفهومی آن اثبات داشتن یک ویژگی یا عضویت در یک مجموعه بدون نمایش همه داده‌های شخصی است؛ طراحی دقیق اثبات به پروتکل بستگی دارد.

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

رمزنگاری چه خطرهایی را برطرف نمی‌کند؟

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

  • فیشینگ و بدافزار: ممکن است کاربر با فریب، عبارت بازیابی را افشا کند یا تراکنش ناخواسته‌ای را امضا کند.
  • قرارداد هوشمند آسیب‌پذیر: معتبر بودن امضا مانع وجود باگ یا اختیار مخرب در کد قرارداد نمی‌شود.
  • ناشناس‌بودن ظاهری: عمومی بودن آدرس به معنی پنهان‌ماندن هویت واقعی در همه شرایط نیست؛ تحلیل زنجیره و داده‌های بیرون شبکه ممکن است ارتباط‌ها را آشکار کند.
  • ارسال اشتباه: امضای درست، آدرس نادرست یا انتخاب شبکه اشتباه را اصلاح نمی‌کند.
  • بازیابی دسترسی: وقتی کلید یا پشتیبان لازم از دست برود، رمزنگاری به‌تنهایی راه بازگرداندن دارایی فراهم نمی‌کند.

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

جمع‌بندی؛ هویت در بلاکچین فقط یک نام کاربری نیست

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

سوالات متداول

۱. آیا با داشتن آدرس کیف پول می‌توان کلید خصوصی آن را پیدا کرد؟

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

۲. تابع هش همان رمزگذاری است؟

خیر. هش یک چکیده با طول مشخص تولید می‌کند و معمولا برای بررسی تغییر داده یا ساختارهای رمزنگاری به کار می‌رود؛ رمزگذاری متعارف برای بازیابی متن با کلید مناسب طراحی شده است.

۳. آیا امضای دیجیتال یعنی تراکنش حتما تایید شده است؟

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

۴. آیا اثبات دانش صفر تمام اطلاعات کاربران را مخفی می‌کند؟

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