<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های &lt;/Mojtaba&gt;</title>
        <link>https://virgool.io/feed/@mjtbkh</link>
        <description>توسعه دهنده نرم افزار | علاقه مند به بلاکچین و سیستم های توزیع شده و رمزنگاری | دانشجوی پزشکی</description>
        <language>fa</language>
        <pubDate>2026-06-07 02:19:33</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/90599/avatar/94ClgI.png?height=120&amp;width=120</url>
            <title>&lt;/Mojtaba&gt;</title>
            <link>https://virgool.io/@mjtbkh</link>
        </image>

                    <item>
                <title>مکانیسم اثبات آگاهی صفر: zkSNARK و zkSTARK</title>
                <link>https://virgool.io/Solidity/zeroknowledge-mechanisms-zksnark-and-zkstark-bpytq9yzpomt</link>
                <description>اثبات آگاهی صفر: مثال غار علی باباقدم اول: آشنایی با مکانیسم اثبات آگاهی صفردر این مکانیسم، قصد این است که 2 شرکت کننده اصلی در فرآیند (اثباتگر و تاییدگر) میتوانند بر سر یک statement توافق کنند؛ به صورتی که اثباتگر از این statement آگاه است اما بدون اینکه بخواهد هیچگونه جزئیاتی از آن را در اختیار تاییدگر بگذارد، اثبات کند که به statement آگاه است.تاییدگر بدون در اختیار داشتن خود statement یا جزئیاتی از آن، قادر نیست صحت یا عدم صحت آن را برای دیگری اثبات کند و تنها اثباتگر میتواند چنین کاری کند. با توجه به این موضوع، اگر اثباتگر کوچکترین آگاهی از statement داشته باشد، مکانیسم اثبات آگاهی صفر نقض میشود.به زبان ساده در این مکانیسم، یک طرف به طرف دیگری اثبات میکند که از موضوعی آگاهی دارد بدون اینکه موضوع را بیان کرده یا انتقال دهد.در پروتکلی که چنین مکانیسمی اعمال شود، پروتکل باید قادر باشد که یک سری input های تعاملی از سوی تاییدگر دریافت کند. این ورودی ها یک یا تعدادی چالش هستند که پاسخ آنها از سوی اثباتگر، تاییدگر را قانع میکند که اثباتگر درباره ی آن statement مذکور، صادق است. این حالت interactive zero-knowledge proof نام دارد.یک سری non-interactive zero-knowledge proof نیز داریم که کارکرد آنها وابسته به مفروضات پردازش یافته (computational assumptions) است مثل هش های کریپتوگرافیک.فرض، گذاره ایست که صحت و وقوع آن حتمیست؛ بدون آنکه نیاز به اثبات داشته باشد.مثال هایی برای درک مکانیسم آگاهی صفر1- غار علی باباغار علی بابا، یک ورودی داشته و دو دالان دارد که به هم متصل بوده و گرد هستند. بین این دو دالان دری وجود دارد که با یک کلمه رمز باز میشود. پگی به عنوان اثباتگر، رمز در را میداند و میخواهد به ویکتور که تاییدگر است، این موضوع را اثبات کند بدون اینکه رمز را به او لو بدهد.پگی وارد یکی از 2 دالان میشودپگی بدون اطلاع دادن به ویکتور وارد یکی از 2 دالان شده و کنار در توقف میکند. ویکتور مسیر عبور او را ندیده و نمیداند در دالان A قرار دارد یا B.ویکتور وارد میشود!ویکتور به داخل غار آمده و بر سر دو راهی دالان ها ایستاده و به پگی دستور میدهد که از کدام دالان برگردد. پگی با دانستن رمز در، مشکلی برای عبور از هرکدام از دالان ها ندارد.پگی می آید!پگی از همان مسیری که ویکتور خواسته به دوراهی برمیگردد.با این حال ویکتور نمیداند که آیا پگی اصلا مجبور به عبور از در شده یا نه. بنابراین این کار را آنقدر انجام میدهند تا ویکتور قانع شود که پگی رمز را دارد.احتمال اینکه پگی در 10 بار تکرار این فرآیند هر بار به صورت شانسی نیازی به عبور از در نداشته باشد بسیار اندک است:1/2 to the power 10 = 1/10242- دو توپ و فرد کور رنگدو توپ سبز و قرمز داریم و فردی کور رنگ که هیچ تمایزی بین این 2 نمیدهد. او اصلا شک دارد به این که هر 2 توپ یکسان اند. توپ ها را به او میدهیم تا پشت سرش، هر کدام را در یک دست بگذارد و یکی را به انتخاب خود نشان بدهد. فرد دیگر باید بگوید رنگ توپ چیست. فرد کور رنگ، دوباره توپ را پشت سرش برده و به دلخواه خود جابجا میکند یا نمیکند! شخص کور رنگ بار دیگر یک توپ را نشان داده و میپرسد که آیا توپ عوض شده یا خیر. فرد کور رنگ خودش میداند که توپی که نشان میدهد همان قبلیست یا نه، اما آگاهی ندارد که &quot;آیا واقعا رنگ آن قرمز است یا سبز؟ رنگ دو توپ اصلا متفاوت است؟&quot;در تعداد تکرار بالای این فرآیند نیز، احتمال اینکه رنگ هر دو توپ یکی باشد بسیار پایین خواهد آمد.قدم دوم: تکنولوژی های zkSNARK و zkSTARKدو تکنولوژی برجسته در اثبات آگاهی صفر، zero-knowledge succinct non-interactive argument of knowledge و zero-knowledge scalable transparent argument of knowledge اند که به آنها میپردازیم.هر دوی این تکنولوژی ها non-interactive بوده و میتوانند به صورت یک پیاده سازی شده و عمل کنند.SNARKs procedureپایه امنیت در zkSNARK ها، کریپتوگرافی منحنی های بیضوی است. اینگونه کریپتوگرافی ها هرچند تصادفی بوده اما در مقابل محاسبات کوانتومی آسیب پذیر اند. یافتن کلید خصوصی از روی کلید عمومی تولید شده، هرچند کار آسانی نیست اما به وسیله محاسبات کوانتومی امکان پذیر است.این تکنولوژی که آن را اثبات آگاهی صفر مختصر غیر تعاملی مینامیم، نیاز به یک ستاپ (setup) اولیه دارد. در طی ستاپ اولیه یک جفت کلید prover-verifier ایجاد میشود که برای تامین امنیت نیاز است که کلید prover پس از ایجاد proof نابود شود. در این مکانیسم تنها یک proof و یک کلید تاییدگر خواهیم داشت و هزینه storage و verify به شدت کاهش میابد اما وجود یک کلید که باید نابود شود، محیط را از حالت trustless به سویی میبرد که برای از بین رفتن کلید نیاز به trust داشته باشیم.اگر امنیت کلید prover به خطر بیفتد، میتوان با آن تراکنش های جعلی ساخت و به خاطر ویژگی های zkSNARK روشی برای اثبات جعلی بودن آن نیست.از سوی دیگر، zkSTARK ها وابسته به توابع هش برای تامین امنیت اند و این موضوع آنها را در مقابل محاسبات کوانتومی مقاوم میکند، اما در عین حال، هزینه ها را تا 4 برابر SNARK ها برای تولید proof و نگهداری از آن افزایش میدهند. برای استفاده از STARK ها نیازی به ستاپ اولیه نیست و این موضوع، محیط را هر چه بیشتر امن و غیرمتمرکز میکند.با این حال STARK ها اجازه میدهند تا محاسبات و نگهداری از proof ها به صورت off-chain انجام شده و سپس proof ها در هر زمان به صورت on-chain تایید شوند. این موضوع قابلیت مقیاس پذیری بالایی را در اختیار توسعه دهندگان قرار میدهد.جداول مقایسه بین zkSNARK و zkSTARK در مقابل bulletproofsویژگی ها | source: Matter labsسایز و سرعت عملکرد در تولید و تایید proof ها | source: beanstalk</description>
                <category>&lt;/Mojtaba&gt;</category>
                <author>&lt;/Mojtaba&gt;</author>
                <pubDate>Sat, 23 Oct 2021 18:10:27 +0330</pubDate>
            </item>
                    <item>
                <title>حمله SleepMinting چیست و چگونه اصالت NFT ها را تهدید میکند؟</title>
                <link>https://virgool.io/Solidity/nfts-and-sleepminting-attack-i0zpzs1jenum</link>
                <description>توکن های غیرمثلی یا همون NFT ها در واقع یک سری قراردادهای هوشمند ERC-721 هستند که مالکیت اون ها در یک زمان در دست یک آدرس شبکه است. فرض کنید سه آدرس مجزای صاحب چندین NFT داریم که اینجا برای راحتی کار، از اسامی به جای آدرس استفاده میکنیم. state فرضی ما اینگونه خواهد بود:Alice: 1Booble: 2Malory: 3در یک فروش معمولی و سالم، Alice یک توکن برای Booble ارسال میکند. بنابراین state اینگونه خواهد شد:Alice: Booble: 3Malory: 3در طراحی قراردادهای ERC-721 به طور کلی قاعده طراحی smart-contract به این صورت هست که هر اکانت در شبکه توانایی ارسال NFT هایی رو داره که صاحب اون ها هست (ownership). این در واقع حالتیست که توسط توسعه دهنده های smart-contract پیاده میشه تا هر اکانت ثالثی قادر به دستکاری و فراخوانی توابع یا ارسال توکن های تحت مالکیت صاحب اون قرارداد نباشه.حالا اگر توسعه دهنده ها این قاعده رو بر هم بزنن چی؟ماشین مجازی اتریوم قاعده ای برای تشخیص smart-contract های خوب یا بد نداره و هر قرارداد هوشمندی که با موفقیت روی شبکه دیپلوی بشه، طبق دستوراتی که برای اون تعریف شده برای همیشه عمل میکنه.در پیاده سازی یک قرارداد ما عموما با استفاده از مفهوم ownership قابلیت دسترسی به یک سری توابع مهم (مثل تابع خالی کردن موجودی قرارداد یا تابع انتقال ownership) رو محدود میکنیم تا یک آدرس/آدرسهای خاص بتونن به اون توابع دسترسی داشته باشن.همین موضوع میتونه باعث بشه قابلیت جعل اصالت NFT ها فراهم بشه. وقتی NFT ها مینت میشن، در واقع توسط آدرس 0 (address(0)) ایجاد شده و بعد ownership به نام اکانت مینت کننده زده میشه.با ویرایش اینترفیس ERC-721 میتونیم برای یک اکانت دیگه NFT مینت کنیم که تراکنش مینت کردن به صورت زیر خواهد بود:mint 1:   address(0) ===&gt; Booble (executed by Malory)اینجا مالوری به عنوان یه bad-actor یه NFT برای بوبل مینت میکنه. در حالی که صدا زننده قرارداد هوشمند مالوری بوده، اما از طریق ویرایش اینترفیس ERC-721، مالکیت NFT برای Booble خواهد بود.حالا فرض کنید این بوبل، همون beeple خالق اثر &quot;Everydays - The First 5000 Days&quot; هست. حمله کننده میتونه از طریق یه قرارداد هوشمند یه NFT برای beeple مینت کنه و داخل قرارداد، به اکانت خودش اجازه انتقال این NFT رو بده. حمله گر به راحتی از طریق sleepminting با استفاده از اعتبار و محبوبیت beeple، میتونه یک NFT جعلی درست کنه و بفروشه...source: https://timdaub.github.io/2021/04/22/nft-sleepminting-beeple-provenance/</description>
                <category>&lt;/Mojtaba&gt;</category>
                <author>&lt;/Mojtaba&gt;</author>
                <pubDate>Mon, 18 Oct 2021 00:30:38 +0330</pubDate>
            </item>
                    <item>
                <title>چرا به بلاکچین به عنوان یک تکنولوژی اطمینان داریم؟</title>
                <link>https://virgool.io/Solidity/why-do-we-trust-blockchain-vsspozdpo3af</link>
                <description>این مقاله اولین بار در انجمن قراردادهای هوشمند منتشر شده است.بلاک‌چین تکنولوژی ایست نوپا که در ابتدا توسط “ساتوشی ناکاموتو” یا همان خالق بیت‌کوین به‌عنوان یک دفتر کل غیرمتمرکز، توزیع شده و رمزنگاری شده و غیر قابل دست‌کاری ابداع شد (Decentralized, distributed, cryptographically hashed and tamper-proof ledger) و سپس ارز دیجیتال بیتکوین بر پایه آن راه اندازی شد تا ما تنها شاهد یکی از چندها کاربرد این تکنولوژی خارق العاده باشیم. در این مطلب کوتاه، با تکیه بر عملکرد بلاکچین بیتکوین توضیح خواهم داد که چرا به عملکرد یک سیستم بلاکچینی برای انجام تراکنش های مالی اعتماد داریم.بلاک‌چینبه زبان ساده‌تر، می‌توان بلاک‌چین را نوعی معماری پایگاه‌داده دانست که در آن، داده‌ها در بین اعضای شبکه به صورت امضا شده پخش شده و هر عضو از شبکه یک کپی کامل از اطلاعات شبکه را نگهداری می‌کند. هر دسته از داده‌ها که در یک زمان با هم وارد شبکه شده‌اند (در اینجا منظور بلاک است) توسط یکی از اعضای شبکه امضا یا اصطلاحاً هش (hash) می‌گردد. پس از آن، بلوک و امضای آن به کل شبکه مخابره شده و دیگر اعضا نیز بلوک و امضای آن را به کپی‌ای که از قبل داشتند اضافه می‌کنند و بدین ترتیب زنجیره‌ای از بلوک‌ها یا blockchain شکل می‌گیرد.در بلاک‌چینی مانند بلاک‌چین بیت‌کوین که مبتنی بر الگوریتم اثبات کار (PoW: Proof of work) است، داده‌های ما در واقع تراکنش‌هایی است که کاربران شبکه ارسال می‌کنند. در اینجا ماینرهای شبکه بیت‌کوین، تراکنش‌ها را در کنار امضای بلوک قبلی گذاشته و یک امضای جدید تولید می‌کنند. این امضا که در شبکه بیت‌کوین یک عدد 64 رقمی در مبنای 16 است باید مطابق با شرطی باشد که شبکه برای ماینرها وضع می‌کند. بلاک‌چین بیت‌کوین پس از هر 2016 بلاکی که ماین می‌شود، بسته به قدرت تولید هش ماینرهای شبکه شرط جدیدی برای مقدار هش 2016 بلاک بعدی تعیین می‌کند.هش تولید شده، حاصل از کنار هم گذاشتن تراکنش‌ها، هش بلاک قبلی و تعدادی پارامتر دیگرست که خارج از بحث ماست. این هش بسیار تصادفی و غیر قابل حدس است و نیز امکان وارون کردن هش برای دستیابی به داده‌ها وجود ندارد. خاصیت تصادفی بودن هش در الگوریتم مورداستفاده بیت‌کوین (SHA256) چنان بالاست که اگر از حدود 2000 تراکنش فرضی که در یک بلاک ثبت شده‌اند، مقدار یک تراکنش را معادل 1 سنت آمریکا تغییر دهیم، هش تولید شده به‌کلی تغییر میابد. این رخداد، اثر بهمن یا Avalanche effect نام دارد (با شلیک یک گلوله در یک کوه پوشیده از برف شما یک بهمن ویرانگر راه می‌اندازید!).فرض کنید یکی از ماینرهای شبکه قصد دست‌کاری در تراکنش‌هایی را دارد که دو سال پیش انجام شده‌اند؛ او باید در یک بلاک قدیمی تراکنشی را بگنجاند، با این کار هش قبلی تولید شده برای آن بلاک نامعتبر خواهد شد و باید از نو برای آن بلاک هش تولید کند. با تولید هش جدید، هش بلاک بعدی که وابسته به هش بلاک قبلی بود نیز نامعتبر خواهد شد و این رخداد به صورت زنجیره‌ای در تمامی بلاک‌های بعدی رخ می‌دهد. فرض کنیم که ماینر برای تمام این بلاک‌ها هش جدید تولید کرده است، اکنون باید این هش ها را به شبکه و دیگر ماینرها مخابره کند. دیگر ماینرها که کپی سالمی از شبکه دارند با مقایسه هش ها متوجه تغییر بلاک‌ها می‌شوند و با پروتکلی که در اینجا آن را پروتکل اجماع (Consensus protocol) می‌نامیم، باتوجه‌به اینکه ماینرهای دیگر که کپی سالمی از شبکه دارند در اکثریت هستند، زنجیره‌ای را که ماینر خرابکار به شبکه مخابره کرده رد می‌کنند.در یک سیستم بلاکچین هیچ تصمیم گیرنده مرکزی وجود ندارد و تصمیم گیری ها از طریق پروتکل اجماع صورت میگیرد. تا زمانی که یک ماینر یا یک دسته ماینر به بیش از 50 درصد قدرت تولید هش در شبکه دست نیابند، قادر به جعل و دستکاری در زنجیره نیستند زیرا بقیه اعضای شبکه بلاک هایی را که ممکن است توسط این ماینرهای مخرب دستکاری شده باشند رد میکنند. در صورتی که قدرت تولید هش در دست عده ای از ماینر ها تجمع یابد و بر دیگر ماینرها غلبه کند، میتوانند در بلاک های قبلی دستکاری اعمال کرده و آنها را به شبکه مخابره کنند و با توجه در اکثریت بودن ماینرهای مخرب، بلاک های تولید شده توسط آنها پذیرفته خواهد شد. این دستکاری در یک سیستم بلاکچینی، حمله 51 درصدی نام دارد که در بلاکچین های مبتنی بر الگوریتم اثبات کار که وابسته به تولید هش توسط ماینرها هستند میتواند رخ دهد.توزیع شدگی بلاکچین به صورت ذاتی این قدرت را به شبکه میبخشد تا مورد اینگونه حملات قرار نگیرد. به عنوان مثال در شبکه بیتکوین با توجه به گستردگی و توزیع شدگی ماینرها، تا کنون چنین حمله ای رخ نداده است.کد منبع (source code) بلاک‌چین‌های عمومی چون بیت‌کوین و اتریوم منبع باز (open source) است و هر فرد آشنا با برنامه‌نویسی می‌تواند با بررسی کدهای این سیستم‌ها به‌خوبی متوجه عملکرد بلاک‌چین‌ها و عدم وجود یک تصمیم‌گیرنده مرکزی در آن شوند. هر نود و ماینر با اجرای کد بلاک‌چین یک کپی از تمامی بلاک‌ها برای خود ذخیره می‌کند، ضمن اینکه ماینرها بلاک‌های جدید را نیز استخراج کرده و به شبکه اضافه می‌کنند. هر میزان که تعداد ماینرها و قدرت تولید هش توسط آن ها بالاتر رود و این قدرت در بین ماینرهای مختلف توزیع شده باشد، بلاک‌چین امن‌تری را خواهیم داشت، زیرا پروتکل اجماع برحسب آرای اکثریت شبکه عمل می‌کند و توزیع‌شدگی ماینرها و قدرت تولید هش، از تجمیع قدرت تصمیم‌گیری در دست یک ماینر یا یک گروه ماینر جلوگیری می‌کند.این موضوع آن‌قدر قابل‌اعتماد است که امروزه 2 بلاک‌چین ارز دیجیتال پیشرو، یعنی بیت‌کوین و اتریوم ارزشی حدود بیش از 1500000000000 را در خود ضبط کرده‌اند (هنگام نگارش این متن) و حتی بلاک‌چین اتریوم با توجه با قابلیت‌هایی که دارد اجازه ساخت و توسعه سیستم‌های مالی غیرمتمرکز یا DeFi را در اختیار ما قرار می‌دهد. امروزه حوزه دیفای رقیب جدی سیستم بانکداری دولتی به‌حساب می‌رود؛ به طوری که خیل عظیمی از پلتفرم‌های وام‌دهی، کشت سود و… بر بستر بلاک‌چین اتریوم راه‌اندازی شده و توجه بسیاری را به خود جلب کرده است. بستر خلاقانه بلاک‌چین اتریوم این اجازه را به برنامه‌نویسان می‌دهد تا برنامه‌هایی با قابلیت اجرا روی این بلاک‌چین را توسعه دهند؛ برنامه‌هایی که تمام سوابق استفاده خود را در بلاک‌های این بلاک‌چین ذخیره می‌کنند. این برنامه‌ها، قراردادهای هوشمند نام دارند.غیر قابل دست‌کاری بودن بلاک‌چین (tamper-proof) یک دیتابیس قابل‌اطمینان از سوابق و عملکردهای این قراردادها در اختیار ما قرار می‌دهد. کاربرد بلاک‌چین و اعتمادی که برای ما به ارمغان میاورد، محدود به دنیای ارزهای دیجیتال نیست؛ می‌توان یک سیستم هویت دیجیتال بر بستر بلاک‌چین راه‌اندازی کرد و سوابق تحصیلی دانش‌آموزان یک کشور را در چنین سیستمی به ثبت رساند. این نوآوری از جعل مدارک تحصیلی جلوگیری می‌کند و تنها مدارکی قابل‌قبول خواهند بود که از سوی ارگان‌های آموزشی معتبر و با دیتای معتبر در این بلاک‌چین ثبت شده باشند. روند بررسی اصالت مدارک بسیار کوتاه شده و نیازی به فرایندهای کپی برابر اصل کردن مدارک نیست؛ به‌راحتی و با اعتمادی که نسبت به مقاومت یک بلاک‌چین به دستکاری و جعل داریم می‌توان به‌راحتی اصالت مدرک یک دانش‌آموز را از بلاک‌چین بررسی کرد.در یک نوآوری دیگر، می‌توان از بلاک‌چین برای بررسی اصالت، سلامت و معتبر بودن کالا استفاده کرد. برای مثال در فرانسه با پیاده‌سازی یک سیستم بلاک‌چینی به خریداران مرغ این قابلیت داده شده تا بتوانند با بررسی QRCode روی بسته مرغ، از وضعیت پرورش و دانه‌ای که مرغ با آن تغذیه شده مطلع شوند.می‌توان از بلاک‌چین در توسعه سیستم‌های ذخیره فایل توزیع شده استفاده کرد. در چنین سیستم‌هایی از قبیل Filecoin دیتای کاربر این شبکه به صورت قطعات رمزگذاری شده در بین نودهای این شبکه توزیع می‌شود به صورتی که یک نود فایل را به صورت کامل در دست ندارد و آن قطعاتی از فایل نیز که بر روی سیستم او ذخیره می‌گردد رمزگذاری شده و غیر قابل خواندن‌اند.در نهایت باید گفت اعتمادی که ما به بلاک‌چین داریم، حاصل اعتماد و استفاده هرچه بیشتر کاربران از این سیستم‌هاست؛ بلاک‌چین روشی است تا بتوانیم به شیوه‌ای بدون نیاز به اعتماد و شناخت یکدیگر و یا اعتماد به یک شخص یا ارگان ثالث برای میانجیگری، فضایی مورد اعتماد به وجود بیاوریم.توضیح بیشتر درباره مکانیسم تولید هش در بلاک های بیتکوین الگوریتمی که در تولید هش برای بلاک های بیت‌کوین به کار میرود، درخت مرکل نام دارد.درخت مرکل دارای یک هش ریشه است که همان هش نهایی بلاک هست. برای تولید این درخت ۲ تراکنش با هم انتخاب شده و هش میشوند. این روند ادامه میابد تا دسته ای از هش های جفت تراکنشی داشته باشیم، سپس ۲ جفت تراکنش با هم وارد تابع هش میشوند تا این بار یک هش برای ۲ جفت تراکنش تولید شود.این روند زنجیره‌ای تا جایی ادامه میابد که آخرین ۲ هش حاصل از شاخه‌های قبلی یک هش نهایی به وجود بیاورند و تنها یک هش داشته باشیم. این هش همان ریشه درخت مرکل و امضای بلاک ما خواهد بود.</description>
                <category>&lt;/Mojtaba&gt;</category>
                <author>&lt;/Mojtaba&gt;</author>
                <pubDate>Thu, 26 Aug 2021 21:42:17 +0430</pubDate>
            </item>
            </channel>
</rss>