<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Cryptography</title>
        <link>https://virgool.io/feed/@cryptography</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-07 09:45:55</pubDate>
        <image>
            <url>https://static.virgool.io/images/default-avatar.jpg</url>
            <title>Cryptography</title>
            <link>https://virgool.io/@cryptography</link>
        </image>

                    <item>
                <title>کیف‌پول‌های HD</title>
                <link>https://virgool.io/@cryptography/%DA%A9%DB%8C%D9%81%D9%BE%D9%88%D9%84%D9%87%D8%A7%DB%8C-hd-drfx6lfnwhxy</link>
                <description>پیش‌نیازتوابع هش‌آدرس کیف‌پول، کلید عمومی و خصوصیدیدین بعضی از کیف‌پول‌های ارزهای دیجیتال چندتا کلمه بهتون میدن بعد از همون چندتا کلمه براتون کلی حساب بیت‌کوین و هزارتا ارز دیجیتال دیگه باز می‌کنن؟آخه چجوری؟ این اصلا امن هست؟+ معمولا شما یه کلید خصوصی و یه کلید عمومی دارین برای هر کوین، مثلا بیت‌کوین، و هی از اون آدرس مقداری بیت‌کوین به آدرس‌های دیگه می‌فرستین یا دریافت می‌کنید. درسته؟ نه دیگه، درست نیست، زخم میشه اون آدرس، و اصلا رویکرد امنی هم نیست.- خب پس چیکار باید کرد؟+ باید از آدرس‌های مختلف استفاده کنید، هربار از یه آدرس برای ارسال بیت‌کوین استفاده کنید، و همین رویکرد را باید نسبت به کوین‌های دیگه داشت.- آخه این چه راهکاریه؟ یعنی من هردفعه بیت‌کوین‌می‌خوام دریافت کنم اونها را بریزم تو یه آدرس منحصر؟ اونوقت اینجوری که صدها و هزارها آدرس خواهم داشت، چطور مدیریت کنم آخه؟ بعد اگه همه بخوان اینکار را انجام بدن که آدرس‌های موجود بیت‌کوین همه استفاده میشن، چیزی برای بقیه نمی‌مونه!!!+ سوال اولت خوب بود اما مرده‌شور سوال دومت را ببرن ?‍♂?‍♂?‍♂جواب سوال اولت اینه که راه حل استفاده از کیف‌پول‌های HD هست.کیف‌پول (Hierarchical Deterministic (HDوقتی شما از کیف‌پول HD استفاده می‌کنید به شما فقط یک مجموعه از کلمات داده می‌شود (از الان بهشون seed phrase و یا master seed میگیم) که با استفاده از ریاضیات و الگوریتم میشه از دل اون صدها (در تئوری، بی‌نهایت) آدرس مختلف برای هر ارز دیجیتال استخراج کرد. این آدرس‌ها دارای ساختار درختی هستند، یعنی شما یه آدرس دارید که اون آدرس خودش می‌تونه بی‌نهایت آدرس خواهر و برادر داشته باشه (آدرس‌های برادر همانند حساب‌های مختلف بانکی می‌باشند که برای اهداف متفاوت افتتاح شدند)، و همچنین بی‌نهایت آدرس فرزند داشته باشه (آدرس‌های فرزند همانند صفحات چک از میان یک دسته چک می‌باشند که همگی متعلق به یه حساب بانکی هستند اما برای عملیات مختلف بانکی استفاده می‌شوند).بنابراین شما دیگه نیاز ندارید همه آدرس‌هاتون را حفظ کنید یا مدیریت کنید، فقط باید seed phrase را حفظ کنید یا به نحو مطمئن در جایی نگهداری کنید.به این ترتیب، اگه کیف‌پول سخت‌افزاری یا کامپیوتر شما خراب بشه یا گم بشه شما فقط به seed phrase تون برای بازیابی کیف‌پول و ارزهای خود نیاز خواهید داشت.- عااامووو مگه میشه؟ آخه چطوووری؟+ الان توضیح میدمفرایند تولید Master Seed از استاندارد BIP39 برای تولید master seed استفاده میشه.اینجا من رو استفاده از استاندارد BIP39 جهت تولید pass phrase بیست و چهار کلمه‌ای متمرکز میشم ولی فرایند تولید این مجموعه کلمات برای حالات دیگه مثل حالت دوازده کلمه‌ای تقریبا یکسان هست.این بیست و چهار کلمه بصورت تصادفی از یه لغت‌نامه ۲۰۴۸ کلمه‌ای استخراج میشن.فرایند تصادفی استخراج این بیست‌و‌چهار کلمه بصورت زیر است:۱- در قدم اول یه رشته از ۲۵۶ بیت بصورت تصادفی تولید میشه. چگونگی این فرایند تصادفی خودش داستان‌ها داره. یک روش ابتدایی اینه که مثلا شما یه عکس شخصی دارین که تا حالا با کسی به اشتراک نذاشتید و هرگز رو اینترنت آپلود نکردید. این عکس در حقیقت یک رشته بیت ذخیره‌شده هست. شما این رشته بیت را میدین به یه تابع هش و به عنوان خروجی ۲۵۶ بیت دریافت می‌کنید. البته از روش‌های پیچیده‌تر برای تولید این ۲۵۶ بیت تصادفی استفاده میشه و خود کیف‌پول شما این فرایند را مدیریت می‌کنه بنابراین شما نیازی به دانش تخصصی نخواهید داشت.۲- این ۲۵۶ بیت تصادفی طی یه فرایند تبدیل به یه رشته ۲۶۴ بیتی می‌شود. این فرایند به شکل زیر است:این ۲۵۶ بیت تصادفی به تابع هش SHA-256 داده میشه و ۲۵۶ بیت جدید به عنوان خروجی دریافت میشه، سپس هشت بیت اول این ۲۵۶ بیت جدید به آخر اون ۲۵۶ بیت تصادفی اولیه اضافه میشه. پس الان ما یه رشته جدید ۲۶۴ بیتی خواهیم داشت.۳- در قدم بعد، رشته ۲۶۴ بیتی ما به ۲۴ گروه ۱۱ بیتی تقسیم میشه۴- هر گروه ۱۱ بیتی به یه عدد ده‌دهی بین ۰ تا ۲۰۴۷ تبدیل میشه، سپس به لغت‌نامه ۲۰۴۸ کلمه‌ای که قبلا بهش اشاره کردم رجوع میشه و کلمه متناظر با این عدد در اون لغت‌نامه پیدا میشه.در پایان این فرایند ما ۲۴ کلمه خواهیم داشت.- داداش هنر کردی، این همه تفت دادی که ۲۴ تا کلمه پیدا کنی؟ خب این‌را که خودم میرفتم از تو دیکشنری پیدا می‌کردم. کلید خصوصی و عمومی را چطور تولید می‌کنی؟+ الان توضیح میدم. اما قبل از اون یه نکته:در این مرحله شما باید این ۲۴ کلمه را یا تو مغزتون یا جای مطمئن دیگه ذخیره کنید. مراحل بعدی توسط کیف‌پول شما مدیریت میشه.پس تو این فرایند شما فقط قراره یه کار کنید و اون ذخیره کردن این ۲۴ کلمه بصورت امن هست. تکرار میکنم، فقط یه کار! تو رو خدا درست انجام بدینش.فرایند تولید ریشه یا master nodeبعد از تولید تصادفی این ۲۴ کلمه، اونها باید دوباره تبدیل به یه رشته باینری بشن. برای این فرایند از تابع هش PBKDF2-HMAC-SHA512 استفاده میشه، اون ۲۴ کلمه وارد تابع میشن و یه رشته ۵۱۲ بیتی از تابع خارج میشه. این رشته ۵۱۲ بیتی ریشه کیف پول شما (که ساختار یه درخت داره) محسوب میشه. هر کلید خصوصی و عمومی تولید شده در کیف پول شما از این ۵۱۲ بیت ریشه می‌گیره.قدم بعدی تولید کلیدهای خصوصی و عمومی از این ریشه باینری هست. اما قبلش نیاز دارم مفهوم path level را توضیح بدم.تعریف path level در کیف‌پولبرای تولید هر زوج کلید خصوصی و عمومی برای هر ارز دیجیتال باید اول یه عبارت منحصربفرد به اون کلید و آدرس اختصاص داد تا بشه اون را از آدرس‌های دیگه متمایز کرد. مثلا شما می‌تونید عبارت کیف پول بیتکوین شماره یک برای ذخیره و نگهداری بیت‌کوین‌های عزیزم، باشد که روزی رستگار شوم را به یکی از آدرس های خود اختصاص دهید. (اینجا داریم صرفا آدرس های مختلف خود را نامگذاری می کنیم)اما این روش که شما اتخاذ کردید خیلی بی‌قاعده هست، بگذارید یه روش سیستماتیک و مورد پسند و تایید همه ابداع کنیم:به این منظور ما از path levels استفاده می‌کنیم. فرمت یه path level به شکل زیر است:m / purpose&#x27; / coin_type&#x27; / account&#x27; / change / address_indexتو این مقاله من اون آپستروف های تو path level را بی‌خیال میشم. اما بقیه اجزای path level اینجور تعریف میشن:m/فقط یه روش برای اینه که بگیم این عبارت یه متن هست (و نه یه کد).purposeاین جز از path level یه عدد ثابت هست، که تو مورد کیف‌پول ما برابر با 44&#x27; یا (0x8000002C) هست و بیانگر این هست که شاخه‌های این درخت با پیروی از استاندارد BIP43 استخراج شده‌اند.coin_typeهمون‌طور که قبلا گفتم شما می‌تونید از یه (master node (seed برای تولید آدرس برای ارز‌های مختلف مثل بیت‌کوین، لایت‌کوین، اتریوم ... استفاده کنید.این متغیر تو path level مشخص میکنه که شما این آدرس را برای چه ارز دیجیتال می‌خواهید استفاده کنید. طی یه اجماع، به هر رمزارز یه عدد ثابت اختصاص داده شده و اون عدد ثابت را در قسمت coin_type وارد می‌کنند تا بگن قصد تولید آدرس و کلید برای کدام رمزارز را دارن.accountدر این قسمت شما می‌تونید حساب‌های مختلف برای هر رمزارز، مثلا بیت‌کوین، ایجاد کنید. مثلا یه آدرس اختصاص بدین به حساب پس‌انداز بیتکوین و اون را با عدد صفر متمایز کنید، سپس یه آدرس اختصاص بدین به حساب متصل به صرافی‌ها و اون را با عدد یک متمایز کنید، یه آدرس اختصاص بدین به امور خیریه‌تون و اون را با عدد دو متمایز کنید ...همان طور که ملاحظه شد به این حساب‌های متفاوت یه عدد اختصاص داده می‌شود که از صفر شروع می‌شود و تا بی‌نهایت می‌تواند ادامه داشته باشد. این عددها یا نمایه بیانگر آدرس‌های خواهر و برادر در ساختار درختی ما می‌باشند.changeدر این قسمت، عدد ۰ به external chain و عدد ۱ به internal chain (آدرس های مرتبط با change address) نسبت داده می‌شود. در واقع، external chain شامل آدرس هایی می‌شود که خارج از کیف‌پول هم قابل مشاهده هستند و شما می‌توانید به منظور دریافت بیت‌کوین آنها را به اشتراک بگذارید. از طرف دیگر internal chain شامل آدرس‌هایی هست که قرار نیست خارج از کیف‌پول قابل مشاهده باشن و برای مدیریت خرده بیت‌کوین‌های باقیمانده از مبادلات استفاده میشن.indexمقدار این متغیر از صفر شروع میشه و می‌تونه تا بی‌نهایت افزایش پیدا کنه و در حقیقت یه نمایه برای آدرس‌ها و کلید‌های فرزند می‌باشد.مثال:فرض کنید من می‌خوام یه حساب اتر برای اتر‌های خودم باز کنم و یه حساب اتر دیگه برای اتر‌های شرکتی که براش کار می‌کنم. با اینکار می‌خوام سرمایه شخصی خودم را از سرمایه شرکت جدا کنم.در این حالت من از path level یا همون عبارت منحصربفرد متمایز کننده زیر برای حساب شخصیm/44&#x27;/60&#x27;/0&#x27;/0&#x27;/0و از path level زیر برای حساب شرکت استفاده می‌کنم:m/44&#x27;/60&#x27;/1&#x27;/0&#x27;/0اینجا عدد ۶۰ یه عدد از پیش اختصاص داده شده و مورد اجماع قرار گرفته برای ارز اتریوم هست.در path level اول بعد از عدد ۶۰ از نمایه ۰ استفاده شده که متناظر با حساب شخصی من هست و در path level دوم بعد از عدد ۶۰ از نمایه‌ی ۱ استفاده شده که متناظر با حساب شرکتی من خواهد بود.حال فرض کنید برای حساب شرکت به جای یک حساب واحد من می‌خواهم سه زیرحساب یا سه حساب فرزند باز کنم. یکی برای امور جاری و کوتاه‌مدت شرکت، یکی برای سرمایه‌گذاری و امور بلند مدت شرکت، و آخری برای پرداخت حقوق کارمندان.در این حالت من از سه تا path level جدید برای نشون دادن این دو حساب فرزند استفاده می‌کنم:m/44&#x27;/60&#x27;/1&#x27;/0&#x27;/0برای حساب شرکتی مختص به امور کوتاه مدت شرکت وm/44&#x27;/60&#x27;/1&#x27;/0&#x27;/1برای حساب شرکتی مختص به سرمایه‌گذاری و امور بلند مدت، و همچنینm/44&#x27;/60&#x27;/1&#x27;/0&#x27;/2برای حساب شرکتی مختص به پرداخت حقوق و مطالبات.به این ترتیب ما یک سیستم نامگذاری جهان‌شمول و محمدی‌پسند برای نامگذاری حساب‌های مختلف خود ایجاد کردیم.ولی کامپیوتر که این نامگذاری ها و عددهای مقیاس ده‌دهی سرش نمیشه، بنابراین در مرحله بعد همه اینها تبدیل به یک رشته بیت میشن.تا به اینجا ما دو تا داده مهم داریم، یکی master node هست که یه رشته ۵۱۲ بیتی هست و دیگری path level که نهایتا خودش یه رشته بیت خواهد بود. این رشته بیت‌ها به فرمت زیر در کنار هم قرار می‌گیرند:Master node / Purpose Code / Coin Code / Account Index / Change Address / Child Indexاین رشته بیت سپس وارد یه تابع هش میشه و یه رشته بیت ۵۱۲ بیتی به عنوان خروجی ارائه می‌دهد. ۲۵۶ بیت نخست که در چپ این رشته بیت خروجی قرار دارد همان کلید خصوصی شما خواهد بود و ۲۵۶ بیت پایانی که در سمت راست قرار دارد chain code نامیده می‌شود. در این مقاله به chain node نمی‌پردازم اما اجمالا بگم که علت وجودی آن این است که اگر به هر دلیلی کسی به کلید خصوصی و عمومی یکی از حساب‌های شما دست پیدا کرد به علت وجود chain node هنوز برای او غیر ممکن خواهد بود که به کلید خصوصی حساب‌های فرزند دست پیدا کند.از اینجا به بعد فرایند ساخت آدرس ها و کلید های جدید تکراری می‌باشد. یعنی اگر می‌خواهید یک آدرس برادر یا فرزند بسازید باید رشته بیت زیر راPublic key of parent node / Chain Code of parent node / Purpose Code / Coin Code / Account Index (Index of brother account) / Change Address / Child Indexرا به تابع هش بدهید و یه خروجی ۵۱۲ بیتی دریافت کنید، ۲۵۶ بیت نخست کلید خصوصی و ۲۵۶ بیت پایانی chain code خواهد بود.منابعhttps://ledger.readthedocs.io/en/latest/index.htmlhttps://github.com/bitcoin/bips/blob/master/bip-0044.mediawikihttp://aaronjaramillo.org/bip-44-hierarchical-deterministic-wallets</description>
                <category>Cryptography</category>
                <author>Cryptography</author>
                <pubDate>Tue, 18 Feb 2020 02:23:52 +0330</pubDate>
            </item>
                    <item>
                <title>توضیح امضای دیجیتال به نوجوان باهوش خود - قسمت دوم: اعتبارسنجی امضا</title>
                <link>https://virgool.io/@cryptography/%D8%AA%D9%88%D8%B6%DB%8C%D8%AD-%D8%A7%D9%85%D8%B6%D8%A7%DB%8C-%D8%AF%DB%8C%D8%AC%DB%8C%D8%AA%D8%A7%D9%84-%D8%A8%D9%87-%D9%86%D9%88%D8%AC%D9%88%D8%A7%D9%86-%D8%A8%D8%A7%D9%87%D9%88%D8%B4-%D8%AE%D9%88%D8%AF-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-%D8%A7%D8%B9%D8%AA%D8%A8%D8%A7%D8%B1%D8%B3%D9%86%D8%AC%DB%8C-%D8%A7%D9%85%D8%B6%D8%A7-axuqy7vrno4y</link>
                <description>در قسمت اول این مقاله در مورد الگوریتم اول از سه الگوریتم مورد نیاز برای امضای دیجیتال (تولید کلید عمومی و خصوصی) صحبت کردیم. در قسمت دوم این مقاله در مورد الگوریتم دوم و سوم فرایند امضای دیجیتال (امضای یک پیام و تایید اعتبار آن امضا) صحبت می‌کنیم.امضای یک پیامفرض کنید شما کلید خصوصی x که ۲۵۶ بیت است و کلید عمومی متناظر با آن یعنی X را می‌دانید. همچنین در قسمت اول با پارامتر P آشنا شدیم. حال فرض کنید که r یک پارامتر دیگر است که شما انتخاب می‌کنید و نهایتا R نیز بصورت زیر تعریف می‌شود:R=r•Pحال شما می‌توانید هر پیام‌ای message را به صورت زیر امضا کنید:s=hash(message,R)*x+rو مقدار s را به عنوان امضای آن پیام اعلام کنید.توجه کنید که هر پیام، امضای خاص خود را خواد داشت. بنابراین برای هر message به عنوان ورودی شما یک s متناظر با آن را اعلام می‌کنید. این s با استفاده از کلید خصوصی x محاسبه شده است اما در این فرایند شما هرگز کلید خصوصی خود x را اعلام نکرده‌اید.مشاهده می‌کنید که این همان مرحله دوم از فرایند امضای دیجیتال است که در قسمت اول مقاله به آن اشاره شد:sig := sign( sk , message)تایید اعتبار یک پیامحال سوال این است که شما چگونه می‌توانید به بقیه ثابت کنید که مقدار x متناظر با X را می‌دانید بدون آنکه اطلاعات مهمی از مقدار x (کلید خصوصی تان) درز بدهید. به عبارت دیگر چگونه می‌توان ثابت کرد که s امضای دیجیتال‌ای است که شما با استفاده از کلید خصوصی خود x نوشتید.با یکی از خواص جمع شروع می‌کنیم:t•P+k•P = (t+k)•Pحال با استفاده از جایگزاری های زیرt = hash(message, R)•xk = rخواهیم داشتhash(message, R)•x•P + r•P = (hash(message, r•P)*x+r)•Phash(message, R)•x•P+R = (hash(message, r•P)*x+r)•Pو در نتیجه:hash(message, R)•X+R = (hash(message, R)*x+r)•Pو سرانجام خواهیم داشت:hash(message, R)•X+R = s•Pحال فردی ادعا می‌کند که پیام‌ای (message) را با کلید خصوصی خود امضا کرده است و پیام امضا شده (s) را به همراه کلید عمومی X اعلام می‌کند.ما برای تایید اعتبار امضای او مقادیر message، s، و X را در معادله بالا قرار می‌دهیم تا ببینیم آیا دو طرف معادله با هم برابر هستند یا خیر. این همان مرحله سوم از فرایند امضای دیجیتال است که در قسمت اول این مقاله به آن اشاره شد:isValid := verify( pk , message , sig)و به این ترتیب ما توانستیم هر سه مرحله از فرایند امضای دیجیتال را تکمیل کنیم.منابع:https://hackernoon.com/what-is-the-math-behind-elliptic-curve-cryptography-f61b25253da3?source=post_page---------------------------</description>
                <category>Cryptography</category>
                <author>Cryptography</author>
                <pubDate>Mon, 02 Sep 2019 08:25:22 +0430</pubDate>
            </item>
                    <item>
                <title>توضیح امضای دیجیتال به نوجوان باهوش خود - قسمت اول: کلید‌های خصوصی و عمومی</title>
                <link>https://virgool.io/@cryptography/%D8%AA%D9%88%D8%B6%DB%8C%D8%AD-%DA%A9%D9%84%DB%8C%D8%AF%D9%87%D8%A7%DB%8C-%D8%AE%D8%B5%D9%88%D8%B5%DB%8C-%D9%88-%D8%B9%D9%85%D9%88%D9%85%DB%8C-%D8%A8%D9%87-%D9%86%D9%88%D8%AC%D9%88%D8%A7%D9%86-%D8%A8%D8%A7%D9%87%D9%88%D8%B4-%D8%AE%D9%88%D8%AF-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-mfcjrdbvi6m9</link>
                <description>امضای دیجیتالامضای دیجیتال بسیار شبیه به امضایی می‌باشد که بر روی کاغذ می‌نویسید. امضا‌های دیجیتال باید دارای دو خصیصه مهم باشند که مشابه آنها در امضای کاغذی نیز وجود دارد. اول آنکه فقط شما باید قادر باشید امضای خود را بنویسید اما کسانی که آن را مشاهده می‌کنند قادر هستند که تایید کنند آن امضای شما می‌باشد. دوم آنکه ما می‌خواهیم که امضا تنها مرتبط به یک سند خاص (که امضا شده است) باشد و در نتیجه دیگران از امضای شما پای یک سند نمی‌توانند برای تایید و موافقت با سند دیگری استفاده کنند.یک امضای دیجیتال از سه الگوریتم زیر پیروی می‌کند:الف) (sk, pk) := generateKeys( keysize )در این مرحله شما سایز کلید را به عنوان ورودی به تابع خود می‌دهید و تابع یک زوج از کلید خصوصی و عمومی به شما می‌دهد. در اینجا نماد sk معرف کلید خصوصی است و برای امضای پیام استفاده می‌شود. نماد pk نیز معرف کلید عمومی است که می‌تواند در اختیار هر کسی قرار گیرد. هر کسی که کلید عمومی شما را در اختیار داشته باشد می‌تواند از معتلق بودن امضای پای یک سند به شما مطمئن شود.ب) (sig := sign( sk , messageورودی این تابع پیام شما و نیز کلید خصوصی شما می باشد و خروجی آن امضای شما با استفاده از کلید خصوصی  sk پای آن پیام می‌باشد.ج) (isValid := verify( pk , message , sigمرحله بعد مرحله تایبد کردن اعتبار امضا می‌باشد. این تابع یک پیام، امضای پای آن پیام، و یک کلید عمومی را به عنوان ورودی دریافت می‌کند و یک مقدار boolean به عنوان خروجی می‌دهد. چنان‌چه امضای پای یک سند تحت آن کلید عمومی یک امضای معتبر باشد (پیام توسط دارنده واقعی آن کلید عمومی امضا شده باشد) آنگاه خروجی تابع true خواهد بود و در غیر این صورت false خواهد بود.این طرح امضای دیجیتال باید دو شرط زیر را برآورده کند:اول آنکه verify ( pk , message , sign ( sk , message )) == trueو دوم آنکه امضا‌ها باید غیر قابل جعل باشند. به عبارت دیگر فردی که کلید عمومی شما را می‌داند و امضای شما پای یک پیام را دیده است نمی‌تواند امضای شما را پای پیام دیگری (که هنوز امضای شما پای این پیام دیگر را ندیده است) جعل کند.منظور از جعل‌ناپذیری این است که به لحاظ توان محاسباتی جعل یک امضا ناممکن باشد. بنابراین ممکن است به لحاظ تئوریک جعل یک امضا ممکن باشد اما کامپیوتر ‌ها توان محاسباتی کافی برای جعل آن در زمانی معقول را نداشته‌باشند.نکته مهم دیگر آنکه دو تابع اول می‌توانند تصادفی باشند. در واقع تابع اول خیلی بهتر است که تصادفی باشد چون که باید برای افراد مختلف کلید‌های مختلف تولید کند. از طرف دیگر اما تابع سوم باید همیشه غیرتصادفی باشد.در بخش اول این مقاله می‌خواهیم در مورد الگوریتم اول یعنی generatekeys صحبت کنیم. اینکه کلید های عمومی و خصوصی چگونه ساخته می شوند؟یک روش برای تولید کلیدهای رمزنگاری استفاده از elliptic curves است. روش دیگر استفاده از RSA است که عملکرد آن حول اعداد اول می‌باشد. بیشتر رمز‌ارز‌ها نظیر بیتکوین و اتریوم از eleptic curves استفاده می‌کنند چون که کلید خصوصی 256bit elliptic curve به اندازه کلید خصوصی 3072bit RSA امن می‌باشد ولی کلید‌های کوچکتر را راحت‌تر می‌توان مدیریت کرد.منحنی های elliptic curve چگونه می‌باشند؟این محنی ها مجموعه نقاطی می‌باشند که از معادله زیر پیروی می‌کنند:y² = x³+ax+bو همزمان شرط 4a³+27b² ≠ 0 برقرار می‌باشد.چند مثال از منحنی های elliptic curve را در ادامه می‌بینید:همان طور که مشاهده می‌کنید یک ویژگی مهم منحنی های elliptic curve آن است که حول محور x قرینه هستند.منحنی های elliptic curve که توسط بیتکوین، اتریوم و برخی رمز‌ارزهای دیگر استفاده می‌شود secp256k1 نام دارد. معادله منحنی secp256k1 برابر با y² = x³+7 است و به شکل زیر می‌باشد:ساتوشی دلیل خاصی برای استفاده از منحنی secp256k1 نداشته و تنها از منحنی رایج در زمان خود استفاده کرد. (اینجا را مشاهده کنید)جمع نقاط روی منحنیشما می‌توانید دو نقطه بر روی منحنی elliptic curve را جمع کنید و به نقطه دیگری بر روی همان منحنی برسید. برای جمع کردن دو نقطه بر روی منحنی باید ابتدا خطی را ترسیم کنید که از این دو نقطه می‌گذرد. سپس مشخص کنید که این خط در کجا منحنی را قطع می‌کند تا به نقطه سوم برسید. در قدم بعد قرینه نقطه سوم حول محور x را پیدا کنید تا به نقطه چهارم برسید. نقطه چهارم همان جمع نقطه اول و دوم می‌باشد.بگذارید برای روشن شدن جمع دو نقطه یک مثال بزنم. فرض کنید می‌خواهیم نقطه P و Q را بر روی منحنی زیر جمع کنیم:در قدم اول خط واصل این دو نقطه را رسم می‌کنیم:سپس نقطه سوم که محل تقاطع خط و منحنی است را پیدا می‌کنیم:سپس آن را حول محور x تصویر می‌کنیم:نقطه R جمع دو نقطه P و Q است.نکته مهم آن است که برای آنکه رمزنگاری به شکل درستی انجام شود بجای جمع دو نقطه تصادفی/دلبخواهی ما یک نقطه شروع بر روی منحنی مشخص می‌کنیم و این نقطه را با خودش جمع می‌کنیم.برای مثال فرض کنید نقطه شروع P است:حال می‌خواهیم P را با خودش جمع کنیم. قدم اول آن است که خطی را ترسیم کنیم که از P و P بگذرد. بی‌نهایت خط وجود دارد که این شرط را برآورده می‌کنند اما ما از خط مماس استفاده می‌کنیم:سپس محل تقاطع خط و منحنی و بعد قرینه آن حول محور x را پیدا می‌کنیم:بنابراین در پایان این مراحل ما P را با خودش جمع کردیم و به 2•P رسیدیم.اگر بار دیگر P را با نقطه بدست آمده در مرحله قبل جمع کنید آنگاه در واقع P را با خودش و سپس با خودش جمع کردیم. در نتیجه برای محاسبه 3•P تنها لازم است دو نقطه P و 2•P را جمع کنیم.به همین ترتیب می‌توان ضرایب بالاتر P را بر روی منحنی بدست آورد.نقطه آغازی، P، که توسط secp256k10 استفاده می‌شود دارای مختصات زیر است:مختصات x:55066263022277343669578718895168534326250603453777594175500187360389116729240مختصات y:32670510020758816978083085130507043184471273380659243275938904335757337482424تعداد محاسبات لازم برای جمع نقاطبه چند مرحله محاسباتی برای محاسبه 10•P نیاز داریم؟ ساده ترین جواب آن است که به ۹ بار محاسبه نیاز داریم چون که P•10 برابر است باP+P+P+P+P+P+P+P+P+Pکه مستلزم ۹ بار محاسبه جمع بین نقاط است.اما می‌توان نشان داد که 10•P را می‌توان تنها در ۴ مرحله محاسبه کرد:P+P = 2•P2•P+2•P = 4•P4•P+4•P = 8•P2•P+8•P=10•Pحال فرض کنید که یک عدد تصادفی ۲۵۶ بیتی داریم که با x نشانش می‌دهیم. در مثال ما x می‌تواند بین 0 تا 1.1579209e+77 نوسان کند. سوال آن است که به چند مرحله برای محاسبه x•P نیاز داریم؟ با همان استدلال چند سطر پیش می‌توان نشان داد که محاسبه x•P حداکثر به ۵۱۰ مرحله محاسباتی جمع نیاز دارد.خسته‌مون کردی، پس کی فرایند تولید کلید عمومی و خصوصی را میگی؟در حقیقت تمام آنچه تا کنون خواندید فرایند تولید کلید خصوصی و عمومی است. وقتی که x•P را محاسبه می‌کنیم x یک عدد صحیح تصادفی ۲۵۶ بیتی است و حاصل محاسبه x•P بک نقطه بر روی منحنی است که آن را X می‌نامیم.اگر شما x را داشته باشید حداکثر در ۵۱۰ مرحله می‌توانید x•P یا X را محاسبه کنید. اما اگر X را داشته باشید آیا می‌توانید x را محاسبه کنید؟ به عبارت دیگر آیا می‌توانید مشخص کنید که چند بار نقطه P با خود جمع شده‌است تا به نقطه X بر روی منحنی برسیم؟جواب آن است که به لحاظ توان محاسباتی ناممکن است که x را پیدا کنید حتی اگر به قوی‌ترین کامپیوتر دسترسی داشته باشید. هیچ الگوریتم مشخصی برای تعیین x وجود ندارد و تنها راه موجود آن است که آنقدر P را با خودش جمع کنیم تا به X برسیم. عدد x بین 0 تا 1-2²⁵⁶ است، بنابراین میانگین آن 2¹²⁸ است. در نتیجه بطور متوسط به 2¹²⁸ مرحله محاسبه جمع نقطه‌ای نیاز داریم تا x را پیدا کنیم. حتی اگر ابرکامپیوتر شما قادر به محاسبه یک تریلیون عملیات جمع نقطه‌ای در ثانیه باشد و ابرکامپیوتر شما از زمان آغاز پیدایش جهان مشغول محاسبه بوده باشد شما تنها 2⁹⁸ عملیات جمع نقطه‌ای تا به امروز انجام داده‌اید.بنابراین چون کسی نمی‌تواند با فرض در اختیار داشتن X مقدار x را در معادله X=x•P پیدا کند بسیار مطلوب است که x کلید خصوصی و X کلید عمومی باشد. در نتیجه کلید خصوصی شما یک عدد صحیح تصادفی ۲۵۶ بیتی و کلید عمومی شما مختصات طول (۲۵۶ بیت) و عرض (۲۵۶ بیت) یک نقطه بر روی منحنی elliptic curve خواهد بود. با انتخاب این کلید ها ویژگی مهم زیر نیز برقرار خواهد بود:به لحاظ توان محاسباتی ناممکن است که کلید خصوصی متناظر با یک کلید عمومی را پیدا کرد.ضمیمه: بهبود توابع elliptic curves متناسب با نیاز رمزنگارییک مشکل با مدل فعلی آن است که ممکن است نتیجه محاسبه x•P مقدار بسیار بزرگی شود به طوری که مختصات محور x و y آن را نتوان در قالب کلید عمومی استاندارد ۵۱۲ بیتی ذخیره کرد. راه حل آن می‌باشد که elliptic curve مان را بر روی یک میدان محدود تعریف کنیم بنابراین برای مختصات نقاط حد تعریف می‌کنیم.مشکل دیگر آن است که ما تنها به نقاطی علاقه‌مند هستیم که مختصات آن اعداد صحیح می‌باشند. بنابر این منحنی مورد نظر ما گسسته خواهد بود.برای رفع این مشکلات ما معادلهy² = x³+ax+bرا بهy² mod p = (x³ + ax + b) mod pتغییر می‌دهیم. در این معادله p یک عدد اول می‌باشد. در مدل secp256k1 عدد p بزرگترین عدد اولی است که از 2²⁵⁶ کوچکتر است.حال شکل منحنی elliptic curve اینگونه خواهد بود:توجه کنید که همچنان حول محور افقی تقارن وجود دارد.حال سوال آن است که چه کنیم اگر دو نقطه را جمع کنیم اما خط واصل آنها بدون آنکه نقطه سومی را قطع کند از محدوده تعریف شده خارج شود؟در این حالت باید خط واصل را wrap کنیم:</description>
                <category>Cryptography</category>
                <author>Cryptography</author>
                <pubDate>Fri, 02 Aug 2019 07:20:55 +0430</pubDate>
            </item>
                    <item>
                <title>چگونه پروتکل Zero-knowledge proof را به کودک دلبند خود توضیح دهیم.</title>
                <link>https://virgool.io/@cryptography/%DA%86%DA%AF%D9%88%D9%86%D9%87-%D9%BE%D8%B1%D9%88%D8%AA%DA%A9%D9%84-zero-knowledge-proof-%D8%B1%D8%A7-%D8%A8%D9%87-%DA%A9%D9%88%D8%AF%DA%A9-%D8%AF%D9%84%D8%A8%D9%86%D8%AF-%D8%AE%D9%88%D8%AF-%D8%AA%D9%88%D8%B6%DB%8C%D8%AD-%D8%AF%D9%87%DB%8C%D9%85-gyeh3m58ifc5</link>
                <description>پروتکل Zero- knowledge proof روشی است که در آن یک فرد (اثبات کننده - The Prover) می‌تواند به فرد دیگر (تایید کننده - The Verifier) اثبات کند که یک گزاره درست است بدون آنکه هرگونه اطلاعات بیشتری در مورد آن گزاره آشکار/افشا کند. به عبارت دیگر، اثبات کننده تنها اثبات می‌کند که یک گزاره درست است بدون آنکه خود گزاره را آشکار کند!بگذارید یک مثال بزنم:فرض کنید که رفیقمون، مهراد، کور‌رنگ هست و نمی‌تواند بین رنگ‌های مختلف تمایز قائل شود. بطور مثال، دایره سمت چپ چیزی هست که افراد عادی می‌بینند اما دایره سمت راستی چیزی هست که افراد کوررنگ می‌بینند.حال فرض کنید که ما دو گوی داریم، یکی سفید و دیگری سیاه.هر چند که شما می‌دانید که این دو گوی دارای رنگ متفاوتی می‌باشند اما مهراد فکر می‌کند که هر دو گوی یکسان می‌باشند. معمای ما این است که چگونه می‌توانید به مهراد ثابت کنید این دو گوی متفاوت هستند بدون آنکه رنگ گوی‌ها را افشا کنید؟راه حل:هر دو گوی را به مهراد می‌دهیم تا پشت خود پنهان کند. سپس او یک گوی را به انتخاب خود به ما نشان می‌دهد و بعد در پشت خود پنهان می‌کند. سپس مهراد این آزمایش را تکرار می‌کند و یک گوی را به انتخاب خود به ما نشان می‌دهد. این گوی می‌تواند همان گوی قبلی باشد یا گوی متفاوت باشد، این تصمیم به عهده مهراد هست.قدم بعدی آن است که ما به مهراد بگوییم که آیا گوی یکسانی را در این دو بار آزمایش به ما نشان داده یا آنکه گوی‌های متفاوتی را انتخاب کرده. طبیعتا برای ما بسیار آسان هست که با نگاه کردن به رنگ گوی‌ها بفهمیم که آیا مهراد در هر دو بار آزمایش یک گوی را نمایش داد یا آنکه گوی را تعویض کرد.اگر ادعای مهراد درست است و گوی ها یکسان هستند در این صورت احتمال اینکه ما این معما را درست حل کنیم ۰.۵ خواهد بود، اما اگر ادعای ما درست باشد در این صورت ما باید بتوانیم با قطعیت (احتمال یک) معما را درست حل کنیم.بنابراین اگر این معما را هزار بار تکرار کنیم و در هر هزار بار معما را به درستی حل کنیم آنگاه مهراد متقاعد خواهد شد که گوی‌ها دارای رنگ متفاوتی می‌باشند و ما این رنگ‌های متفاوت را می‌دانیم بدون آنکه افشا کرده باشیم کدام گوی دارای چه رنگی می‌باشد.معمای دوم، غار علی‌بابا:فرض کنید ما رمز عبور در داخل غار را می‌دانیم اما مهراد نسبت به صحت ادعای ما شک دارد. هدف ما این است که به مهراد ثابت کنیم ما رمز عبور را می‌دانیم بدون آنکه رمز عبور را در اختیار او قرار دهیم.راه حل:مهراد در نقطه A می‌ایستد و من به داخل غار می‌روم. به انتخاب خودم به یک سوی در می‌روم: سمت C یا سمت D. مهراد بیرون غار است و نمی‌تواند ببیند که من به کدام سمت در رفتم.وقتی من در یک سمت در قرار می‌گیرم، مهراد وارد غار می‌شود و در نقطه B می‌ایستد.اکنون مهراد باید از من بخواهد که از یک سوی غار به نزد او بروم: سمت چپ C، یا سمت راست D.اگر مهراد از من خواسته باشد که از جهتی خارج شوم که نیاز به عبور از در باشد آنوقت من می‌توانم از رمز عبور خود استفاده کنم.من و مهراد با هم توافق می‌کنیم که این آزمایش را هزار بار تکرار کنیم.اگر ادعای من درست باشد و من رمز عبور را در اختیار داشته باشم آنگاه قادر خواهم بود که در هر هزار بار از سمتی خارج شوم که مهراد مطالبه کرده. اما اگر من رمز عبور در را نداشته باشم آنگاه شانس من برای خروج از جهتی که مهراد مطالبه می‌کند تنها ۰.۵ خواهد بود و از آنجا که دفعات تکرار این آزمایش به اندازه کافی زیاد است امکان آنکه من در هر ۱۰۰۰ بار خوش‌شانس باشم و در سمتی باشم که مهراد مطالبه کرده بسیار کم می‌باشد. بنابر این با این راه‌حل من می‌توانم به مهراد اثبات کنم که رمز عبور را در اختیار دارم بدون آنکه رمز خود را افشا/آشکار کرده باشم.معمای سوم:شبکه رادیویی زیر را در نظر بگیرید. هر نود یک دکل مخابراتی می‌باشد و خط واصل بین دو نود نشان‌دهنده تداخل رادیویی می‌باشد که امری نامطلوب است.خوشبختانه تکنولوژی ما این امکان را به ما می‌دهد که هر برج مخابراتی را با یکی از سه باند مختلف فرکانس تنظیم کنیم تا از این تداخل امواج اجتناب کنیم.اکنون معمای ما این می‌باشد که هر برج مخابراتی را به یکی از سه باند فرکانس نظیر کنیم بطوری که هیچ دو برج مخابراتی همسایه (آنهایی که با یک خط به هم وصل شدند) فرکانس مشترک و یکسان نداشته باشند. ما از سه رنگ مختلف برای نمایش این سه فرکانس مختلف استفاده می‌کنیم. یک راه‌حل برای این معما مثال زیر می‌باشد:حال فرض کنید وزارت ارتباطات قادر به حل این معما نیست اما حاضر است مبلغ بسیار زیادی به کسی بپردازد که این معما را حل کرده باشد. مشکل این می‌باشد که من حاضر نیستم تا زمانی که وزارتخانه جایزه را نپرداخته جواب معما را در اختیار آنها قرار بدم و وزارتخانه هم حاضر نیست پاداش تعیین شده را قبل از دریافت راه‌حل بپردازد. به عبارت دیگر هیچ کدام از طرفین این معما قادر به اعتماد به طرف دیگر نیستند.راه حل:پروتکل زیر را در نظر بگیرید.ابتدا وزیر ارتباطات وارد یک انبار خالی می‌شود، سطح زمین را با کاغذ می‌پوشاند و نقشه دکل‌های مخابراتی و خطوط واصل که معرف تداخل امواج هستند را بر روی این کاغذ می‌کشد. سپس وزیر از انبار خارج می‌شود.من به همراه سه ماژیک رنگی قرمز، آبی و بنفش وارد انبار می‌شوم. من نود های معرف دکل‌ها را بر اساس راه حل خودم و با کمک سه ماژیک رنگی نقاشی می‌کنم. قبل از آنکه از انبار خارج شوم این نود‌ها را با کلاه‌های سیاه می‌پوشانم. (به توابع هش فکر کنید.)وقتی وزیر (به همراه من) دوباره به انبار وارد می‌شود صحنه زیر را می‌بیند:حال من به وزیر جوان اجازه می‌دهم که من را به چالش بکشد. او باید یک خط واصل و دو نود آن را انتخاب کند. سپس من دو کلاه روی آن دو نود را بر میدارم و رنگ نود‌ها را آشکار می‌کنم:اگر رنگ این دو نود یکسان باشد آنگاه وزیر در می‌یابد که من به او دروغ گفته‌ام و پرونده را به قوه قضائیه ارجاع می‌دهد. اما اگر رنگ این دو نود متفاوت باشد آنگاه وزیر این امکان را متصور خواهد شد که من به او دروغ نمی‌گویم و ممکن است راه حل معما را در اختیار داشته باشم.اما من همچنان اثبات نکردم که راه ‌حل را در اختیار دارم. ممکن است این اختلاف رنگ تنها از سر شانس و اقبال بوده باشد. بنابراین برای متقاعد کردن وزیر و هیئت همراه من باید این پروتکل را بارها و بارها تکرار کنم. اما از آنجا که من نمی‌خواهم تکرار این پروتکل راه‌حل من را آشکار کند در هر بار تکرار، به صورت تصادفی رنگ‌های سه ماژیک خود را به این سه باند فرکانس اختصاص می‌دهم.بنابراین در ادامه کاغذهای قبلی را جدا کرده و کاغذ های جدید به کف انبار می‌چسبانیم. من اکنون آن سه ماژیک رنگی را دوباره و بصورت تصادفی به سه باند فرکانس اختصاص می‌دهم و بر اساس راه‌حل خود رنگ‌آمیزی جدید را انجام می‌دهم. دوباره کلاه ها را بر سر نود‌ها می‌گذارم تا راه حل خود را پنهان کنم و به همین ترتیب پروتکل تا انتها تکرار می‌شود. اگر این پروتکل هزار بار تکرار شود و در هر هزار بار رنگ نود‌های متصل به خط واصل انتخاب شده توسط وزیر متفاوت باشد آنگاه وزیر مطمئن خواهد شد که با احتمال بسیار نزدیک به یک من راه حل را در اختیار دارم.بنابر این پروتکل Zero- knowledge proof می‌تواند شرایطی را فراهم کند که یک فرد صحت یک گزاره را اثبات کند بدون آنکه اطلاعاتی از محتوای آن درز دهد. اساس این سیستم همان‌طور که دیده شد بر اساس verify کردن است نه trust بین طرفین.منابع:1- https://hackernoon.com/how-to-prove-that-you-know-something-without-revealing-it-zero-knowledge-proofs-zcash-ethereum-43ce35d4d1c52- https://blog.cryptographyengineering.com/2014/11/27/zero-knowledge-proofs-illustrated-primer/</description>
                <category>Cryptography</category>
                <author>Cryptography</author>
                <pubDate>Thu, 25 Jul 2019 09:19:36 +0430</pubDate>
            </item>
                    <item>
                <title>بررسی پروژه Maker و DAI</title>
                <link>https://virgool.io/@cryptography/%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-maker-%D9%88-dai-gzi5cbdimp3d</link>
                <description>پروژه Maker DAOدر این مقاله به بررسی پروژه Maker و مالیه غیر متمرکز (Decentralized Finance) می‌پردازیم. Maker آغاز یک نظام بانکداری غیر متمرکز است که در آن سیاست‌های پولی و نرخ بهره توسط عموم مردم (دارندگان توکن MKR) وضع می‌شود.پروژه Maker DAO چه محصولی را تولید می‌کند؟اولین محصولی که توسط پروژه Maker تولید شده است DAI نام دارد. DAI در واقع یک رمز ارز با ارزش ثابت در برابر دلار آمریکا (Stablecoin) است. بنابراین بر خلاف سایر رمز ارزها که پیش‌بینی ناپذیرند، رمز ارز DAI از ثبات ارزش برخوردار است.فرق DAI با سایر Stablecoin ها در چیست؟سایر stablecoin ها تا حدود زیادی از ویژگی‌های یک سیستم متمرکز برخوردار هستند. اساس عملکرد بسیاری از این ارزها افتتاح یک حساب نزد یک بانک است. به‌طور مثال یک رمز ارز را در نظر بگیرید که ارزش آن در برابر دلار ثابت است؛  برای آن‌که این ویژگی حفظ شود برابر با  تعداد واحد این رمز ارز که  در بازار عرضه شده است همان مقدار دلار آمریکا در حساب بانکی نگهداری می‌شود. این طراحی دارای ریسک‌های متعددی است. به طور مثال دولت یا بانک می‌توانند تصمیم بگیرند که این حساب بانکی را مصادره کنند. مثال دیگر این است که توسعه‌دهندگان و متولیان این پروژه‌ها می‌توانند مقدار دلار کمتری نسبت به عرضه آن رمز ارز در حساب بانکی واریز کرده باشند (عدم شفافیت).اما از طرف دیگر DAI دارای یک طراحی کاملاً غیر متمرکز است و در نتیجه دولت‌ها، بانک‌ها یا توسعه‌دهندگان آن نمی‌توانند ثبات ارزش این رمز ارز را به مخاطره بیاندازند.طراحی غیر متمرکز DAI چگونه است؟دای، DAI، یک stablecoin است که به جای موجودی دلاری در یک حساب بانکی توسط وثیقه (فعلاً فقط اتریوم) در یک بلاک‌چین (شبکه اتریوم) پشتیبانی می‌شود. فرض کنید شما مقداری اتریوم دارید و می‌خواهید DAI  تولید کنید. به این منظور اتریوم‌های خود را به یک قرارداد هوشمند بر روی بلاک‌چین اتریوم به نام Collateralized Debt Position یا CDP ارسال می‌کنید و برابر با نسبت مشخصی از ارزش اتریوم‌های خود DAI دریافت می‌کنید.بطور مثال، اگر شما مقداری اتر به ارزش ۱۰۰ دلار به CDP ارسال کنید می توانید تا سقف ۶۶ واحد DAI دریافت کنید. سپس شما می‌توانید هر واحد DAI را در بازار آزاد به ارزش یک دلار بفروشید. اما چرا ارزش هر واحد DAI در بازار برابر با یک دلار خواهد بود؟ دلیل آن وعده سیاستگذاران پولی در این سیستم است. آنها وعده دادند که با تغییر پارامترهای سیستم انگیزه‌ها را به نحوی جهت دهند که ارزش هر واحد DAI در بازار برابر با یک دلار باقی بماند (همان طور که سیاست‌گذاران پول فیات در نشست های فصلی خود وعده حفظ ارزش پول فیات و کنترل تورم می‌دهند).در ادامه به این سوال که این سیاست‌گذاران چه کسانی هستند، پارامتر های سیستم چگونه بر انگیزه فعالین بازار تاثیر می‌گذارد، و چرا این سیستم  غیر متمرکز تر از سیاست‌گذاری بانک مرکزی است پاسخ خواهم داد.مفهوم Collateralized Debt Position یا CDP چیست؟صندوق CDP یک مفهوم مشترک در دانش رمزنگاری و بازارهای مالی است که از سال ۲۰۱۴ و توسط پروژه Maker DAO در حال توسعه است. هدف این پروژه ایجاد یک نظام بانکداری و مالی غیر متمرکز بر اساس تکنولوژی بلاک‌چین و قراردادهای هوشمند است.صندوق CDP به شما این اختیار را می‌دهد که رمز ارزهای خود را (در حال حاضر فقط ETH) در گاوصندوق CDP به عنوان ضمانت قرار دهید و در برابر آن وامی به ارزش حداکثر ۶۶ درصد (این نرخ در حال حاضر ثابت است اما در آینده می تواند تغییر کند) ارزش ضمانت خود دریافت کنید. این وام در قالب رمز ارز DAI (که ارزش هر یک واحد آن برابر با یک واحد دلار آمریکاست) به شما پرداخت می‌شود. چنان‌چه شما می‌خواهید دوباره به مبلغ ضمانتی که در صندوق CDP به عنوان وثیقه سپردید دسترسی داشته باشید تنها کافیست وام دریافتی خود در قالب DAI را به صندوق بازگردانید.مثال:۱۰ واحد اتریوم را در صندوق CDP به عنوان ضمانت قرار می‌دهید. فرض کنید در این لحظه قیمت هر واحد اتریوم برابر با ۴۰۰ دلار آمریکاست؛ شما ۴ هزار دلار به عنوان ضمانت در این صندوق قرار داده‌اید.شما می‌توانید حداکثر ۶۶ درصد مبلغ ضمانت را وام بگیرید. بنابراین مبلغ ۲۶۴۰ دلار آمریکا در قالب رمز ارز دیجیتال DAI به شما وام داده می‌شود.می‌توانید مبلغ ۲۶۴۰ DAI را که به امانت گرفته اید هر موقع که مایل هستید پس بدهید و در برابر آن ۱۰ واحد اتریومی را که به ضمانت گذاشته اید پس بگیرید.توجه کنید که در این سیستم شما اتریوم‌هایی را که به عنوان ضمانت در صندوق CDP قرار می‌دهید از دست نخواهید داد اما در عین‌حال تا زمانی که به عنوان ضمانت در صندوق CDP قرار دارند دیگر نمی‌توانید کنترلی بر آن‌ها داشته باشید.اثر تغییرات قیمت ETH  بر روی رفتار سیستم و ریسک آنسناریوی اول: قیمت ETH افزایش می‌یابد.به طور مثال اگر قیمت ETH  به ۹۰۰  دلار افزایش یابد در این حالت شما می‌توانید ۲۶۴۰ واحد DAI  خود را به صندوق بازگردانید و در برابر آن ۱۰ واحد ETH  به ارزش ۹ هزار دلار دریافت کنید. در این سناریو هیچگونه ریسکی برای وام‌گیرنده و نیز صندوق CDP  وجود نخواهد داشت.سناریوی دوم: قیمت ETH  کاهش می یابد.در این سناریو در صورت کاهش زیاد قیمت ETH ، سیستم با ریسک عدم بازپرداخت وام مواجه خواهد شد. چنان‌چه به دلیل کاهش قیمت ETH ارزش وثیقه موجود در صندوق کمتر از ارزش وام دریافتی شود دیگر انگیزه‌ای برای وام گیرنده به منظور بازپرداخت وام وجود نخواهد داشت. برای حل این مشکل فرایند تسویه خودکار وام طراحی شده است.فرض کنید CDP ها دارای نرخ آغاز تسویه ۱۵۰ درصد هستند. بنابراین چنان‌چه به دلیل تغییرات قیمت ارزش مبلغ ضمانتی به یک‌ونیم برابر ارزش وام دریافتی کاهش یابد فرایند تسویه آغاز می‌شود. با آغاز فرآیند تسویه تمام ETH هایی که به عنوان ضمانت در صندوق CDP قرار داشتند در بازار آزاد به فروش می‌رسند و در برابر آن DAI دریافت می‌شود. پس از دریافت DAI  بخشی از آن - به ارزش DAI ای که در اختیار گیرنده وام است - نابود می‌شود. از میان DAI باقی‌مانده مقدار ۱۳ درصد آن به عنوان جریمه کسر می‌شود و مابقی به وام گیرنده بازپرداخت می‌شود. توجه کنید که در این فرآیند وام‌گیرنده DAI ای که در اختیار داشته است را همچنان نزد خود نگه می‌دارد.بنابراین وام‌گیرنده‌ها مسئول وضعیت وام و ریسک بازپرداخت و تسویه هستند؛ شما به عنوان وام‌گیرنده باید همیشه مراقب نسبت ارزش وثیقه به ارزش وام باشید و چنان‌چه این نسبت به نرخ آغاز تسویه ۱۵۰ درصد نزدیک شود باید اقدامات لازم را انجام دهید. در این حالت شما می‌توانید دو راهکار متفاوت رو انتخاب کنید: اول آن که مقداری از DAI که به عنوان وام در اختیار دارید را پس بدهید و راه حل دوم این است که به وثیقه خود نزد صندوق اضافه کنید. چنان‌چه شما هیچ یک از این دو راهکار را اتخاذ نکنید و قیمت همچنان کاهش یابد در این صورت فرآیند تسویه آغاز می‌شود.چگونه قیمت DAI در این سیستم برابر با یک دلار باقی می‌ماند؟دلیل ثبات ارزش DAI انتظارات و قوانین بازار آزاد است. به طور مثال سناریوهای مختلف زیر را در نظر بگیرید (برای سادگی فرض کنید قیمت اتریوم ثابت می‌ماند):سناریوی اول: DAI با ارزش کمتر از یک دلار در بازار معامله شود.فرض کنید که ارزش یک واحد DAI به ۰.۹ دلار کاهش پیدا کند. در این حالت انتظار بازگشت قیمت به سطح یک دلار باعث می‌شود فعالین بازار اقدام به خرید DAI کنند. این امر سبب افزایش تقاضای DAI می‌شود که خود سبب افزایش قیمت و بازگشت آن به سطح یک دلار می‌شود.کاهش قیمت DAI صرفا انگیزه سفته‌بازان را تحت تاثیر قرار نمی‌دهد بلکه رفتار وام گیرنده‌ها را نیز متاثر می‌کند. فرض کنید در ابتدا ارزش هر یک واحد DAI برابر با یک دلار باشد؛ شما مقداری اتریوم به عنوان وثیقه و به ارزش ۵۰۰ دلار به صندوق CDP ارسال می‌کنید و در برابر آن مقدار ۱۰۰ واحد DAI به عنوان وام و به ارزش ۱۰۰ دلار دریافت می‌کنید (توجه کنید که ارزش وام دریافتی باید حداکثر ۶۶ درصد ارزش ضمانت باشد اما می‌توانید هر مقداری کمتر از این نرخ وام بگیرید).حال شما می توانید این وام دریافتی را به هر نحوی که مایل هستید مصرف نمایید. فرض کنید شما این ۱۰۰ واحد DAI را به فروش رسانده و در  برابر آن ۱۰۰ دلار ETH  دریافت می‌کنید.حال فرض کنید که ارزش DAI در بازار به نود سنت کاهش پیدا می‌کند. در این حالت شما می‌توانید به بازار مراجعه کنید و مقدار ۱۰۰ واحد DAI  به ارزش ۹۰ دلار خریداری کنید.  سپس این ۱۰۰ واحد DAI  را به  صندوق CDP ارسال کنید تا وام خود را به صورت کامل بازپرداخت کنید و در برابر آن  اتریوم‌های خود را به ارزش ۵۰۰ دلار پس بگیرید.همانطور که مشاهده می‌شود در پایان این فرآیند الف) ۵۰۰ دلار  اتریوم‌هایی که به عنوان وثیقه قرار داده بودید را باز پس‌گرفته‌اید و ب) در برابر پرداخت ۹۰ دلار پول فیات به ارزش ۱۰۰ دلار اتریوم دریافت کرده‌اید. وجود این فرصت آربیتراژ باعث می‌شود که تمام وام گیرندگان در بازار اقدامی مشابه انجام دهند و در نتیجه تقاضا برای DAI افزایش پیدا می‌کند و در نتیجه آن قیمت DAI نیز افزایش می‌یابد.سناریوی دوم: DAI با ارزش بیشتر از یک دلار در بازار معامله شود.فرض کنید در ابتدا ارزش هر یک واحد DAI برابر با یک دلار باشد؛ در این حالت افرادی که DAI  در اختیار دارند آن را به ارزش یک دلار خریداری کرده‌اند. فرض کنید که ارزش یک واحد DAI به ۱.۱ دلار افزایش پیدا کند. در این حالت تمام افرادی که DAI در اختیار دارند آن را در بازار به ارزش ۱.۱ دلار می‌فروشند و به مقدار ۱۰ سنت برای هر واحد DAI که در اختیار دارند سود می‌کنند. این فرصت سود باعث می‌شود که دارندگان DAI آن را در بازار عرضه کنند و این افزایش عرضه باعث کاهش قیمت DAI می‌شود.سیاست پولی، پارامتر Stability Fee، وفای به عهدلایه دوم انگیزه‌ها در این سیستم از طریق رمز ارز MakerCoin با نماد MKR جهت‌دهی می‌شود. تقابل این انگیزه‌ها به شکلی طراحی شده است که سیاست‌گذاران پولی در این سیستم به عهد خود که حفظ ارزش DAI در برابر دلار است وفادار بمانند.ارز MKR یک توکن بر روی بلاک چین اتریوم است که به دارندگان آن حق حکمرانی و تصمیم‌گیری در مورد قراردادهای هوشمند پروژه Maker از قبیل DAI را می‌دهد. دارندگان MKR از طریق رای‌گیری مستقیم در مورد مسائل مختلفی از قبیل نرخ آغاز تسویه، جریمه فرایند تسویه و نرخ بهره وام (stability fee) تصمیم‌گیری می‌کنند. در برابر تلاش آن‌ها برای تنظیم این بازار مالی، سیستم نیز مکانیسم تشویقی برای دارندگان توکن MKR ایجاد می کند (در ادامه به آن اشاره می شود). دارندگان توکن MKR به مثابه سهامداران یک بانک غیر متمرکز هستند که مسئولیت این سیستم مالی بر عهده‌ی آن‌هاست و در ادامه به برخی از این مسئولیت‌ها اشاره می‌شود.قوی سیاه و نقش رمز ارز MKRقوی سیاه به شرایطی گفته می‌شود که قیمت اتریوم به ناگهان و با سرعت کاهش پیدا می کند؛ به طوری که ارزش ضمانت های موجود در CDP کمتر از ارزش وام‌های موجود می‌شود. به هنگام وقوع قوی سیاه کاهش قیمت آن‌قدر سریع اتفاق می‌افتد که سیستم فرصت پاسخگویی مناسب به آن را نخواهد داشت. در شرایطی که قوی سیاه اتفاق می‌افتد و ارزش وثیقه‌های موجود کمتر از ارزش کل موجودی DAI در بازار می‌شود توکن‌های بیشتری از MKR منتشر و عرضه می‌شود و سپس در بازار به فروش می‌رسد تا کمبود ارزش وثیقه‌های موجود جبران شود. افزایش عرضه MKR سبب کاهش ارزش آن خواهد شد و به همین دلیل ارزش سرمایه‌ی دارندگان MKR نیز کاهش می‌یابد. این امر انگیزه‌ای بسیار قوی برای دارندگان MKR فراهم می‌کند تا به‌صورت مسئولانه و متعهدانه قوانین بازار مالی را وضع کنند؛ زیرا اگر این سیستم با شکست مواجه شود دارندگان DAI به دلیل شکل طراحی این سیستم متضرر نخواهند شد و این دارندگان MKR خواهند بود که با کاهش ارزش سرمایه مواجه می‌شوند.حکم خاموشی سیستماین سیستم طی چندین سال‌ توسط توسعه‌دهندگانی باهوش و سختکوش توسعه یافته است و نقاط ضعف آن توسط گروه‌های مستقل مختلف مورد بررسی قرار گرفته و در طول زمان بهبود یافته است. اما همیشه امری غیرقابل پیش‌بینی ممکن است رخ دهد و باعث ناامنی در سیستم یا ایجاد اختلال شود؛ ممکن است یک باگ در سیستم کشف شود یا یک هکر اقدام به نفوذ در سیستم کند. در این شرایط حکم خاموشی سیستم توسط الف) یک گروه از افراد معتمد و منتخب دارندگان توکن MKR ب) یا با رای حداقل ۵ درصد از دارندگان توکن MKR صادر و اجرا می‌شود. در این حالت سیستم فریز شده و وثیقه‌های موجود در صندوق CDP به وام‌گیرنده‌ها و دارندگان DAI عودت داده می‌شود. این تنها یک مثال از شرایط صدور حکم خاموشی سیستم است. مثال‌های دیگر وقوع شرایط قوی سیاه و یا فرا رسیدن زمان آپگرید سیستم هستند.توجه کنید که صدور حکم خاموشی سیستم به معنای متمرکز بودن این سیستم مالی نیست. با صدور حکم خاموشی سیستم، سرمایه‌ی کسی مصادره نمی‌شود بلکه تنها وثیقه‌های موجود در صندوق CDP به مالکین آنها بازگردانده می‌شود. در این حالت سیستم فرصت می یابد تا اشکالات موجود را رفع نماید و سپس دوباره به کار خود ادامه دهد.سیاست پولی و نرخ بهرههنگامی که شما از پرتال CDP وام می‌گیرید باید در طول زمان هزینه‌ای به‌عنوان Stability Fee پرداخت کنید. این هزینه را می‌توان به عنوان نرخ بهره‌ی وام دریافتی در نظر گرفت که به صورت پیوسته محاسبه می‌شود. تعیین این نرخ بهره به عهده‌ی دارندگان توکن MKR است. این نرخ بهره باید با استفاده از توکن MKR پرداخت شود و در نهایت تمام این پرداختی‌ها به آدرس یک قرارداد هوشمند منتقل می‌شود تا در آن‌جا سوزانده شود و برای همیشه از چرخه‌ی عرضه خارج شود. این فرایند باعث کاهش عرضه کل MKR شده و در نتیجه ارزش MKR موجود در بازار به دلیل این کاهش عرضه افزایش می‌یابد. این همان مکانیسم تشویقی برای دارندگان توکن MKR است که پیش از این به آن اشاره شد.کارکرد این نرخ این است که می‌توان از آن برای ثابت نگه داشتن ارزش DAI استفاده کرد. هنگامی که ارزش DAI بیشتر از یک دلار باشد می‌توان این نرخ را کاهش داد تا هزینه‌ی فرصت استقراض کاهش پیدا کند و در نتیجه مقدار بیشتری DAI در بازار عرضه شود. در نتیجه‌ی این سیاست نهایتاً ارزش این توکن به یک دلار باز می‌گردد. از سوی دیگر هنگامی که ارزش DAI کمتر از یک دلار باشد می‌توان نرخ را افزایش داد تا هزینه فرصت استقراض افزایش پیدا کند و در نتیجه آن عرضه DAI کاهش یابد؛ این امر منجر به افزایش قیمت DAI و بازگشت آن به سطح یک دلار می‌شود.محصولات  بعدیدر حال حاضر شبکه Maker در حال کار بر روی وام‌های چند وثیقه‌ای (Multi Collateralized Debt - MCD) است. همان‌طور که تاکنون متوجه شده‌اید رمز ارز DAI  محصول وام‌های تک‌وثیقه‌ای (در حال حاضر تنها اتریوم به عنوان وثیقه پذیرفته می‌شود) است اما توسعه‌دهندگان شبکه Maker در حال فراهم‌سازی زیرساخت‌های لازم برای ارائه وام‌های چند وثیقه‌ای هستند و تصمیم‌گیری در مورد رمز ارزهای مورد قبول برای وثیقه به عهده‌ی دارندگان توکن است.منابعhttps://crypviz.io/knowledge-database/collateralized-debt-position/&amp;amp;amp;lt;br/&amp;amp;amp;gt;https://medium.com/cryptolinks/maker-for-dummies-a-plain-english-explanation-of-the-dai-stablecoin-e4481d79b90&amp;amp;amp;lt;br/&amp;amp;amp;gt;لینک‌های مفیدBuying MKR and DAI:https://shiftly.finance/CDP Portal for Loan:https://cdp.makerdao.com/Maker Project:https://makerdao.com/en/</description>
                <category>Cryptography</category>
                <author>Cryptography</author>
                <pubDate>Thu, 18 Jul 2019 20:46:30 +0430</pubDate>
            </item>
            </channel>
</rss>