مقالات عمومی

توضیحاتی پیرامون ایجاد سید (seed) ایمن در فضای ارز دیجیتال!

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

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

ممکن است نگران باشید که عاملان بد قدرت دسته ای از کامپیوتر ها را در اختیار بگیرند و شروع به ایجاد تعداد زیادی سید کنند تا بتوانند به سرمایه شما دسترسی داشته باشند. اما وقتی به بررسی این قضیه از لحاظ ریاضی و فیزیکی می پردازید، با توجه به فناوری امروز حتی با مقدار زیادی وقت و منابع نیز این امر تقریبا غیر ممکن است.

سعی کنید تا ده بشمارید. احتمالا این کار زیاد طول نمی کشد. حالا سعی کنید تا صد بشمارید، این کار کمی زمان می برد. این کار تقریبا ده برابر شمردن تا ۱۰ زمان می برد. حال تا

  100,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000 بشمارید.

این مقدار مربوط به عدد احتمالی سید های ارز دیجیتال ۶۴ کارکتری منحصر به فرد می باشد که متشکل از ۰ تا ۹ و A تا F می باشد. اکثر ارز های دیجیتال از ۲۵۶ بیتی ها به عنوان سید خود استفاده می کنند که معادل ۲۲۵۶ (یا حدود ۱۱۶* ۱۰۷۵ یا ۱۱۶ quattuorvigintillion) سید های احتمالی است (اگرچه کل این دامنه ممکن است در بعضی از ارز های دیجیتال معتبر نباشد). تعدادی بیت بیشتر اضافه کنید و به این ترتیب سید کافی برای اختصاص دادن به هر اتم در هستی قابل مشاهده موجود خواهد بود. بعضی تخمین زده اند که تقریبا ۱۰*۱۰۸۰ اتم در هستی قابل مشاهده موجود است.

فرض کنید کامپیوتر شما قادر باشد در یک ثانیه تا یک میلیارد بشمارد که این تقریبا سرعت شمارش معمول سخت افزار امروزی است. پس اگر بخواهید همه سید های احتمالی بیت کوین را بشمارید، ۱.۱۶* ۱۰۶۸ ثانیه نیاز است یا حدود ۳.۶۶* ۱۰۶۰ سال نیاز خواهید داشت. این حدود ۲.۶۹ * ۱۰۴۱ برابر بیش از سن جهان می باشد. فرض کنید که ما یک میلیارد از این کامپیوتر ها را در موازات همدیگر به کار برده ایم. هنوز هم باید ۲.۶۹ * ۱۰۴۱ برابر سن جهان صبر کنیم. مهمتر اینکه شمارش سید ها کافی نیست. شما هنوز باید یک آدرس از سید ایجاد کنید و هر زمانی که سید ایجاد می کنید در بلاک چین جستجو کنید تا ببینید که آیا آن سید منابع مالی دارد یا خیر. این امر حتی زمان بیشتری را به معادله اضافه خواهد کرد.

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

تصادفی بودن رمزنگاری

رمزگذاری و رمزنگاری

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

به دلیل اینکه مردم اهمیت ژنراتور های عدد تصادفی رمزنگاری را درک نکردند، این پول دزدیده شد. ژنراتور عدد تصادفی رمزنگاری دارای ویژگی های خاصی است که آن را در برابر این نوع حملات ایمن می کند. مهمترین ویژگی مورد نیاز اعداد تصادفی، یکنواختی است و شانس ایجاد هر سید باید برای همگان یکسان باشد. در غیر این صورت، تبعیض وجود خواهد داشت و عده ای می توانند عدد تصادفی را آسان تر حدس بزنند. یک ویژگی دیگر توالی های تصادفی می باشد. این مشکل اصلی فرمان PowerShell بود که قبلا مورد بحث قرار گرفت. این برنامه می توانست تنها ۲ میلیارد توالی منحصر به فرد از اعداد تصادفی ایجاد کند و بنابراین تنها می توانست ۲ میلیارد سید منحصر به فرد ایجاد کند. دلیل این امر ژنراتور عدد شبه تصادفی (PRNG) بود. PRNG ها برای این استفاده های مالی برجسته به اندازه کافی تصادفی نیستند؛ هر چند که پیاده سازی آنها به صورت کد کامپیوتری بسیار آسان تر است.

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

کیف پول آیوتا برای داشتن یک ژنراتور سید مورد استفاده قرار گرفت اما برداشته شد. با تحقیق متوجه شدیم که ژنراتور آنها دارای یک نقص (جانبدارانه بودن) بود. آنها اپراتور مدول (modulus) را بر روی یک عدد تصادفی رمزنگاری به کار می بردند که نتیجه را دور از تصادفی بودن یکنواخت مطلوب می کرد. آنها هرگز این اشتباه خود را اعلام نکردند بلکه این ویژگی را با commit message “عملکرد بدون استفاده را بردارید” برداشتند. در واقع پیاده سازی یک ژنراتور سید ایمن در جاوا اسکریپت خیلی مشکل نیست.

جانبداری عدد تصادفی

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

سید ها در آیوتا نیازمند ۸۱ کارکتر یا trytes می باشند و متشکل از حروف A تا Z و عدد ۹ می باشند. این به خاطر وابستگی آنها به ریاضیات سه تایی می باشد. آنها ۸۱ عدد صحیح ۳۲ بیتی امضا نشده و تصادفی رمزنگاری را ایجاد کرده اند و با ۲۷ آنها را تعدیل داده اند، در نتیجه این اعداد را می توان به trytes طرح ریزی کرد. یک عدد صحیح ۳۲ بیتی امضا نشده از صفر تا ۴۲۹۴۹۶۷۲۹۵ به شرطی که عدد تصادفی در دامنه صفر تا ۴۲۹۴۹۶۷۲۷۳ قرار گیرد، مشکلی ایجاد نمی کند زیرا تعدیل آن با ۲۷ یک عدد تصادفی یکنواخت ایجاد می کند.

حتی با این جانبداری، احتمال این که ژنراتور یک سید خوب و به دور از جانبداری ایجاد کند، بالا است. به عبارت دیگر، احتمال این که به یک سید جانبدارانه برسید ۱ در ۲.۴ میلیون است. و آن احتمالا بدین معنی است که تنها یک حرف خاص شانس متفاوتی برای انتخاب شدن داشته است. بیشتر غیر محتمل است که دو یا تعداد بیشتری حرف چنین جانبداری را داشته باشند.

با توجه به قضیه جانبداری، احتمال ایجاد حرف ۹ و یا هر حرف دیگری بین A و U تقریبا ۳.۷۰۳۷۰۳۷۰۸ درصد می باشد. در حالی که احتمال رسیدن به حرفی بین V و Z نسبتا کمتر و تقریبا ۳.۷۰۳۷۰۳۶۸۵ درصد است. تفاوت این دو تنها ۰.۰۰۰۰۰۰۰۲۳ درصد است. با توجه به این اطلاعات، به نظر احتمال کمی وجود دارد که یک هکر به آزمون و خطای یک سید جانبدارانه بپردازد.

ژنراتور سید مخرب

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

فرمان های سید ایمن

seed

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

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

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

بهترین اقدامات ذکر شده در پایین آن وبسایت را در اینجا هم تکرار می کنیم:

  • زمانی که مشغول ایجاد سید هستید، اینترنت خود را غیر فعال کنید.
  • همیشه بعد از درج کردن سید خود کلیپ بورد را پاک یا اوررایت (overwrite) کنید. وبسایت ها و برنامه های مخرب به آرامی و در خفا می توانند کلیپ بورد شما را بخوانند.
  • سید های متعددی ایجاد کنید و آنها را به طور تصادفی با هم پیوند دهید. این کار حملات key logging/ terminal history را کاهش می دهد و کنترل بهتری را برای شما فراهم می کند. مطمئن شوید که عدد صحیحی از کارکتر ها را داشته باشید.
  • سید های خود را کدگذاری کنید. رمزگذاری کلمه عبور نمونه با gpg:  gpg –symmetric seeds.txtو کدگشایی: gpg seeds.gpg

فرامین و توضیحات بالا را مطالعه کنید، بنابراین می توانید آنها را به طور دستی بگذارید.

مواظب وبسایت های مقلد باشید زیرا آنها ممکن است تغییرات مخربانه ای به نسبت فرمان های ایجاد سید داشته باشند. شما می توانید کد را دانلود کنید و خودتان آن را اجرا کنید (اگر NodeJS را نصب کرده باشید) و فرمانnpm install; npm run dev  را در دایرکتوری اجرا کنید.

همچنین به تیم آیوتا پیشنهاد می شود که فرمان های ایجاد سید را بررسی کنند و اضافه کردن آنها را به کیف پول حال حاضر مد نظر قرار دهند. بنابراین کاربران می توانند به روشی ساده تر و ایمن تر برای ایجاد سید ها دسترسی داشته باشند.

منبع
medium

نوشته های مشابه

اشتراک
اطلاع از
0 دیدگاه
Inline Feedbacks
View all comments
دکمه بازگشت به بالا