کریپتوگرافی (Cryptography) یا رمزنگاری دانشی است که از طریق آن میتوانیم اطلاعات و پیامها را به صورت امن منتقل و یا ذخیره کنیم. به عبارت سادهتر، دانش کریپتوگرافی به ما کمک میکند که پیام خود را به صورت محرمانه به مقصد مورد نظرمان برسانیم. کلمه Cryptography برگرفته از دو لغت یونانی Kryptos به معنای محرمانه و graphien به معنای نوشتن است.
ناگفتههای تاریخ بیت کوین؛ ورود به قلمرو علاقهمندان به رمزنگاری!
در ادامه با تعریف رمزنگاری بیشتر آشنا خواهیم شد، از مزایای آن مطلع میشویم و همینطور انواع آن را بررسی خواهیم کرد پس در ادامه با ما همراه باشید
کریپتوگرافی چیست؟

به توسعه پروتکلهایی که از مشاهده اطلاعات خصوصی توسط اشخاص ثالث جلوگیری میکنند، رمزنگاری (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 ریشه مرکل است):

نتیجه گیری
با استفاده از کریپتوگرافی یا رمزنگاری میتوانیم بستری فراهم بکنیم که کاربران با خیال راحت اطلاعات، پیام و پولهای خود را جابه جا کنند. این تکنولوژی توانسته وابستگی مردم به نهادهای واسط را کم کند و همچنین جایگزین مناسبی برای آنها باشد. رمزنگاری بخش جدانشدنی و بسیار مهم عملکرد فناوری بلاک چین است. رمزگذاری کلید عمومی به عنوان شالوده کیفهای پول و تراکنشهای بلاک چین عمل میکند. توابع هش رمزنگاری ویژگی غیرقابل تغییر بودن را ارائه میدهند و درخت مرکل به سازماندهی تراکنشها میپردازد و بلاک چین را کارآمدتر میسازد.
در دنیای مدرن امروزی که همه اطلاعات به صورت دیجیتالی ذخیره و رد و بدل می شوند، نیاز به کریپتوگرافی نه تنها برای برای فناوری های مالی بلکه برای تمام تکنولوژی احساس میشود. با رمزنگاری کردن اطلاعات میتوان از مسائل مختلفی مانند تخلفات آنلاین و جرائم سایبری جلوگیری کرد.