کریپتوگرافی چیست؟
به توسعه پروتکلهایی که از مشاهده اطلاعات خصوصی توسط اشخاص ثالث جلوگیری میکنند، رمزنگاری (Cryptography) گفته میشود. رمزنگاری مدرن ترکیبی از قواعد ریاضیات، علوم کمپیوتری، فیزیک، اینجینری و سایر موارد است. در ادامه به معرفی چند اصطلاح مهم در این خصوص میپردازیم:
رمزگذاری (Encryption): کدگذاری (Encoding) متن و تبدیل آن به فرمت غیرقابل خواندن.
رمزگشایی (Decryption): عمل معکوس کدگذاری است که طی آن، پیامهای ناخوانا به شکل اصلی خود تبدیل میشوند.
سایفر (Cipher): الگوریتمی برای اجرای کدگذاری یا کدگشایی که معمولا شامل مجموعه اقدامات مشخصی است.
رمزنگاری قبل از دوران مدرن مترادف با رمزگذاری (فرآیند تبدیل اطلاعات از فرمت قابل خواندن به متون بیمعنی) بود. روشهای رمزگذاری به دوران مصر باستان برمیگردند و در طول تاریخ وجود داشتهاند.
برای مثال، سایفر سزار (Caesar Cipher)، سایفر معروفی است که توسط ژولیوس سزار و به منظور ایجاد ارتباط ایمن با جنرالهای اردویی خود استفاده میشد. این سایفر، هر حرف موجود در پیام را به مقدار مشخصی تغییر میداد، به طوری که در تغییرات ۲ تایی، حرف A به حرف C، حرف B به حرف D و الی آخر تبدیل میشدند.
فناوری بلاک چین از رمزنگاری به چندین روش مختلف در بکسکهای پول، معاملات، امنیت و پروتکلهای حفظ حریم خصوصی استفاده میکند. در این مطلب به چند موضوع مهم رمزنگاری مرتبط با فناوری بلاک چین نظیر رمزنگاری کلید عمومی، هشینگ و درخت مرکل میپردازیم.
مزایای دانش کریپتوگرافی
در دنیای رمز ارزها با توجه به این که نهادهای نظارتی وجود ندارند، وجود تکنولوژیهای رمزنگاری موجب میشود که اعتماد مردم جلب شود و از ارزهای رمزنگاری شده استفاده کنند.
با استفاده از دانش کریپتوگرافی میتوانیم:
۱- از حفظ محرمانگی اطلاعات مطمئن شویم
به طور مثال، احمد به دنبال ارسال پیامی به محمود است. اگر پیام احمدبه صورت عادی به محمود منتقل شود، هر کسی در مسیر ارسالی پیام قرار بگیرد، میتواند از محتویات پیام باخبر شود. احمد با استفاده از تکنولوژی کریپتوگرافی میتواند پیام خود را رمزگذاری کند و برای محمود ارسال کند. محمود پیام احمد را به صورت رمزگذاری شده دریافت میکند. ولی آیا محمود میتواند رمز پیام را بازگشایی کند؟
پس قبل از ارسال پیام، احمد باید به محمود طریقه بازگشایی پیام رمزگذاری شده را یاد بدهد. در واقع احمد و محمود باید توافق کنند که هر دو از یک پروتکل کریپوتوگرافی استفاده کنند. از این به بعد، تمامی پیامهای احمد به محمود، به صورت محرمانه ارسال خواهد شد.
۲- از ارسال پیام توسط فرستنده پیام اطمینان حاصل کنیم
در مثال قبل، در نظر بگیرید که محمود منتظر دریافت پیامی از احمد باشد و پیامی دریافت کند. آیا محمود میتواند مطمئن باشد که فرستنده پیام، احمد است؟
محمود میتواند با استفاده از دانش رمزنگاری و بررسی امضای دیجیتلی احمد، مطمئن شود که فرستنده پیام، احمد بوده است. البته باید ذکر شود که این در شرایطی است که احمد از امضای دیجیتلی خود برای ارسال پیام استفاده کرده باشد.
۳- از عدم تغییر پیام فرستنده در شبکه مطمئن شویم
شرایطی را در نظر بگیرید که احمد به دنبال دریافت طلب خود از محمود است و در پیامی شماره حساب بانکی خود را برای محمود ارسال میکند. امکان این وجود دارد که کسی این پیام را مشاهده کند و شماره حساب احمد را تغییر دهد و به جای آن حساب خود را بگذارد و به دست محمود برساند.
ولی اگر احمد پیام خود را با استفاده از تکنولوژی کریپتوگرافی ارسال کند، حتی اگر کسی در طول مسیر آن را مشاهده کند، نمیتواند محتویات آن را تغییر دهد. البته همانطور که گفتیم، کریپتوگرافی دارای پروتکل های مختلفی است که فرستنده و گیرنده در استفاده از آنها به توافق میرسند. هر چقدر پروتکل کریپتوگرافی انتخاب شده پیچیدهتر باشد، امکان رمزگشایی آن توسط هکرها سختتر خواهد شد.
۴- ارسال پیام توسط فرستنده را اثبات کنیم
حالا فرض کنید احمد پیامی را برای محمود ارسال کرده است. محمود پیام را خوانده و مطابق با درخواست احمد، عمل کرده است. فردای آن روز احمد منکر ارسال پیام به محمود میشود.
تکنولوژی کریپتوگرافی به ما کمک میکند که از به وجود آمدن این مشکل جلوگیری کنیم.
دنیای ارزهای دیجیتلی چگونه از کریپتوگرافی استفاده میکند؟
یکی از راههای راه اندازی کریپتوگرافی ، استفاده از کلید عمومی (Public key) و کلید خصوصی (Private key) است. دنیای ارزهای دیجیتل با بهره بردن از این کلیدها، از تکنولوژی کریپتوگرافی در شبکه خود استفاده میکند. هر کاربر برای استفاده از ارزهای دیجیتل، نیاز به یک بکسک پول دارد. هر بکسک پول دارای یک کلید خصوصی و یک کلید عمومی است.
زمانی که شما یک بکسک پول میسازید، در ابتدا یک کلید خصوصی برای شما ساخته شده و از روی این کلید خصوصی، کلید عمومی شما ساخته میشود.
برای فهمیدن تفاوت این کلیدها، برای شما یک مثال میزنیم.
فرض کنید احمد به دنبال شغل آینده خود است و با سایت بلی افغانستان آشنا میشود. در قسمت فرصتهای شغلی، آدرس ایمیل بلی افغانستان را پیدا میکند. احمد بلافاصله وارد ایمیل خودش میشود و رزومه خود را به سایت بلی افغانستان ارسال میکند. بعد از ارسال ایمیل، احمد دیگر نمیتواند ایمیل خود را بازگرداند و همچنین نمیتواند از محتویات موجود در صندوق ایمیلهای بلی افغانستان مطلع شود.
آدرس ایمیل، در واقع همان کلید عمومی شماست. وقتی شما میخواهید پیام، پول یا اطلاعاتی از کسی دریافت کنید، کلید عمومی خود را در اختیار دیگران قرار میدهید.
در این مثال، بلی افغانستان به دنبال استخدام نیروی جدید است؛ پس کلید عمومی خود (آدرس ایمیل خود) را در اختیار کاربران قرار داده است.
برای این که شما بتوانید به محتویات موجود در صندوق ایمیل خود دسترسی داشته باشید، باید از رمز عبوری که خود آن را تنظیم کرده بودید، استفاده کنید.
در این مثال، بلی افغانستان برای این که بتواند ایمیل احمد را بخواند، بایستی از کلید خصوصی خود استفاده کند و وارد صندوق ایمیلهای خود بشود و از این طریق از محتویات پیام احمد باخبر شود.
در دنیای ارزهای دیجیتال، کلید عمومی همان آدرس بکسک پول شماست. از طریق کلید عمومی، دیگران میتوانند برای شما ارزهای دیجیتلی ارسال کنند ولی نمیتوانند به محتویات بکسک پول شما دسترسی داشته باشند. برای دسترسی پیدا کردن به محتویات بکسک پول نیاز به کلید خصوصی دارید. پس دقت کنید که کلید خصوصی خود را در اختیار دیگران قرار ندهید.
رمزنگاری کلید عمومی
رمزنگاری کلید عمومی که به آن رمزنگاری غیرمتقارن نیز گفته میشود، یک سیستم رمزنگاری است که از جفت کلید (کلید عمومی و کلید خصوصی) استفاده میکند. کلید عمومی را میتوان بدون نگرانی منتشر کرد، اما کلید خصوصی فقط باید در اختیار دارنده آن باشد. کلیدها همواره به صورت جفت ایجاد میشوند و هر کلید عمومی باید کلید خصوصی متناظر با خود را داشته باشد.
رمزنگاری کلید عمومی اکثر اوقات برای رمزگذاری پیامهای بین دو فرد یا دو کمپیوتری به صورت ایمن استفاده میشود. هر فردی میتواند از کلید عمومی فرد دیگر به منظور رمزگذاری پیامها استفاده کند، اما پس از رمزگذاری، تنها راه رمزگشایی پیامها استفاده از کلید خصوصی متناظر با کلید عمومی است.
فرض کنید آلیس میخواهد پیام رمزگذاریشدهای به باب ارسال کند. این اقدام به شرح زیر است:
- آلیس از کلید عمومی باب برای رمزگذاری پیام استفاده میکند.
- آلیس پیام رمزگذاریشده را به باب ارسال میکند. اگر شخص ثالثی در این فرایند مداخله کند، تنها چیزی که مشاهده میکند اعداد و حروف تصادفی و بیمعنی است.
- باب از کلید خصوصی خود استفاده میکند تا پیام را رمزگشایی کند و بخواند.
چارت فرایند فوق به صورت زیر است:
رمزنگاری کلید عمومی، المان اصلی و بنیادین فناوری بلاک چین (فناوری موجود در بکسک پول و معاملات) است. هنگامی که کاربر، بکسک پولی در بلاک چین ایجاد میکند، همزمان جفت کلید عمومی و خصوصی تولید میشود.
آدرس این بکسک پول، یک رشته از اعداد و حروف است که از کلید عمومی تولید میشوند. به دلیل ماهیت فناوری بلاک چین، این آدرس در دسترس عموم است و به منظور بررسی موجودی بکسک پول یا ارسال کوین به آن بکسک پول میتوان از آن استفاده کرد.
کلید خصوصی موجود در بکسک پول، روشی است که میتوان مالکیت و تحت کنترل بودن بکسک پول را اثبات کرد. کلید خصوصی تنها روش ارسال کوین از بکسک پول است و از دست دادن آن به معنای از دست دادن کوینهای داخل بکسک پول است.
معامله بر بستر بلاک چین چیزی فراتر از انتشار پیامی نیست که بیان میکند “مقدار X کوین از بکسک پول من بردار و آن را بکسک پول دیگر ارسال کن”. پس از تایید، معامله غیرقابل تغییر شده و بر روی دفتر کل نوشته میشود. همزمان، موجودی نیز بهروزرسانی میشود.
این پیام معامله به امضا از جانب کلید خصوصی بکسک پول ارسالکننده نیاز دارد تا تایید شود. پس از انتشار پیام، تمام کاربران میتوانند از کلید عمومی بکسک پول استفاده کنند تا اطمینان حاصل کنند که امضای دیجیتال ارسالشده از کلید خصوصی، منحصربهفرد است. این مورد، یکی از وظایف تاییدکنندگان بلاک قبل از افزودن معامله (یا همان پیام) به بلاک چین است.
هشینگ رمزنگاری
هشینگ رمزنگاری یکی دیگر از مولفههای اصلی فناوری بلاک چین است و مستقیما مسئول ایجاد ویژگی غیرقابل تغییر بودن پیام است.
هشینگ یکی از اصطلاحات علوم کمپیوتری و به معنای دریافت یک رشته ورودی به طول متغیر و ایجاد یک خروجی به طول ثابت است. فرقی ندارد که ورودی به تابع هش دارای ۳ یا ۱۰۰ کاراکتر باشد، زیرا خروجی همواره طول یکسانی خواهد داشت.
توابع هش رمزنگاری از دسته توابع هش هستند که مشخصههای مهم زیر را دارند:
قطعی هستند: فرقی ندارد که چند بار یک ورودی مشخص را به تابع بدهید، زیرا خروجی همواره یکسان است.
برگشت ناپذیر هستند: تعیین ورودی از خروجی تابع غیرممکن است.
کاملا تفکیک پذیر هستند: هیچ دو ورودی متفاوتی نمیتوانند خروجی مشترکی داشته باشند. یکی دیگر از ویژگیهای مهم تابع هش رمزنگاری این است که اندکی تغییر در اطلاعات ورودی منجر به تغییر چشمگیری در خروجی میشود. برای مثال، خروجیهای 111111 و 111112 کاملا منحصربهفرد هستند و ارتباطی با یکدیگر ندارند.
رایجترین کاربرد توابع هش رمزنگاری، ذخیرهسازی رمز عبور است. اکثر وبسایتها رمز عبور شما را ذخیره نمیکنند، بلکه هش رمز عبور شما را ذخیره میکنند و هنگامی که رمز عبور خود را وارد میکنید، بررسی میکنند که آیا با هش موردنظر مطابقت دارد یا خیر. اگر هکر به دیتابیس وبسایت نفوذ کند، فقط به هشهای برگشت ناپذیر رمز عبور دسترسی پیدا میکند.
هشینگ رمزنگاری چگونه تغییرناپذیری را برای فناوری بلاک چین امکانپذیر میسازد؟ پاسخ این است که هر بلاک جدیدی از اطلاعات شامل یک خروجی هش از تمام اطلاعات بلاک قبلی است.
بلاک چینی را در نظر بگیرید که هزارمین بلاک به آن افزوده شده است. اطلاعات بلاک ۹۹۹ در بلاک ۱۰۰۰ به عنوان یک خروجی تابع هش وجود دارد. در بلاک ۹۹۹ نیز هش اطلاعات بلاک ۹۹۸ وجود دارد که این هش نیز شامل هش اطلاعات بلاک ۹۹۷ است.
با پیروی از هشهای قبلی متوجه میشویم که هر بلاک از بلاک ۱۰۰۰ تا ۱ با هشینگ رمزنگاری به یکدیگر متصل هستند. نمودار این ساختار در شکل زیر نشان داده شده است:
این فرایند، همان چیزی است که اطلاعات موجود در بلاک چین را غیرقابل تغییر میکند. اگر فردی بخواهد فقط یک بیت اطلاعات در هر کدام از بلاکهای قبلی را تغییر دهد، نه تنها خروجی هش اطلاعات آن بلاک موردنظر تغییر میکند، بلکه شاهد تغییر تمام بلاکهای بعد از آن نیز هستیم. ماینرها و نودهای شبکه سریعا متوجه میشوند که هشهای به دستآمده با نسخهای که از زنجیره در اختیار دارند مطابقت ندارد و تغییر ایجادشده را تایید نمیکنند.
گفتنی است که بیت کوین از تابع هش رمزنگاری SHA-256 و اتریوم از تابع هش رمزنگاری keccak256 استفاده میکنند.
درخت مرکل
نمودار فوق، نسخه سادهای از بلاک چین است که شامل بعضی از اطلاعات مهم نمیشود. فلشهای این نمودار نشان میدهد که معاملاتی هر بلاک در ریشه مرکل ذخیره میشوند. ریشه مرکل، نود اصلی درخت مرکل است.
به منظور درک بهتر میتوان گفت که درخت، یک اصطلاح علوم کمپیوتری برای ذخیره اطلاعات در ساختار سلسله مراتبی به شکل درخت است که در آن، به بیتهای اطلاعات، نود گفته میشود. یک نود اصلی (نود ریشه) وجود دارد که نودهای فرزند (child node) در زیر آن قرار میگیرند و این نودهای فرزند نیز دارای نودهای فرزند دیگری هستند و الی آخر. نمودار ساختار درختی اطلاعات به صورت زیر است:
همانطور که در نمودار مشخص است، به گروه نودها در درخت، درختهای فرعی (sub-tree) و به نود بدون فرزند، نود برگ (leaf node) گفته میشود.
درخت مرکل درختی است که از توابع هش رمزنگاری استفاده میکند تا به جای اطلاعات خام هر نود، خروجیهای هش را ذخیره کند. هر نود برگ شامل یک هش رمزنگاری از اطلاعات اصلی خود است و هر نود مادر (parent node)، شامل یک هش از مجموع هشهای نودهای فرزند است.
ریشه مرکل همان نود اصلی درخت مرکل بوده و بیانگر خروجی هش مجموع هشهای درختهای فرعی سمت چپ و راست است. نمودار درخت مرکل با ۴ نود برگ به صورت زیر است:
هر نود برگ گویای هش اطلاعات معاملاتی A، B، C و D است. سپس هش A و هش B ترکیب و هش شدهاند تا هش AB ایجاد شوند. همچنین هش CD نیز به همین صورت ایجاد شده است. در آخر، هش AB و هش CD ترکیب و هش شدهاند تا ریشه مرکل را تشکیل دهند.
چرا درخت مرکل برای فناوری بلاک چین مهم است؟
با استفاده از ریشه مرکل و بهکارگیری ویژگیهای توابع هش رمزنگاری میتوان سریعا متوجه شد که آیا معاملاتی موجود در بلاک دستکاری شدهاند یا خیر و معامله دستکاریشده را مشخص کرد.
اگر یک معامله در بلاک تاییدشده، تغییر کند، ریشه مرکل آن بلاک کاملا با ریشه مرکل صحیح متفاوت خواهد بود و دستکاری در بلاک مشخص میشود.
درخت مرکل همچنین به کاربران امکان میدهد تا بدون دانلود کردن کل بلاک چین، بررسی کنند که آیا معاملاتی آنها در بلاک قرار گرفته است یا خیر. فرایندهایی نظیر بررسی ساده پرداخت (Simplified Payment Verification) میتوانند در شاخههای درخت مرکل حرکت و بررسی کنند که آیا معامله موردنظر در آن درخت هش شده است یا خیر. سطح بالای کارآمدی و راندمان فناوری بلاک چین بدون وجود ریشه مرکل در هر بلاک غیرممکن خواهد بود.
نمودار درخت مرکل ۴ معامله در بلاک چین به شرح زیر است (در این نمودار، Tx_Root ریشه مرکل است):
نتیجه گیری
با استفاده از کریپتوگرافی یا رمزنگاری میتوانیم بستری فراهم بکنیم که کاربران با خیال راحت اطلاعات، پیام و پولهای خود را جابه جا کنند. این تکنولوژی توانسته وابستگی مردم به نهادهای واسط را کم کند و همچنین جایگزین مناسبی برای آنها باشد. رمزنگاری بخش جدانشدنی و بسیار مهم عملکرد فناوری بلاک چین است. رمزگذاری کلید عمومی به عنوان شالوده بکسکهای پول و معاملاتی بلاک چین عمل میکند. توابع هش رمزنگاری ویژگی غیرقابل تغییر بودن را ارائه میدهند و درخت مرکل به سازماندهی معاملات میپردازد و بلاک چین را کارآمدتر میسازد.
در دنیای مدرن امروزی که همه اطلاعات به صورت دیجیتلی ذخیره و رد و بدل می شوند، نیاز به کریپتوگرافی نه تنها برای برای فناوری های مالی بلکه برای تمام تکنولوژی احساس میشود. با رمزنگاری کردن اطلاعات میتوان از مسائل مختلفی مانند تخلفات آنلاین و جرائم سایبری جلوگیری کرد.