آنچه که بیتکوین به ما میدهد یک وعده محکم است: برنامه دقیقاً همانطور که مشخص شده اجرا خواهد شد.
آندریاس ام. آنتونوپولوس
رمزنگاری کلید عمومی/خصوصی
رمزنگاری به معنای تبدیل اطلاعات به یک راز است که فقط افراد درست میتوانند آن را بخوانند.
- رمزگذاری فرآیند تبدیل اطلاعات به شکلی رمزگذاریشده است تا فقط کسی که کلید صحیح را دارد بتواند آن را بخواند.
- رمزگشایی فرآیند تبدیل آن اطلاعات رمزگذاریشده به چیزی قابل خواندن است.
در رمزنگاری سنتی، دو نفر که میخواهند به صورت خصوصی ارتباط برقرار کنند، ابتدا باید یک کلید مخفی مشترک داشته باشند، مشابه یک رمز عبور مشترک. یک نفر از این کلید برای رمزگذاری پیام قبل از ارسال استفاده میکند و نفر دیگر با همان کلید پیام را رمزگشایی و مطالعه میکند.
مشکل این سیستم این است که هر دو نفر باید از قبل کلید مخفی را داشته باشند. اگر شخص دیگری به آن کلید دسترسی پیدا کند، میتواند هر پیامی را که رهگیری کرده بخواند.
بیتکوین این مشکل را با رویکرد متفاوتی به نام رمزنگاری کلید عمومی حل میکند، جایی که کاربران نیازی به اشتراکگذاری کلیدهای مخفی از قبل ندارند.
رمزنگاری کلید عمومی/خصوصی مشکل اشتراکگذاری رازها را حل میکند. به جای اشتراکگذاری یک رمز عبور، هر فرد دو کلید دارد: یک کلید عمومی و یک کلید خصوصی.
- کلید عمومی را میتوان با هر کسی به اشتراک گذاشت.
- کلید خصوصی باید همیشه مخفی نگه داشته شود.
اگر علی بخواهد چیزی برای آرش بفرستد، میتواند از کلید عمومی آرش استفاده کند. فقط آرش میتواند با کلید خصوصی خودش آن را باز کند. حتی اگر کسی پیام را رهگیری کند، بدون کلید خصوصی نمیتواند آن را بخواند یا استفاده کند.
در بیتکوین، این سیستم برای ایجاد امضاهای دیجیتال استفاده میشود. یک امضای دیجیتال ثابت میکند که صاحب کلید خصوصی یک تراکنش را تأیید کرده است، مشابه امضای نام خودتان روی یک سند. این همان چیزی است که باعث میشود تراکنشهای بیتکوین بدون نیاز به اعتماد به شخص ثالث، امن و قابل تأیید باشند.
تراکنشهای بیتکوین شامل انتقال مالکیت بیتکوین از یک آدرس به آدرس دیگر است.
رمزگذاری برای اطمینان از این استفاده میشود که فقط دارنده واقعی بیتکوین اجازه دارد پول خود را به شخص دیگری ارسال کند. این کار باعث میشود دارایی آنها در برابر افراد مخرب محافظت شود.
به عنوان یک لایه محافظتی اضافی، هر تراکنش بیتکوین به طور خودکار یک امضای دیجیتال یکتا دریافت میکند. این امضای دیجیتال یکتا توسط فناوری غیرقابل دستکاری ایجاد میشود که به شبکه کمک میکند تا تأیید کند مالک واقعی بیتکوین، و نه شخص دیگری، آن را ارسال کرده است.
هر کاربر دو کلید دارد: یک کلید خصوصی که مخفی نگه داشته میشود و یک کلید عمومی که میتواند با دیگران به اشتراک گذاشته شود. کلید خصوصی به عنوان نوعی شناسایی و اثبات مالکیت عمل میکند و تأیید میکند: «این آدرس متعلق به من است و من کنترل آن را دارم.»
نحوه کار یک تراکنش بیتکوین
- ایجاد تراکنش: کاربر با مشخص کردن جزئیاتی مانند آدرس گیرنده و مقدار بیتکوین مورد نظر برای ارسال، یک تراکنش بیتکوین را آغاز میکند.
- تولید امضای دیجیتال: فرستنده یک امضای دیجیتال منحصر به فرد با استفاده از کلید خصوصی خود ایجاد میکند. این امضا یک کد یکتا است که اصالت تراکنش را تأیید میکند.
- پخش تراکنش: تراکنش امضا شده به شبکه بیتکوین ارسال میشود و نشاندهنده قصد انتقال مالکیت بیتکوین از فرستنده به گیرنده است.
- تأیید در شبکه: نودهای شبکه بیتکوین تراکنش را دریافت میکنند و با استفاده از کلید عمومی برای تأیید اصالت امضای تراکنش. همزمان، آنها از کلید عمومی برای تأیید امضای دیجیتال.
- تأییدیه در شبکه بیتکوین: اگر تأیید موفقیتآمیز باشد، تراکنش به دفتر کل افزوده میشود که به عنوان یک رکورد امن و شفاف از تمام تراکنشها عمل میکند. پس از تأیید، مالکیت بیتکوین به طور رسمی از فرستنده به گیرنده منتقل میشود.
امضای دیجیتالامضای دیجیتال، که با کلید خصوصی فرستنده ایجاد شده است، ثابت میکند که تراکنش توسط مالک بیتکوین مجاز شده است. شبکه بیتکوین سپس میتواند این اثبات را تأیید و تراکنش را ثبت کند.
توضیح هشینگ
لطفاً از اصطلاحات فنی و مفاهیم ریاضی پیش رو نترسید. ما میدانیم که همه عاشق ریاضی نیستند، اما ممکن است خودتان را شگفتزده کنید و ببینید حتی پیچیدهترین ایدهها هم با کمی تلاش قابل فهم هستند.
یک تابع مانند یک ماشین است که مقداری اطلاعات میگیرد و آن را به چیز جدیدی تبدیل میکند. اطلاعاتی که به تابع میدهید، ورودی است. اطلاعات جدیدی که تابع ایجاد میکند، خروجی است. توابع به کامپیوترها کمک میکنند کارها را انجام دهند و مسائل را حل کنند.
تابع چیست؟
یک تابع مجموعهای از دستورالعملهاست که یک ورودی میگیرد و یک خروجی تولید میکند. میتوانید آن را مانند یک دستور آشپزی تصور کنید: با مواد اولیه خاصی مراحل را دنبال میکنید و همیشه به نتیجهای قابل پیشبینی میرسید.
در بیتکوین، توابع برای پردازش و تأیید تراکنشها استفاده میشوند. وقتی کسی بیتکوین ارسال میکند، توابع رمزنگاری به بررسی اعتبار تراکنش، اطمینان از کافی بودن موجودی فرستنده و بهروزرسانی موجودیها در دفتر کل بیتکوین کمک میکنند. پس از تأیید و اضافه شدن به یک بلاک، تراکنش بخشی از رکورد دائمی در بلاکچین میشود.
تابع یکطرفه چیست؟
تابع یکطرفه نوع خاصی از تابع است که محاسبه آن در یک جهت آسان اما معکوس کردن آن بسیار دشوار است. مثلاً مخلوط کردن مواد برای تهیه اسموتی آسان است، اما نمیتوانید اسموتی را دوباره به مواد اولیهاش جدا کنید.
امنیت بیتکوین بر پایه توابع یکطرفه استوار است. این توابع در رمزنگاری کلید عمومی و خصوصی استفاده میشوند و به افراد اجازه میدهند کلید عمومی خود را به اشتراک بگذارند در حالی که کلید خصوصیشان محرمانه میماند. حتی اگر کلید عمومی قابل مشاهده باشد، استخراج کلید خصوصی از آن غیرممکن است. این ویژگی باعث امنیت تراکنشهای بیتکوین میشود.
تابع هش چیست؟
یک تابع هش مانند یک دستگاه رمزگذاری مخفی است. یک پیام را میگیرد و آن را به یک کد تبدیل میکند.
نحوه عملکرد هشینگ در تراکنشهای بیتکوین
در بیتکوین، هر تراکنش قبل از اضافه شدن به بلاکچین به یک هش تبدیل میشود. هش یک اثر انگشت دیجیتال منحصر به فرد از تراکنش است. اگر کسی حتی بخش کوچکی از تراکنش را تغییر دهد، هش کاملاً تغییر میکند. این ویژگی باعث میشود شبکه به راحتی دستکاری را تشخیص دهد.
نقش هشینگ در امنیت بیتکوین
هشینگ به محافظت از شبکه بیتکوین کمک میکند، زیرا تأیید تراکنشها را آسان و تغییر مخفیانه آنها را غیرممکن میسازد. چون هر تراکنش هش منحصر به فرد خود را دارد، شبکه میتواند به سرعت تشخیص دهد که آیا چیزی تغییر کرده است یا نه.
یک تابع هش داده را به یک رشته ثابت از اعداد و حروف به نام هش تبدیل میکند. یک ورودی یکسان همیشه یک هش یکسان تولید میکند، اما حتی یک تغییر کوچک در ورودی، نتیجهای کاملاً متفاوت ایجاد میکند. این ویژگی به کامپیوترها اجازه میدهد بررسی کنند که دادهها تغییر نکردهاند.
هشینگ مانند ایجاد اثر انگشت برای دادههای دیجیتال است. این فرآیند گرفتن یک پیام دیجیتال و تبدیل آن به یک کد با طول ثابت است که به عنوان یک شناسه منحصر به فرد عمل میکند. همانطور که اثر انگشت میتواند یک فرد را شناسایی کند، یک هش هم میتواند یک پیام دیجیتال را شناسایی کند.
خروجیخروجی، یا هش، همیشه طول ثابتی دارد، مهم نیست اطلاعات اولیه چقدر طولانی بوده است. بیتکوین از چند نوع خاص تابع هش به نام SHA-256 و RIPEMD160 استفاده میکند.
چند نمونه در زیر آمده است:
- هش SHA256 از رشته سلام دنیا
b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
- هش SHA256 رشته hello world.
7ddb227315f423250fc67f3be69c544628dffe41752af91c50ae0a9c49faeb87- توجه کنید که یک تغییر کوچک در ورودی باعث میشود خروجی کاملاً نسبت به اولی تغییر کند
- هش SHA256 فایل iso قابل دانلود Ubuntu 18.10
7b9f670c749f797a0f7481d619ce8807edac052c97e1a0df3b130c95efae4765- این ورودی یک فایل بسیار بزرگ است اما خروجی همچنان همان طول ثابت را دارد
همچنین میتوانید هش را مانند نت موسیقی در نظر بگیرید که جوهره یک قطعه موسیقی را ثبت میکند. همانطور که نت موسیقی نمایندهای منحصر به فرد از یک آهنگ است، مقدار هش نیز نمایندهای منحصر به فرد از یک داده است.
با مقایسه نت یک قطعه موسیقی با اجرای واقعی آن، یک نوازنده میتواند تشخیص دهد که اجرا دقیق است یا نه. به همین ترتیب، با مقایسه مقدار هش داده دریافتی با مقدار هش اصلی، میتوان فهمید که آیا داده در حین انتقال تغییر کرده است یا خیر.
همانطور که یک انحراف جزئی در اجرای موسیقی میتواند باعث شود آن متفاوت به نظر برسد، حتی کوچکترین تغییر در داده اصلی نیز منجر به مقدار هش متفاوتی خواهد شد. این ویژگی هش را به ابزاری قدرتمند برای اطمینان از صحت و اصالت تراکنشهای بیتکوین تبدیل میکند.
فرآیند رمزنگاری کلید عمومی از طریق هشینگ برای افزایش امنیت اطلاعات با تبدیل آن به یک قالب با طول ثابت و غیرقابل خواندن استفاده میشود. بیتکوین از الگوریتمهای SHA-256 و RIPEMD160 برای تولید آدرسهای عمومی استفاده میکند. خروجی حاصل به عنوان شناسهای منحصر به فرد برای کلید عمومی عمل میکند و به حفظ صحت و امنیت تراکنشهای ذخیرهشده در دفتر کل کمک میکند. با رمزنگاری اطلاعات به این روش، دسترسی و دستکاری دادهها برای افراد غیرمجاز دشوارتر میشود.
ویژگیهای تابع هشینگ
- قطعی بودن: همان مواد اولیه همیشه همان اسموتی را تولید میکنند. به همین صورت، داده یکسان همیشه همان هش را تولید خواهد کرد.
- مقاومت در برابر پیشتصویر: اگر فقط اسموتی را داشته باشید، نمیتوانید دقیقاً بفهمید چه میوههایی استفاده شده است. به همین ترتیب، اگر فقط هش را داشته باشید، نمیتوانید داده اصلی را به دست آورید.
- اثر بهمن: حتی تغییر جزئی در مواد اولیه باعث ایجاد اسموتی کاملاً متفاوتی میشود. در هشینگ، یک تغییر بسیار کوچک در داده، هش کاملاً متفاوتی تولید میکند.
- مقاومت در برابر برخورد: پیدا کردن دو مجموعه متفاوت از مواد اولیه که دقیقاً همان اسموتی را تولید کنند، بسیار دشوار است. به همین صورت، بسیار بعید است که دو داده متفاوت، هش یکسانی تولید کنند.
- سریع بودن در تأیید: درست کردن اسموتی سریع است و بررسی اینکه نتیجه واقعاً اسموتی است، آسان است. توابع هش سریع محاسبه میشوند و هر کسی به راحتی میتواند آن را تأیید کند.
فعالیت: تولید هش SHA 256
کنجکاوید که هشینگ چگونه کار میکند؟ کد QR را اسکن کنید تا فوراً از هر کلمه، جمله یا ورودی دلخواه خود یک هش SHA256 تولید کنید. توابع هش مانند اثر انگشت دیجیتال هستند: یکطرفهاند، یعنی وقتی چیزی هش شد، دیگر قابل بازگشت نیست. امتحان کنید و خودتان ببینید!