
این مقاله به بررسی نسبتا مفصلی از روند رمزنگاری به کار رفته در زی کش، یکی از بحث برانگیزترین رمز ارز هایی که تاکنون به جامعه رمز ارز ها عرضه شده اند، میپردازد.
به لحاظ فنی، زی کش را میتوان به نوعی پاسخی از سوی برخی از جوامع دانشگاهی به پدیده بیت کوین دانست تا بلکه بتوانند با استفاده از رمزنگاری، آخرین ویژگی مهم پول نقد یعنی تعویض پذیری fungibility را به یک رمز ارز ببخشند.
پشتوانه علمیآنها و ادعای ایجاد رمز ارز ی به عنوان جایگزین بیت کوین، باعث شد تا زی کش در زمان راه اندازی 28 اکتبر 2016 بیشترین استقبال را از سوی اهالی جامعه رمز ارز ها دریافت کند.
خوش بینی و اطمینان به موفقیت زی کش باعث شد تا زی کش باقیمت های نجومیخریدوفروش شود و موقتاً به بالاترین قیمت تاکنون مبادله شده یعنی 3,299.99 بیت کوین یعنی معادل 2.3 میلیون دلار برای هر زی کش رسید.
اگرچه امروز زی کش یک پول تثبیت شده است، اما دیگر خوش بینی و جو زدگی درباره آینده آن وجود ندارد. امروز که این شور و حال پیرامون زی کش فروکش کرده است، شاید بهتر بتوان به ظهور زی کش و جوانب رمزنگاری آن نگاه دقیق تر و واقع بینانه تری انداخت.
یک تاریخچه کوتاه
زی کش حاصل همکاری تیم zerocoin از دانشگاه جانز هاپکینز با یک متخصص علوم کامپیوتر در کلرادو به نام زوکو ویلکس (Zooko Wilcox) در سال 2014 است.
تیم zerocoin پیش تر در سال 2013 این کوین را راه اندازی کرده بودند که میخواستند مسئله حفظ حریم خصوصی یعنی اینکه تراکنش های بیت کوین شفاف هستند را حل کنند.
البته مونرو و دش هم هرکدام به نوعی تلاش کرده اند تا تراکنش های گمنام را میسر سازند. اما بنیان گذاران زی کش، که امروزه بنیاد غیرانتفاعی زی کش را تأسیس کرده اند، تنها با رجوع به رمزنگاری این مسئله را حل میکنند. ما در ادامه تلاش میکنیم این رمزنگاری را به زبان ساده توضیح دهیم.
بررسی رمزنگاری مورد استفاده در زی کش
اگرچه این بحث میتواند مفصل و پیچیده باشد، ما تلاش میکنیم با رجوع به رمزنگاری نشان دهیم که زی کش چگونه مسئله تعویض پذیری یا حفظ حریم خصوصی را حل میکند. پول نقد اصطلاحاً تعویض پذیر یا fungible است یعنی ده دلار من با دلار شما هیچ تفاوتی ندارد.
روی یک اسکناس یک دلاری، نام صاحبش نوشته نشده است و معلوم هم نیست که این پول چطور و چقدر دست به دست شده است. اما یک بیت کوین همیشه بیت کوین متعلق به آدرس کیف پول یک نفر است و از این نظر مشابه حساب بانکی است. پس بیت کوین دقیقا مانند پول نقد تعویض پذیر نیست.
اگر شما بیت کوین خود را مبادله کنید، اطلاعات مربوط به تراکنش یعنی میزان پول و آدرس یا کلید عمومیشما روی بلاک چین قابل مشاهده و ردیابی است.
پیش تر گفتیم که بنیان گذاران زی کش، زیروکوین (zerocoin) را ابداع کرده بودند. زیروکوین از روش minting یا سوزاندن پول استفاده میکرد.
تصور کنید که شما از عابر بانک مقداری پول را به صورت اسکناس بیرون میکشید. ازاینجا به بعد، پول شما تعویض پذیر است و به حساب شما وابسته نیست.
فرآیند minting هم مانند همین نقد کردن پول از حساب بانکی عمل میکند. پس تاریخ تراکنش ها دیگر نامعلوم است و شما پولی گمنام در اختیار دارید که در یک آدرس جعلی قرار دارد. اما برخلاف پول نقد، شما برای خرج کردن باید بتوانید ثابت کنید که این پول را قبلاً سوزانده اید و یا به بیانی واقعاً از حسابتان بیرون کشیده اید.
برای اثبات این قضیه از گواه دانش صفر zero-knowledge proof استفاده میشد تا فرستنده بتواند ثابت کند که دارای یک شماره سریالی است که قبلاً به وی داده شده در مورد عابر بانک یک شماره رسید را فرض کنید، بدون اینکه این شماره سریال را به ماینر لو بدهد.
گواه دانش صفر به روشی در رمزنگاری گفته میشود که شما به طرف مقابل اثبات میکنید که دارای اطلاعاتی هستید بدون اینکه این اطلاعات را واقعا به وی بدهید.
اما روش به کار رفته در رمزنگاری زیروکوین دارای مشکلات فنی بود، این روش نیازمند استفاده از 25 کیلوبایت حافظه بود که برای بلاک چین بسیار سنگین محسوب میشود.
همچنین این شماره سریال لازم بود تا چند بار چک شود و این امر فرآیند تایید مبادله را بسیار وقت گیر میساخت. زی کش برای حل این دو مشکل، از شکل دیگری از گواه دانش صفر به نام zk-SNARK استفاده میکند که مخفف عبارت Zero-Knowledge Succinct Non-Interactive Argument of Knowledge است.
کلمه Succinct نشان میدهد که اطلاعات انتقال یافته بسیار موجز و کوتاه است طوری که چندصد بایت کافی است.
همچنین این روش غیرتعاملی یا Non-Interactive است، یعنی گواه دانش صفر نیازمند تعامل بین اثبات کننده کسی که اثبات میکند دارای اطلاعات مربوطه است و در واقع همان ارسال کننده تراکنش است که ثابت میکند دارنده یک کلید خصوصی است و تأییدکننده یعنی کسی که بدون دانستن اطلاعات یا همان کلید خصوصی، تأیید میکند که آن فرد دارای یک امضای خاص دارنده آن اطلاعات یا کلید خصوصی است.
استفاده از مثال کارت سبز و کارت قرمز برای تشریح الگوریتم زی کش
این دو ویژگی موجز بودن و غیرتعاملی بودن، دو مشکل مطرح شده در زیروکوین را حل میکرد یعنی حجم اطلاعات بالا و زمان بر بودن.
صورت مسئله ساده است: بدون نیاز به سوزاندن پول یا minting، صاحب یک پول اثبات میکند که دارنده یک کلید خصوصی است بدون اینکه آن کلید خصوصی را لو بدهد.
به این ترتیب برای تأییدکننده اثبات میشود که یک امضای مشخص با یک کلید خصوصی مطابقت دارد بی آنکه آن کلید خصوصی را اصلا بداند. بهتر است ابتدا یک مثال ساده از گواه دانش صفر بیاوریم.
فردی را تصور کنید که کوررنگی دارد به نحوی که مطلقا قادر نیست بین دو کارت سبز و قرمزرنگ که به جز در رنگ از هرجهتی با هم مشابه هستند، تمیز دهد.
اکنون تصور کنید شما میخواهید به وی اثبات کنید که این دو کارت باهم متفاوت هستند اما نمیخواهید به وی بگویید که دقیقا کدام کارت قرمز است و کدام کارت سبز رنگ. پس این میتواند یک نمونه از گواه دانش صفر باشد زیرا شما دانش خود به چیزی را ثابت میکنید بدون اینکه اطلاعاتی را لو بدهید.
برای انجام این کار، وی دو کارت را در پشت خود پنهان میکند و یکی از این دو کارت را بیرون میآورد و به شما نشان میدهد. سپس دوباره کارت ها را در پشت خود قایم کرده و این دفعه انتخاب میکند که آیا همان کارت را بیرون بیاورد یا کارت دیگر را.
شما با توجه به رنگ به راحتی میتوانید بگویید که آیا این همان کارت قبلی است یا خیر. اگر این بازی به تعداد کافی تکرار شود، برای فرد کور رنگ اثبات میشود که رنگ این دو کارت متفاوت است بی آنکه شما به وی گفته باشید که کدام یک قرمز رنگ است و کدام یک سبز رنگ.
اما در این مثال، گواه دانش صفر نیازمند یک فرآیند تعاملی مکرر یعنی همین بازی نشان دادن کارت ها است. اما در مورد رمزنگاری زی کش باید یک روش غیرتعاملی به کاربرد یعنی اثبات کننده تنها یک بار اطلاعات کد شده را بفرستد و یکبار توسط تأییدکننده تأیید شود که وی دارنده آن اطلاعات است جدا از اینکه این باید با محاسبات ریاضی و به صورت خودکار و بدون تصمیم گیری انسانی انجام شود. اما واقعاً زی کش چگونه این مسئله را حل میکند؟ شاید کافی باشد که بگوییم که زی کش از روش های رمزنگاری استفاده میکند، اما خالی از لطف نخواهد بود اگر اندکی به عمق قضیه برویم.
در رمزنگاری، لازم است که از عملیات ریاضیاتی برگشت ناپذیر استفاده شود یعنی از خروجی، نتوان ورودی را به دست آورد. چهار عمل اصلی ریاضی یعنی جمع، تفریق، ضرب و تقسیم این ویژگی را ندارند.
اگر 28 را بر 7 تقسیم کنیم، حاصل عدد 4 است، پس با دانستن چهار و هفت در این معادله ساده میتوان با عملیات معکوس یعنی ضرب، عدد 28 را دوباره به دست آورد.
بنابراین رمزنگاران معمولا از mod یا باقی مانده به عنوان یک عملیات ریاضی برگشت ناپذیر استفاده میکنند. برای مثال:16 mod 5=1یعنی باقی مانده حاصل از تقسیم عدد 16 بر 5، عدد 1 است. با این حال، عدد 1 باقی مانده معادله های دیگر هم میتواند باشد مثلا: 11mode 5=1برخلاف عملیات ضرب و تقسیم یا جمع و تفریق، در اینجا با دانستن عدد 1 و 5 نمیتوانیم حدس بزنیم که عدد اصلی چیست.
16 و 11 یا اعداد بسیار دیگری میتوانند پاسخ باشند. پس عملیات باقی مانده یک عملیات برگشت ناپذیر است یعنی همان ویژگی را دارد که ما به دنبال آن هستیم. اما عملیات باقی مانده یک ویژگی دیگر هم دارد و آن اینکه میتوانند گروه های چرخشی (cyclic groups) تشکیل دهند.
اگر بین اعداد مشخصی {1,2,…p}، عملیات باقی مانده انجام دهیم، مشخصا نتیجه همیشه عددی داخل همین گروه باقی میماند. به این ترتیب، میسر خواهد بود که ما توابعی به نام Homomorphic Hiding به دست بیاوریم. این توابع چند ویژگی مهم دارند.
اول اینکه اگر ما دو تابع Ex و Ey را بدانیم، پس میتوانیم بدون دانستن مقادیر x و y، عبارات ریاضیاتی مانند Ex+y را محاسبه کنیم زیرا:Ex+y=Ex.Eyدوم اینکه این توابع به نحوی هستند که اگر x و y با هم برابر نباشند، پس حتما Ex و Ey هم باهم برابر نخواهند بود یعنی برای هر Ex یک و فقط یک x وجود دارد و سوم اینکه با دانستن Exبه خاطر عملیات باقی مانده، x را نمیتوان به دست آورد یا بسیار به سختی بتوان به دست آورد یعنی همان طور که گفتیم برگشت ناپذیر هستند.از طرف دیگر، عبارات ریاضی چندجمله ای ترکیبی خطی هستند مثل a0+a1×X+a2×X2+…+ad×Xd .
در رمزنگاری زی کش اطلاعات اثبات کننده یعنی اطلاعاتی که قرار است به تأیید برسد بدون آنکه محتوایش لو برود، به صورت عبارات ریاضی چندجمله ای در میآید.
اثبات کننده این عبارت ریاضی چندجمله ای برای مثال تابع P را میداند اما تأییدکننده از آن اطلاع ندارد، تأییدکننده فقط ضرایب چندجمله ای را میداند اما نمیداند که کدام ضریب به کدام متغیر درجه دار تعلق دارد. مطابق روش گواه دانش صفر، تأییدکننده میخواهد بداند که آیا وی این عبارت چندجمله ای را میداند یا خیر بی آنکه اثبات کننده لازم باشد آن را لو بدهد.
راه حل این به این نحو است که تأییدکننده یک مقدار s از ضرایب تابع چندجمله ای انتخاب میکند، سپس به جای ارسال خود عدد s، توابع E آن را E1,Es,…,Esd را برای فرستنده ارسال کند. در اینجا E همان توابع Homomorphic Hiding هستند با همان ویژگی هایی که برشمردیم.
تأییدکننده از فرستنده میخواهد که مقدار EPs را حل کند. فرستنده از مقدار s اطلاع ندارد زیرا همان طور که گفتیم از این توابع به خاطر عملیات باقی مانده در آن نمیتوان به مقادیر اصلی یعنیs رسید. اما فرستنده بدون دانستن s و تابع E میتواند پاسخ صحیح را محاسبه کند.
چون توابع Homomorphic Hiding ویژگی دوم را هم دارند یعنی اگر فرستنده به جای s، Es را داشته باشد، بازهم میتواند EPs را حل کند زیرا Eax+by= Exa×Eybچون اثبات کننده تابع چندجمله ای را میداند پس ضرایب a و b را میداند و Ex و Ey هم برایش ارسال شده اند. پس فرستنده مقدار EPs را برای تأییدکننده میفرستد.
اما اینکه تأییدکننده مطمئن باشد که فرستنده عملیات را درست انجام داده است از طریق تکنیک دیگری سنجیده میشود که KC Test خوانده میشود.
در اینجا مجال آن نیست که به بررسی این آزمون رمزنگاری بپردازیم.پس بازی به این صورت است که تأییدکننده یک ضریبی را انتخاب میکند و با ارزیابی کور میتواند بفهمد که آیا فرستنده عبارات چندجمله ای صحیح را در اختیار دارد یا خیر. البته باید دقت داشت آنچه در بالا گفتیم، تنها یک مثال برای درک فرآیند کار است.
به طور خلاصه، فرستنده از تابع P خبر دارد و میتواند فرمول را بدون دانستن E محاسبه کند. تأییدکننده میتواند بفهمد که نتیجه صحیح است زیرا وی تابع E را در اختیار دارد بدون اینکه از فرمول چندجمله ای P اطلاع داشته باشد.
نتیجه گیری
زی کش به کمک رمزنگاری قادر است تا تراکنش های حفاظت شده (shielded transactions) را به انجام برساند. با این حال، در زی کش شما میتوانید مانند بیت کوین، تراکنش های شفاف هم داشته باشید و البته این تراکنش های شفاف پیش فرض هستند.
در آن زمان مسئله حریم خصوصی مهم ترین مشکل پیش روی رمز ارز ها محسوب میشد. به نظر میرسید این آخرین محدودیت فنی برای استفاده از یک محتوای دیجیتالی به پول نقد باشد.
اما با گذشت زمان مشکلات دیگری برجسته شدند. برای مثال مسئله مقیاس پذیری را در نظر بگیرید. بیت کوین برای گسترش خود نیازمند عبور از موانع فنی مانند اندازه بلاک است.
مسائل دیگری نیز در رمز ارز ها مطرح هستند مانند هرز انرژی در گواه کار، مسئله تأخیر زیاد در تایید تراکنش برای پرداخت های خُرد، مسئله انحصار ماینینگ با توسعه ASIC ها و بسیاری از مسائل دیگر.
بنابراین زی کش، نتوانست با حل یک مسئله، از بیت کوین به عنوان اولین و شناخته شده ترین رمز ارز فراتر برود. زی کش به پشتوانه اعتبار علمیتیم خود یا شاید جنجال هایی که آن ها توانستند در جامعه رمز ارز ها به وجود آورند، مورد استقبال بی سابقه قرار گرفت.
اما فن آوری تنها با حل یک مسئله خاص پیشرفت نمیکند بلکه مستلزم عبور از موانع متعددی است و به طور کل به صورت آزمون و خطا پیش میرود. برای بسیاری از کاربران رمز ارز ها که صرفا در مرحله آزمون و تجربه آن هستند، مسئله حریم خصوصی و یا گمنام بودن، واجد اولویت نیست.