این صفحه به‌طور خودکار از انگلیسی ترجمه شده است.ترجمهٔ خودکار.

Switch to EnglishView in Englishگزارش مشکل در ترجمهپیشنهاد اصلاح

بازگشت به درس‌ها

فصل ⁨3⁩ - ⁨0⁩ آزمون از ⁨10⁩ آزمون گذرانده شده است

توابع hash: اثر انگشت‌های دیجیتال

یک تابع hash رمزنگاری، تابعی یک‌طرفه است که دستکاری داده‌ها را آشکار می‌سازد و اثبات کار را ممکن می‌کند.

  • توضیح دهید که یک تابع hash رمزنگاری چه کاری انجام می‌دهد و چرا اثر بهمنی اهمیت دارد
  • توصیف کنید که چگونه یک Merkle root محتوای تمام تراکنش‌های بلاک را در یک hash ثبت می‌کند

پاسخ‌های کوتاه

مفهوم hash در Bitcoin چیست؟

یک اثر انگشت یک‌طرفه از داده‌ها: محاسبهٔ آن آسان است، معکوس کردن آن عملاً ناممکن است و هرگونه تغییر در داده‌ها یک hash کاملاً متفاوت ایجاد می‌کند.

منظور از Merkle root چیست؟

یک hash واحد که محتوای همهٔ تراکنش‌های بلاک را ثبت می‌کند، به‌طوری که با تغییر هر تراکنش، Merkle root نیز تغییر می‌کند.

چرا نمی‌توان تاریخچه Bitcoin را تغییر داد؟

هدر هر بلاک به hash بلاک قبلی وابسته است و آن را در خود ثبت می‌کند، بنابراین تغییر دادن یک بلاک قدیمی به معنای انجام دوباره اثبات کار برای آن بلاک و تمام بلاک‌های بعدی است.

اثر انگشت‌های یک‌طرفه

یک تابع hash رمزنگاری هر ورودی — یک کلمه، یک تصویر، یا یک دانشنامه کامل — را می‌گیرد و یک چکیده با اندازه ثابت برمی‌گرداند. این فرآیند یک‌طرفه است: شما می‌توانید تأیید کنید که ورودی همان چکیده را تولید می‌کند، اما عملاً نمی‌توانید از چکیده به ورودی برگردید. Bitcoin از SHA-256 استفاده می‌کند که ۲۵۶ بیت برمی‌گرداند و معمولاً به‌صورت ۶۴ کاراکتر هگزادسیمال نوشته می‌شود. برای محاسبه hash بلاک و شناسه‌های تراکنش، این تابع دو بار اعمال می‌شود (SHA-256d).

اثر بهمنی

یک تابع hash خوب بسیار حساس است. اگر یک ویرگول را در یک سند ۵۰۰ صفحه‌ای تغییر دهید، چکیده به‌طور کامل تغییر می‌کند. به این ویژگی اثر بهمنی می‌گویند. همین موضوع باعث می‌شود مقادیر hash به‌عنوان تعهد (commitment) به داده‌ها کاربردی باشند: چکیده به محتوای دقیق بایت‌ها وابسته است و هرگونه تغییر بعدی کاملاً آشکار است.

Merkle root

یک بلاک تمام تراکنش‌ها را یکی‌یکی در هدر hash نمی‌کند. بلکه جفت‌های شناسه تراکنش را hash می‌کند، سپس نتایج را جفت می‌کند و این کار را تکرار می‌کند تا تنها یک hash باقی بماند: Merkle root. هدر بلاک شامل نسخه آن، این ریشه، hash بلاک قبلی، زمان، هدف سختی و nonce است. با تغییر هر تراکنش، Merkle root تغییر می‌کند که باعث تغییر hash هدر می‌شود و پیوند زنجیره و کار انجام‌شده برای بلاک‌های بعدی را از بین می‌برد.

تاریخچه‌ای که دستکاری در آن آشکار می‌شود

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

امتحان کنید

SHA-256(پیام)be448223b59a9b8861153ac93e7f7051187901c11e6ad220b85531c3eb735798
SHA-256(پیام + !)3dcc106b015b45b18f4684a797a6f59e0f35135b8c0ff3b73b0e9b803b443b33

⁨125⁩ بیت از ۲۵۶ بیت پس از افزودن یک کاراکتر تغییر کرد.

نکات کلیدی که باید به خاطر بسپارید

مقادیر hash تعهدهای یک‌طرفه هستند. Merkle root یک بلاک به تمام تراکنش‌های آن وابسته است و هر هدر به بلاک قبلی وابسته است؛ بنابراین تغییر تاریخچه نیازمند انجام دوباره کار بلاک‌های بعدی است.

یادآوری کنید، سپس به کار ببرید

یک کاراکتر را در دمو تغییر دهید. چه چیزی تغییر می‌کند و hash چه چیزی را اثبات نمی‌کند؟

توضیح خود را بررسی کنید

چکیده به‌طور چشمگیری تغییر می‌کند. تطابق چکیده سازگاری داده‌ها را بررسی می‌کند؛ اما اثبات نمی‌کند که داده‌ها درست یا مجاز هستند. مجوزدهی نیازمند امضاها است.

ارزیابی

سؤال ⁨1⁩ از ⁨3⁩

فردی یک تراکنش را در داخل بلاکی که ۱۰۰ بلاک پس از آن قرار گرفته است ویرایش می‌کند. چه چیزی این ویرایش را لو می‌دهد؟

سؤال ⁨2⁩ از ⁨3⁩

شما یک سند را hash می‌کنید، یک ویرگول را تغییر می‌دهید و دوباره آن را hash می‌کنید. چه اتفاقی برای چکیده می‌افتد؟

سؤال ⁨3⁩ از ⁨3⁩

Merkle root یک بلاک به چه داده‌هایی وابسته است؟

اصطلاحات کلیدی

منابع

بازبینی‌شده در ⁨۲۵ اکتبر ۲۰۲۶⁩ · توصیهٔ مالی نیست