در زبان یونانی، “کریپتو” (Kryptos) به معنای رمز و “گرافی” (graphien) به معنای نگارش است. ترکیب این دو کلمه “کریپتوگرافی” را میسازد که دانش تبدیل اطلاعات به رمز میباشد.
این لفظ با ارزهای دیجیتال به شهرت رسید. محبوبیت این لغت به حدی است که اکثر افراد به اشتباه همه ارزهای دیجیتال را کریپتو مینامند. مسلماً درست این است رمزارزها را به عنوان زیر مجموعهای از ارزهای دیجیتال در نظر بگیریم که در دسته کریپتوکارنسیها قرار میگیرند.
در طول این مقاله تلاش خواهیم کرد که به زبان ساده به تعریف کریپتوگرافی بپردازیم و جایگاه آن را در ارزهای دیجیتال کریپتویی ارزیابی کنیم.
کریپتوگرافی در ارزهای رمزپایه یا رمزارزها
ارزهای دیجیتال انواع مختلف دارند. از اوایل سال 1990 تلاشها برای توسعه یک ارز دیجیتال آغاز شد. برنامهنویسان و آشنایان به فناوریهای دیجیتال همگی تلاش داشتند تا ارز دیجیتالی معتبر و امن را توسعه دهند.
این تلاشها منجر به توسعه ارزهایی همچون “دیجی کش” (DigiCash)، “هش کش” (HashCash) و “بیت گلد” (Bit Gold) شد. همه این ارزها در نهایت دارای اشکالاتی بودند و نمیتوانستند یک ابزار مالی امن و کارآمد را معرفی کنند.
شاید بپرسید چه مشکلاتی باید حل میشد و چه موانعی در مقابل توسعه یک ارز دیجیتال قدرتمند بوده است؟ خب باید در نظر داشته باشید که ارز دیجیتال مربوط به دو حوزه “اقتصاد” و “فناوری” میشود. هر کدام از این حوزهها دارای استانداردهای متفاوتی هستند که باید برآورده شود.
حوزه فناوری و جهان دیجیتال بسیار گسترده است و با شعار “جهان باز” تلاش دارد تا مرزها را از بین ببرد. اما مسلماً در حوزه اقتصاد، ما نمیخواهیم که اطلاعات و داراییهایمان به اشتراک گذاشته شوند و در معرض دید یا دسترسی عموم باشند. از سوی دیگر، اطلاعات مربوط به داراییها باید به صورت شفاف ثبت شده و از سوی همه اعضا قابل استناد باشند. چگونه میتوان این مشکل را حل کرد؟
بیت گلد شاید نزدیکترین ارز دیجیتال به رمزارزهای امروزی است و شباهت بسیار زیادی به بیت کوین- قدرتمندترین و کماشکالترین ارز دیجیتال دوره خود- دارد. شباهت این دو ارز دیجیتال به حدی است که برخی معتقدند که نیک سابو (Nick Szabo)، مؤسس بیت گلد، همان ساتوشی ناکاموتو (Satoshi Nakamoto) است که حدوداً ده سال بعد بیت کوین را ساخت.

بیت گلد از کریپتوگرافی و استخراج برای دستیابی به تمرکززدایی استفاده میکرد تا قدرت را از چنگال یک شبکه متمرکز واحد (همچون دولت یا بانکها) بگیرد. هر دسته از اطلاعات وارد یک بلاک میشد که از طریق کریپتوگرافی یک مُهر زمانی میخورد.
این پروژه هیچگاه به صورت عملیاتی در نیامد. هر چند اکثر کارشناسان بر این عقیدهاند که همه چیز از همین پروژه آغاز شد و مسیر را به پروژههایی همچون بیت کوین نشان داد.
بیت کوین
بیت کوین در سال 2008 انقلابی در صنعت ارزهای دیجیتال به راه انداخت. اگرچه بیت گلد هم در وهله اول برای حل مشکلات سایر ارزهای دیجیتال به وجود آمده بود، اما این بیت کوین بود که توانست گام را حتی پیشتر بگذارد و تبدیل به بیعیبترین رمزارز شود که حتی بعد از ده سال هنوز هم تقاضای بالایی دارد.
پیش از بیت کوین، مهمترین مشکلی که همه ارزهای دیجیتال داشتند مربوط به مفهوم “دو بار خرجکردن” (Double Spending) بود. این مشکل زمانی به وجود میآمد که یک کوین بیش از یک بار در تراکنشهای مختلف به کار برود.

این اتفاق زمانی میافتاد که فرد همزمان دو تراکنش مشابه را ثبت میکرد و هر دو همزمان تأیید میشدند. گاهی اوقات هم شبکه قادر به کسر دارایی دیجیتال از حساب فرد نبود. بدین ترتیب، فرد میتوانست باز هم از دارایی خود استفاده کند و بار دیگر آن را خرج کند.
بیت کوین (یا سایر کوینها و توکنهای ارز دیجیتال) ماهیت فیزیکی ندارند و صرفاً یک کد هستند. ساتوشی ناکاموتو از طریق معرفی کلیدهای عمومی و خصوصی تلاش کرد که بیت کوین را به عنوان یک ارز بیاشکال و کارآمد معرفی کند.

در ادامه به صورت مفصل به کلیدهای عمومی و خصوصی خواهیم پرداخت. در اینجا به صورت مختصر باید بدانید که کلید عمومی همانند شماره کارت بانکی است و صرفاً از طریق آن میتوان درون کیف پول و حساب فرد را دید. کلید خصوصی مهمتر بوده و مدیریت داراییها از طریق آن انجام میگیرد و نباید در اختیار سایرین قرار بگیرد.
هر کسی کلید خصوصی منحصر به فرد خود را دارد. کلید عمومی از کلید خصوصی به دست میآید و میتواند در اختیار سایرین قرار بگیرد. این دو کلید به عنوان امضا دیجیتال استفاده میشوند و اطلاعات را به فرستنده یا گیرنده آن مرتبط میسازند.
بیت کوین، برخلاف بیت گلد، دارای یک عرضه مشخص بود که باعث میشد یک ارز تورمزدا به وجود بیاید. مقدار استخراج این ارز هم از طریق ویژگی سختی شبکه (Network Difficulty) تنظیم میشد تا بدین ترتیب مقدار عرضه مدیریت شود. این دو ویژگی عملاً بیت کوین را تبدیل به یک ارز مردمی میکرد که هیچ واسطهای نمیتوانست برای کنترل بازار آن اقدام به عرضه مضاعف کند.
دو فناوری مهم در بیت کوین مورد استفاده قرار گرفت. یکی از این فناوریها همان بلاکچین بود. اطلاعات در بلاکها ثبت میشد و بین اعضا به اشتراک گذاشته میشد.
فناوری دوم رمزنگاری است که موضوع این مقاله است. همه اطلاعات موجود در بلاکچین به صورت رمزنگاریشده در میآمدند.
تاریخچه کریپتوگرافی یا رمزنگاری
کریپتوگرافی یا رمزنگاری به دوران مصر باستان باز میگردد. در رمزنگاری از یک مکانیزم رمزنگاری استفاده میشود که از اصول ریاضی (یا فیزیک، مهندسی و غیره) پیروی میکند و یک متن رمزنگاریشده را به عنوان خروجی ارائه میدهد.
مکانیزمهای رمزنگاری به عنوان “سایفر” (Cipher) یاد میشوند که از فرمولهای مختلف برای ایجاد یک خروجی رمزآمیز استفاده میکنند. متن سایفر، برخلاف پلین تکست (Plain text: متن ساده)، غیر قابل خواندن است.
رمزنگاری همیشه به قصد حفظ حریم شخصی و مخفی نگاه داشتن اطلاعات از سایرین انجام نمیگیرد. اتفاقاً برعکس!
خیلی اوقات (خصوصاً در دوران جنگ) رمزنگاریها با هدف رمزگشایی انجام میشود. در واقع، گیرنده پیام باید بتواند محتوای رمزنگاریشده را رمزگشایی کند.
یکی از ابتداییترین مثالهایی که برای این نوع سایفر به میان میآید، مفهوم “تحمل خطای بیزانس” (Byzantine Fault Tolerance) است. در این مفهوم، دو طرف یک تبادل اطلاعات باید نسبت به سایفر مورد نظر آگاه باشند تا بتوانند آن را رمزنگاری و رمزگشایی کنند.
برای مثال، یکی از سادهترین و ابتداییترین سایفرهای جهان “سایفر سزار” (Caesar Cipher) است که سه حرف به هر کدام از حروف اضافه میکرد. اگر فرستنده و گیرنده با هم نسبت به رمزنگاری و رمزگشایی آگاه باشند، جای نگرانی نیست و گیرنده میتواند طبق فرمول تصویبشده متن مورد نظر را رمزگشایی کند.

این کار برای این انجام میشد که مطمئن شوند کسی در میانه راه متن را دستکاری نکرده یا نمیخواند. در ارزهای دیجیتال هم، به عنوان یک ساختار غیر متمرکز، نیاز است که از درستی رفتار اعضا مطمئن شوید. اما چگونه میتوان بدون اطلاع از هویت افراد از درستی رفتار آنها مطمئن شد؟
نحوه امضای دیجیتال اطلاعات در ارزهای دیجیتال
اطلاعات در دنیای کریپتو دارای دو کلید عمومی و خصوصی است. هر کدام از این کلیدها یک رشته حروف و اعداد میباشد که نماینده یک اطلاعات اصلی است یا صرفاً خود همین اطلاعات حائز اهمیت است.
از بین این دو نوع کلید، کلید خصوصی دارای ارزش بیشتری است و برای نگهداری و انتقال کوین به یک کیف پول به کار میرود.
در همان ابتدای درست کردن کیف پول، یک کلید خصوصی به شما اختصاص داده میشود. کلید عمومی شما هم متناظر با این کلید خصوصی به دست میآید. توجه داشته باشید که اگر چه این دو کلید متناظر با یکدیگرند اما نمیتوان از یک کلید به کلید دیگر رسید.
رمزنگاری و رمزگشایی از طریق دو کلید
ابتدا فرستنده باید آدرس عمومی گیرنده را بگیرد و از آن برای رمزنگاری اطلاعات استفاده کند. اطلاعات در قالب اعداد و حروف در میآید و یک شخص ثالث به هیچ وجه نمیتواند متوجه اصل اطلاعات شود.
گیرنده هم میتواند از کلید خصوصی خود برای رمزگشایی اطلاعات استفاده کند. با توجه به متناظر بودن کلید عمومی و خصوصی، وی قادر خواهد بود که پیام مبدأ را باز کند زیرا با کلید عمومی خودش رمزنگاری شده است.

برای تفهیم بهتر مطلب، میتوانید کلید عمومی را همچون شماره کارت بانکی بدانید و کلید خصوصی شبیه به رمز عبور کارت شماست. کلید خصوصی خود را نباید در اختیار هیچکس قرار دهید. اصولاً این کلید خصوصی در قالب 12 کلمه به شما ارائه میشود تا قابل خواندن و ذخیرهسازی باشد.
هشینگ (Hashing)
هش کردن یا هشینگ از جمله مهمترین ابزار رمزنگاری در حوزه بلاکچین است. هشینگ از اصطلاحات علوم رایانه است که یک رشته اعداد و حروف را به عنوان رمز خروجی ارائه میدهد.
هش دارای ویژگیهای خاص است:
- مهم نیست که عبارت ورودی چه میزان باشد، عبارت خروجی همیشه دارای یک طول معین (بر حسب الگوریتم هش مورد استفاده) میباشد.
- با کمترین تغییر در مقدار ورودی، مقدار خروجی کاملاً تغییر خواهد کرد.
- توابع هش برگشتپذیر نیستند. یعنی از مقدار خروجی نمیتوان به مقدار ورودی رسید.
- مقدار خروجی همیشه یکسان است. اگر چه هش نهایی با کمترین تغییر متفاوت خواهد شد، اما اگر یک دسته اطلاعات یکسان را وارد فرایند هش کنید اطلاعات خروجی همیشه یکسان خواهند بود.
پیش از ارزهای دیجیتال، از توابع هش برای ذخیره رمز عبور کاربران استفاده میشد. بدین ترتیب، سایت مورد نظر رمز عبور شما را ذخیره نمیکرد، بلکه آن را هش میکرد و فقط هش آن را نگه میداشت. در نتیجه، حتی در صورت دسترسی هکر به دیتابیس باز هم جای نگرانی نیست زیرا وی فقط هشهایی را خواهد دید که قابل بازگشت نیستند.
در ارزهای دیجیتال هم از برخی از بهترین و امنترین توابع هش برای رمزنگاری اطلاعات استفاده میشود. برای مثال بیت کوین الگوریتم “SHA-256” را برای تهیه خروجی رمزنگاریشده به کار میبرد که به دلیل استفاده از فرمولها و ساختار پیچیده ریاضی فعلاً قابل هک نیست. این الگوریتم ایجاد هش توسط “سازمان امنیت ملی آمریکا” (NSA) ابداع شده است.

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

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

اگر کوچکترین جزئی از اطلاعات در هر کدام از تراکنشها تغییر کند، به لطف فناوری هش نهتنها هش همان تراکنش تغییر خواهد کرد بلکه هش آن بلاک و بلاکهای بعدی هم تغییر خواهد کرد. ماینرهای شبکه سریعاً متوجه میشوند که این نسخه از بلاکچین با نسخه تأییدشده مطابقت ندارد و آن را حذف میکنند.
ساخت بلاک جدید و کریپتوگرافی
در فرایند ساخت بلاک جدید، ماینر باید یک عدد (عدد نانس: nonce) را حدس بزند. این عدد دارای ارقام بسیار نجومی و بالایی است. همین موضوع باعث میشود که حدس زدن آن نیاز به دستگاههای فوق پیشرفته کامپیوتری داشته باشد.
هر بلاک دارای چهار مؤلفه اصلی است:
- هش قبلی
- برچسب زمانی
- ریشه درخت مرکل
- عدد نانس

در مورد عدد نانس به حد کافی صحبت کردیم.
ثبت اطلاعات به ترتیب زمانی از دغدغههای اصلی توسعه ارزهای دیجیتال بودند. به همین دلیل است که در هش هر بلاک باید یک برچسب زمانی هم ضمیمه اطلاعات شود.
برای اتصال زنجیرهوار اطلاعات باید هر ماینر از هش سربرگ بلاک قبلی هم استفاده کند. هدر هر بلاک همان هش هر بلاک است که نتیجه هر چهار مؤلفه برای آن بلاک است.
ریشه درخت مرکل هم به طور مفصل پیش از این بررسی شد. هر تراکنش به یک هش تبدیل میشود و هش هر دو تراکنش با هم ادغام میشوند و یک هش را ایجاد میکنند. این فرایند تا زمانی ادامه پیدا میکند که فقط یک هش باقی بماند که نماینده همه اطلاعات باشد. این هش همان “ریشه درخت مرکل” است.
کاربرد کریپتوگرافی
علاوه بر حفظ حریم شخصی (که در بالا به آن اشاره شد)، با استفاده از کریپتوگرافی میتوانید کاربردهای دیگری را نیز محقق کنید.

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