کلیدهای آبکاری شده:کلید عمومی تعمیم یافتهی آبکاری شده یکی از مشکلات بالقوه ی کلیدهای تعمیم یافتهی معمولی را حل میکنند.
اگر مهاجم یک کد زنجیرهی والد و کلیدهای عمومی والد نرمال را دریافت کند، میتواند تمام کدهای زنجیرهی قابل استنتاج از آن را به دست آورد.
برای این کار از حملهی جستجوی فراگیر ( brute-force ) استفاده می شود .
همچنین اگر مهاجم کلیدهای خصوصی فرزند، نوه، یا سطح پایینتر را به دست آورد، میتواند از کد زنجیره برای تولید تمام کلیدهای خصوصی تعمیم یافتهای که از آن کلید ارث میبرند، استفاده کند.
در معرض خطر قرار گرفتن کلیدهای میاننسلی:
با توجه به شکل بالا مورد بدتر این است که، مهاجم میتواند برای بازیابی کلیدهای خصوصی والد، فرمول استنتاج کلیدهای خصوصی فرزند را برعکس کند و کد زنجیرهی والد را از یک کلید خصوصی فرزند کم کند .
به عبارت دیگر مهاجم اگر کلید عمومی تعمیم یافته یا هر کلید خصوصی را به دست آورد، میتواند کلید خصوصی آن کلید عمومی و تمام کلیدهای استنتاجشده از آن را بازیابی کند.
به همین دلیل، بخش کد زنجیرهی کلیدهای عمومی تعمیم یافته باید از ایمنی بالاتری نسبت به کلیدهای عمومی استاندارد برخوردار باشد.
به کاربران توصیه می شود که حتی کلیدهای خصوصی تعمیمنیافته خود را در محیطهای غیر قابل اعتماد منتشر نکنند.
با جایگزین کردن فرمول استنتاج کلیدهای نرمال با یک فرمول استنتاج کلیدهای آبکاری شده میتوان این مشکل را حل کرد.
استنتاج کلیدهای خصوصی فرزند نرمال:
فرمول استنتاج کلیدهای نرمال، که در بخش بالا توضیح داده شد، عدد شاخص، کد زنجیرهی والد، و کلید عمومی والد را ترکیب میکند تا کد زنجیرهی فرزند و مقدار عدد صحیح را ایجاد کند
سپس با کلید خصوصی والد ترکیب میشود تا کلیدهای خصوصی فرزند را ایجاد کند.
استنتاج کلیدهای خصوصی فرزند آبکاری شده:
فرمول آبکاری شده که در بالا نشان داده شد، عدد شاخص، کد زنجیرهی والد، و کلید خصوصی والد را با هم ترکیب میکند تا دادهی مورد استفاده برای تولید کد زنجیرهی فرزند و کلید خصوصی فرزند ایجاد کند.
این فرمول ایجاد کلیدهای عمومی فرزند را بدون دانستن کلید خصوصی والد ممکن میسازد.
به عبارت دیگر، کلیدهای عمومی تعمیمیافته والد نمیتوانند کلیدهای عمومی فرزند آبکاری شده را ایجاد کنند.
به همین علت، یک کلید خصوصی تعمیم یافتهی آبکاری شده نسبت به یک کلید خصوصی تعمیم یافتهی نرمال بسیار کمتر مورد استفاده قرار میگیرد.
با این حال، کلیدهای خصوصی تعمیمیافتهی آبکاری شده یک فایروال ایجاد میکنند، به این ترتیب از تهدیدهای استنتاج کلیدهای چند سطحی جلوگیری میشود.
از آنجایی که کلیدهای عمومی تعمیم یافتهی فرزند آبکاری شده نمیتوانند کدهای زنجیرهی نوه را تولید کنند، در معرض خطر قرار گرفتن یک کلید عمومی تعمیمیافته والد نمیتواند یک کلید خصوصی نوه را تحت تأثیر قرار داده و کلیدهای خصوصی تعمیمیافتهی نبیره را ایجاد کند.
پروتکل HD از اعداد شاخص متفاوتی برای نشان دادن اینکه کلیدی نرمال یا آبکاری شده باید تولید شود، استفاده میکند.
سلسله مراتب زیر نشانههای اصلی و فایروالهای کلیدهای آبکاریشده را نشان میدهد :
اعداد شاخص از 0x00 تا 0x7fffffff کلیدی نرمال را تولید میکنند و از 0x80000000 تا 0xffffffff کلیدی آبکاری شده را تولید میکنند.
به عبارت ساده، بسیاری از توسعهدهندگان از نماد اصلی برای نشان دادن کلیدهای آبکاری شده استفاده میکنند. بنابراین اولین کلید نرمال (0x00) ۰ است و اولین کلید آبکاری شده (0x80000000)، ۰′ است.
(توسعهدهندگان بیتکوین معمولاً از اپوستروف اَسکی به جای نماد اصلی یونیکد استفاده میکنند، از این پس ما از این قرارداد پیروی میکنیم.)
این توصیف بعدها با اسلشهایی که دارای پیشوندهای m (خصوصی)یا M (عمومی)ترکیب شدند که نشاندهندهی سلسله مراتب و نوع کلید است.
به عنوان مثال :
m/0’/۰/۱۲۲’ به ۱۲۳امین از کلیدهای خصوصی فرزند آبکاریشده (با شماره شاخص) از اولین فرزند نرمال (با شاخص) از اولین فرزند آبکاریشده (با شاخص) از کلیدهای خصوصی اصلی است.
استنتاج کلیدهای قطعی سلسله مراتبی:
کیف پولهایی که از پروتکل BIP32 HD پیروی میکنند، تنها فرزندان آبکاریشدهی کلید خصوصی اصلی (m) را ایجاد میکنند تا از تحت تأثیر قرار گرفتن کلیدهای اصلی توسط یک کلید فرزند آسیبدیده جلوگیری شود.
از آنجایی که هیچ فرزند نرمالی برای برای کلیدهای اصلی وجود ندارد، کلید عمومی اصلی در کیف پولهای HD استفاده نمیشود.
تمام کلیدهای دیگر میتوانند فرزندان نرمال داشته باشند، بنابراین، ممکن است بتوان از کلیدهای عمومی تعمیمیافتهی متناظر استفاده کرد.
پروتکل HD همچنین یک فرمت سریالسازی برای کلیدهای عمومی تعمیمیافته و کلیدهای خصوصی تعمیمیافته توصیف میکند.
ذخیرهی دانههای ریشه:
ذخیرهی دانههای ریشهی SeedsRoot در پروتکل HD، ۱۲۸، ۲۵۶، یا ۵۱۲ بیت از دادههای تصادفی هستند که باید به طور دقیق مورد پشتیبانی قرار بگیرند.
برای اینکه استفاده از روشهای پشتیبانگیری غیر دیجیتالی، مانند ذخیرهسازی یا کپی کردن دستی راحتتر باشد.
BIP39 یک روش برای ایجاد یک دانهی ریشهی ۵۱۲ بیتی شبه جمله (یادسپار) از کلمات زبان طبیعی تعریف میکند که خود آن از ۱۲۸ تا ۲۵۶ بیت از آنتروپی ایجاد شده و به صورت اختیاری توسط گذرواژه محافظت میشود.
تعداد کلمات تولید شده با مقدار آنتروپی استفاده شده مرتبط است:
کلمهی عبور میتواند هر طولی داشته باشد. این کلمه به شبه جملهی حفظی اضافه میشود، و سپس هر دو شبه جمله حفظی و کلمهی عبور ۲۰۴۸ بار با استفاده از HMAC-SHA512 هش میشود .
در نتیجه یک دانهی ۵۱۲ بیتی تولید میشود که ظاهراً تصادفی است.
از آنجایی که هر ورودی به این تابع هش یک دانهی ۵۱۲ بیتی به ظاهر تصادفی را تولید میکند، هیچ راه اساسی برای اثبات اینکه کاربر کلمهی عبور صحیح را وارد کرده است، وجود ندارد.
که احتمالاً به کاربر اجازه میدهد تا حتی زمانی که تحت فشار است از دانه محافظت کند.
کیف پولهای Loose-Key:
کیف پول Loose-Key، که همچنین با نام ( Just Bunch Of Keys ( JOBK نیز شناخته میشود، یک شکل منسوخ از کیف پولی است که از یک کیف پول کلاینت بیتکوین کور سرچشمه گرفته بود.
کیف پول کلاینت بیت کوین کور از طریق یک مولد شمارهی شبه تصادفی (PRNG، ۱۰۰ ) جفت کلید عمومی/خصوصی برای استفادههای بعدی ایجاد میکند.
این کلیدهای خصوصی استفاده نشده در یک استخر کلید مجازی ذخیره میشوند، و هر وقت که کلیدهای قبلی استفاده شدند، کلیدهای جدید تولید میشوند.
به این ترتیب اطمینان حاصل میشود که همواره ۱۰۰ کلید استفاده نشده در استخر وجود دارد.
این باعث ایجاد مشکلات قابل توجهی در پشتیبانگیری کلیدهای یکی شد، چرا که پشتیبانگیری باید به صورت دستی اجرا شود تا کلیدهای خصوصی که جدیداً تولید شدهاند، ذخیره شوند.
اگر یک جفت کلید جدید تولید، استفاده و قبل از پشتیبانگیری از دست برود، ساتوشیهای ذخیرهشده احتمالاً به طور کامل از بین میروند.
بسیاری از کیف پولهای موبایل قدیمی از یک فرمت مشابه پیروی میکردند، اما تنها در صورت تقاضای کاربر یک کلید خصوصی جدید ایجاد میکردند.
این نوع کیف پول به دلیل زحمات پشتیبانگیری که دارد، به سرعت در حال منسوخ شدن است.
https://ircoolwallet.io/wp-content/uploads/2019/06/آشنایی-با-عرض-های-دیجیتال-قسمت-اول-آشنایی-با-کیف-پول-ارز-های-دیجیتال.jpg404647ehsanhttps://ircoolwallet.io/wp-content/uploads/2019/12/Miners.pngehsan2019-06-15 17:29:552019-06-15 17:30:36کیف پول های ارز دیجیتال قسمت سوم
فرمت ورود کیف پول(WIF):به منظور کپی کردن کلید خصوصی که کمتر مستعد خطاست ، ممکن است از فرمت ورود کیف پول (Wallet Import Format) استفاده شود.
WIF از رمزنگاری base58Check روی یک کلید خصوصی استفاده میکند و به طور قابل ملاحظهای احتمال خطای کپی را کاهش میدهد که بسیار مشابه آدرسهای بیت کوین استاندارد است.
مراحل زیر را به ترتیب انجام دهید:
یک کلید خصوصی بگیرید.
برای آدرسهای شبکهی اصلی 0x80 بایت و برای آدرسهای شبکه آزمایشی 0xef بایت در مقابل کلید خصوصی اضافه کنید.
در صورتی که این کلید خصوصی باید با یک کلید عمومی فشرده شده استفاده شود، یک 0x01 بایت به آخر آن اضافه کنید.
اگر این کلید با یک کلید عمومی فشرده نشده استفاده شود، هیچ چیز به آن اضافه نکنید.
یک هش SHA-256 روی کلید تعمیم یافته اعمال کنید.
روی نتیجهی هش SHA-256 قبلی یک هش SHA-256 دیگر اعمال کنید.
چهار بایت اول نتیجهی هش SHA-256 دوم را بردارید؛ این چکسام است.
چهار بایت چکسام را به انتهای کلید گسترش یافتهی مرحلهی دوم اضافه کنید.
با استفاده از رمزنگاری نتیجه را از یک رشتهی بایتی به یک رشتهی Base58 تبدیل کنید.
با استفاده از تابع رمزگشایی Base58 و حذف لایههای اضافه شده، این فرآیند به راحتی قابل بازگشت است.
فرمت کلیدهای خصوصی کوتاه:
فرمت کلیدهای خصوصی کوتاه یک روش برای رمزنگاری یک کلید خصوصی در کمتر از ۳۰ کاراکتر است، که کلیدها را قادر میسازد تا در یک فضای فیزیکی کوچک مانند توکنهای بیت کوین فیزیکی و کدهای کیو آر مقاومتر در برابر خطرات درج شوند.
اولین کاراکتر کلیدهای کوتاه S است.
برای تعیین اینکه آیا یک کلید خصوصی کوتاه خوب فرمت شده است یا خیر، یک علامت سوال به کلید خصوصی اضافه میشود.
هش SHA256 محاسبه میشود. اگر بایت اول ۰۰ باشد، این کلید به خوبی فرمت شده است.این محدودیت کلیدی به عنوان مکانیزم بررسی نوع عمل میکند. کاربر این فرآیند را با استفاده از اعداد تصادفی انجام میدهد تا زمانی که یک کلید خصوصی کوتاه به خوبی فرمت شده تولید شود.
به منظور به دست آوردن کلیدهای خصوصی کامل، کاربر به سادگی یک هش SHA256 از کلید خصوصی کوتاه اصلی میگیرد.
این فرآیند یکطرفه است. این امکان وجود ندارد که فرمت کلید خصوصی کوتاه را بتوان از کلید به دست آمده محاسبه کرد.
به دلیل شباهت بصری که عدد ۱ با حرف l دارد، بسیاری از پیادهسازیها اجازهی وجود این عدد را در کلیدهای خصوصی کوتاه نمیدهند.
فرمتهای کلیدهای عمومی:
کلیدهای عمومی ECDSA بیت کوین نمایندهی یک منحنی بیضوی (EC) خاص هستند که در secp256k1 تعریف شدهاند.
در شکل غیر فشردهی سنتی، کلیدهای عمومی شامل یک بایت شناسایی، یک مختصات ۳۲ بیتی برای X و یک مختصات ۳۲ بیتی برای Y بودند.
تصویر بسیار ساده شدهی زیر چنین نقطهای را روی منحنی بیضوی با معادلهی y2 = x3 + 7 که توسط بیت کوین استفاده شده، نشان میدهد.
با حذف مختصات Y میتوان بدون تغییر هیچ یک از اصول پایه ، اندازهی کلید عمومی را تقریباً ۵۰ درصد کاهش داد.
این کار امکانپذیر است، زیرا تنها دو نقطه در منحنی X مختصات یکسان دارند، بنابراین مختصات Y ۳۲ بیتی میتواند تنها با یک بیت جایگزین شود که نشان میدهد نقطهی مورد نظر در بالا یا پایین منحنی است.
با ایجاد این کلیدهای عمومی فشرده هیچ دادهای از دست نمیرود، تنها مقدار کمی از CPU برای بازسازی مختصات Y و دسترسی به کلید عمومی فشرده نشده لازم است.
کلیدهای عمومی فشرده و غیر فشرده در مستندات رسمی secp256k1 توصیف شدهاند و به صورت پیشفرض در کتابخانهی پر استفادهی OpenSSL پشتیبانی میشوند.
کلیدهای عمومی فشرده:
این کلیدها به دلیل قابلیت استفادهی آسان و صرفهجویی تقریباً ۵۰ درصدی از فضای بلاکچین مورد استفاده برای هر خروجی صرف شده، به طور پیشفرض در بیت کوین کور استفاده و برای تمام نرمافزارهای بیت کوین توصیه میشوند.
با این حال، بیت کوین کورهای منتشر شده قبل از نسخهی ۰.۶ از کلیدهای غیر فشرده استفاده میکردند.
این مسأله باعث بروز چند پیچیدگی میشود، چرا که شکل هش یک کلید فشرده نشده با شکل هش کلیدی فشرده متفاوت است.
بنابراین دو کلید یکسان با دو آدرس P2PKH متفاوت کار میکنند. یعنی کلید باید در فرمت صحیح در اسکریپت امضا ثبت شود تا با هش اسکریپت کلید عمومی خروجی قبلی تطابق داشته باشد.
به همین دلیل، بیت کوین کور از چند بایت شناسایی متفاوت استفاده میکند تا به برنامهها کمک کند که تشخیص دهند از کدام کلیدها باید استفاده کنند.
کلیدهای خصوصی که قصد دارند با کلیدهای عمومی فشرده کار کنند، قبل از رمزنگاری Base-58 یک 0x01 به آنها اضافه میشوند.
کلیدهای عمومی غیرفشرده با 0x04 آغاز میشوند؛ کلیدهای عمومی فشرده بسته به اینکه بزرگتر یا کوچکتر از نقطهی میانی منحنی هستند با 0x03 یا 0x02 آغاز میشوند.
تمام بایتهای پیشوند در مستندات رسمی secp256k1 استفاده میشوند.
ایجاد کلیدهای قطعی سلسله مراتبی:
ایجاد کلید قطعی سلسله مراتبی پروتکل انتقال (پروتکل HD )به طور قابل توجهی پشتیبانگیری از کیف پول را ساده میکند و نیاز برای ارتباطات تکراری میان برنامههای متعددی که از یک کیف پول استفاده میکنند را از بین می برد.
ایجاد حسابهای کاربری فرزند را مجاز میکند که بتوانند به صورت مستقل عمل کنند .
همچنین به هر حساب والد این توانایی را میدهد که روی فرزندان خود نظارت و کنترل داشته باشند، حتی اگر حساب فرزند در معرض خطر قرار گرفته باشد.
هر حساب کاربری را به قسمتهای دسترسی کامل و دسترسی محدود تقسیم میکند.
بنابراین کاربران یا برنامههای غیر قابل اعتماد میتوانند پرداختها را دریافت کرده و یا روی آنها نظارت داشته باشند، بدون اینکه بتوانند وجهی را به حساب دیگر ارسال کنند.
تابع point() :
پروتکل HD از تابع ایجاد کلیدهای عمومی ECDSA یعنی point() استفاده میکند که یک عدد صحیح بزرگ (کلیدهای خصوصی) را دریافت میکند و آن را به یک نقطهی گراف (کلیدهای عمومی) تبدیل میکند:
point(private_key) == public_key
به دلیل نحوهی کار تابع point()، این امکان وجود دارد که با ترکیب یک کلید عمومی (والد) موجود با کلیدهای عمومی دیگر با هر مقدار عدد صحیح (i) بتوان یک کلید عمومی فرزند ایجاد کرد.
این کلید عمومی فرزند، همان کلید عمومی است که اگر شما مقدار i را به کلید خصوصی (والد) اصلی اضافه میکردید، توسط تابع point() ایجاد میشد و سپس باقیماندهی این جمع تقسیم بر یک ثابت جهانی میشود که توسط تمام نرمافزار بیتکوین استفاده میشود:
این بدان معنی است که دو یا چند برنامهی مستقل که روی یک دنباله از اعداد صحیح توافق دارند، میتوانند بدون هیچگونه ارتباط اضافی، مجموعهای از جفت کلیدهای فرزند را از جفت کلیدهای والد ایجاد کنند.
علاوه بر این، برنامهای که کلیدهای عمومی جدید را برای دریافت پرداختها توزیع میکند میتواند این کار را بدون هیچ دسترسی به کلیدهای خصوصی انجام دهد، و به برنامهی توزیع کلیدهای عمومی اجازه میدهد تا روی یک پلتفرم احتمالاً ناامن مانند یک وب سرور عمومی اجرا شود.
کلیدهای عمومی فرزند همچنین میتوانند با تکرار عملیات استنتاج کلید فرزند، کلیدهای عمومی فرزند خود را ایجاد کنند.
ایجاد کلیدهای های عمومی فرزند با تکرار عملیات استنتاج:
در مورد ایجاد کلیدهای عمومی فرزند یا کلیدهای عمومی سطح پایینتر باید به این نکته توجه کرد که یک دنبالهی قابل پیشبینی از مقادیر اعداد صحیح بهتر از استفاده از یک کلید عمومی یکسان نخواهد بود، چرا که هر کسی با دانستن یک کلید عمومی فرزند میتواند تمام کلیدهای عمومی فرزند دیگر ایجاد شده از یک کلید خصوصی والد را پیدا کند.
در عوض، یک دانهی تصادفی میتواند برای تولید قطعی دنبالهای از مقادیر صحیح مورد استفاده قرار گیرد.
بنابراین بدون داشتن آن دانه، ارتباط میان کلیدهای عمومی فرزند برای هر کسی غیر قابل مشاهده است.
پروتکل HD از یک دانهی ریشه واحد برای ایجاد سلسله مراتبی از فرزند، نوه، و سایر کلیدهای سطح پایینتر با مقادیر اعداد صحیح به صورت قطعی استفاده میکند.
هر کلید فرزند همچنین یک دانهی به صورت قطعی تولید شده به نام کد زنجیره را از والد خود میگیرد.
بنابراین در معرض خطر قرار گرفتن یک کد زنجیره لزوماً دنبالهی اعداد صحیح کل سلسله مراتب را در معرض خطر قرار نمیدهد، و به کد زنجیرهی اصلی اجازه میدهد تا حتی اگر به عنوان مثال یک برنامهی توزیع کلیدهای عمومی مبتنی بر وب هک شد، قابل استفاده باقی بماند.
استنتاج کلیدهای قطعی سلسله مراتبی نرمال
همانطور که در بالا نشان داده شده است، استنتاج کلیدهای HD چهار ورودی میگیرد:
کلیدهای خصوصی و عمومی والد، کلیدهای ECDSA۲۵۶ بیتی غیر فشرده هستند.
کد زنجیرهی والد ۲۵۶ بیت از دادهی به ظاهر تصادفی است.
عدد شاخص یک عدد صحیح ۳۲ بیتی است که توسط برنامه تعیین شده است.
در شکل نرمال که در تصویر بالا نشان داده شده است، کد زنجیرهی والد، کلید عمومی والد، و شمارهی شاخص به عنوان ورودی به یک هش رمزنگاری یک طرفه (HMAC-SHA512) داده میشوند تا ۵۱۲ بیت داده که ظاهراً تصادفی اما کاملاً دقیق است، تولید شود.
۲۵۶ بیت دادهی به ظاهر تصادفی در سمت راست خروجی هش به عنوان یک کد زنجیرهی فرزند جدید استفاده میشود.
۲۵۶ بیت دادهی به ظاهر تصادفی سمت چپ خروجی هش به عنوان مقدار عدد صحیح استفاده میشود تا با کلیدهای خصوصی والد یا کلیدهای عمومی والد ترکیب شود، تا یک کلید خصوصی فرزند یا کلید عمومی فرزند ایجاد کند.
ایجاد کلیدهای خصوصی فرزند یا کلیدهای عمومی فرزند:
child_private_key == (parent_private_key + lefthand_hash_output) % G
child_public_key == point( (parent_private_key + lefthand_hash_output) % G )
تعیین اعداد شاخص مختلف، کلیدهای فرزند غیر قابل جدا شدن متفاوتی را از کلیدهای والد یکسان ایجاد خواهد کرد.
تکرار این رویه برای کلیدهای فرزند با استفاده از کد زنجیرهی فرزند، کلیدهای نوهی غیر قابل جدا شدن را ایجاد خواهد کرد.
از آنجایی که ایجاد کلیدهای فرزند نیاز به یک کلید و یک کد زنجیره دارد، هم کلید و هم کد زنجیره با هم کلیدهای تعمیمیافته نامیده میشوند.
یک کلید خصوصی تعمیمیافته و کلید عمومی تعمیمیافتهی متناظر آن، کد زنجیرهی یکسانی دارند.
کلیدهای خصوصی اصلی (والد سطح بالا) و کد زنجیرهی اصلی از دادههای تصادفی استنتاج میشوند.
ایجاد کلیدهای اصلی
یک دانهی ریشه از ۱۲۸، ۲۵۶، یا ۵۱۲ بیت از دادههای تصادفی ایجاد میشود.
دانهی ریشهی ۱۲۸ بیتی تمام دادهای است که یک کاربر نیاز دارد نگه دارد تا بتواند هر کلید ایجاد شده با یک برنامهی کیف پول خاص با تنظیمات خاص را به دست آورد.
هشدار:
در زمان نگارش این مطلب، انتظار نمیرود که برنامههای کیف پول HD کاملاً سازگار باشند.
بنابراین کاربران باید از برنامهی کیف پول HD یکسان با تنظیمات مرتبط با HD یکسان برای یک دانهی ریشهی خاص استفاده کنند.
دانهی ریشه هش میشود تا دادهی ۵۱۲ بیتی به ظاهر تصادفی ایجاد کند که از آن نیز کلید خصوصی اصلی و کد زنجیرهی اصلی به دست میآید.
کلیدهای عمومی اصلی با استفاده از تابع point() از کلیدهای خصوصی اصلی استنتاج میشود، که همراه با کد زنجیرهی اصلی، کلیدهای عمومی تعمیم یافتهی اصلی است.
کلیدهای تعمیم یافتهی اصلی عملاً معادل سایر کلیدهای تعمیم یافته هستند؛ تنها موقعیت آنها در بالای سلسله مراتب است که آنها را ویژه میکند.
https://ircoolwallet.io/wp-content/uploads/2019/06/btc-wallets-390x220.jpg220390ehsanhttps://ircoolwallet.io/wp-content/uploads/2019/12/Miners.pngehsan2019-06-14 16:18:052019-06-14 18:42:12کیف پول های ارز دیجیتال قسمت دوم
برنامههای کیف پول ارزدیجیتال برای دریافت ساتوشی کلیدهای عمومی ایجاد می کنند و از کلیدهای خصوصی متناظر برای ارسال استفاده میکنند.
فایلهای کلیدهای خصوصی کیف پول ارزدیجیتال ، به صورت اختیاری سایر اطلاعات مرتبط با تراکنشها برای برنامهی کیف پول را ذخیره میکنند.
برنامههای کیف پول ارزدیجیتال و فایلهای آن در زیربخشهای جداگانهای در زیر ذکر شدهاند.
برنامههای کیف پول ارزدیجیتال
صدور مجوز دریافت و ارسال ساتوشیها جز ویژگی نرمافزاری کیف پول ارزدیجیتال است، اما لازم نیست که این کارها را برنامهی آن انجام دهد.
دو برنامهی کیف پول میتوانند با هم کار کنند
یک برنامه کلیدهای عمومی را به منظور دریافت ساتوشی توزیع میکند
برنامهی دیگر تراکنشهایی که این ساتوشیها را ارسال میکنند را امضاء میکند.
برنامههای کیف پول ارزدیجیتال همچنین نیاز دارند با شبکهی همتا به همتا تعامل داشته باشند تا اطلاعات لازم را بلاکچین دریافت و تراکنشهای جدید را منتشر کنند.
با این حال، برنامههای توزیعکنندهی کلیدهای خصوصی یا امضاء کنندهی تراکنشها نیازی ندارند که خودشان با شبکهی همتا به همتا تعامل داشته باشند.
این مسأله باعث میشود که ما سه بخش ضروری اما جداگانه در یک سیستم کیف پول داشته باشیم.
بخش های کیف پول ارزدیجیتال
یک برنامه برای توزیع کلید عمومی
یک برنامه برای امضاء
یک برنامه برای تعامل با شبکه
در ادامه ، ما ترکیبهای متداول این بخشها را توصیف میکنیم.
توجه: ما به طور کلی در مورد توزیع کلید عمومی صحبت میکنیم.
در بسیاری از موارد، به جای کلیدهای عمومی، هشهای P2PKH یا P2SH توزیع میشوند، و کلیدهای عمومی واقعی تنها زمانی توزیع میشوند که خروجیهای تحت کنترل آنها خرج شوند.
کیف پول ارزدیجیتال تمام سرویس
سادهترین آن برنامهای است که هر سه عمل را انجام میدهد:
این برنامه کلیدهای خصوصی تولید میکند، کلیدهای عمومی متناظر را استنتاج میکند، در صورت نیاز به توزیع کلیدهای عمومی کمک میکند، تراکنشهایی که این خروجی ها را صرف میکنند را ایجاد و امضاء میکند، و تراکنشهای امضاء شده را منتشر میکند.
کیف پول ارزدیجیتال تمام سرویس:
تقریباً تمام کیف پولهای محبوب میتوانند به عنوان کیف های تمام سرویس استفاده شوند.
مزیت اصلی کیف پولهای تمام سرویس این است که استفاده از آنها آسان است. یک برنامهی واحد تمام چیزی که یک کاربر برای دریافت و ارسال ساتوشی نیاز دارد را انجام میدهد.
نقطه ضعف اصلی کیف پول های ارزدیجیتال تمام سرویس این است که آن ها کلیدهای خصوصی را روی یک دستگاه متصل به اینترنت نگه میدارند.
به خطر افتادن این دستگاهها یک پدیدهی رایج است، و اتصال به اینترنت انتقال کلیدهای خصوصی از یک دستگاه به خطر افتاده به یک مهاجم را آسان میکند.
برای کمک به محافظت در برابر سرقت، بسیاری از برنامههای کیف پول ارزدیجیتال گزینهی رمزنگاری فایلهای آن را که شامل کلیدهای خصوصی است، در اختیار کاربران قرار میدهند.
این کار از کلیدهای خصوصی، زمانی که از آنها استفادهای نمیشود محافظت میکند، اما نمیتواند در برابر حملاتی که برای جمعآوری کلید رمزنگاری یا خواندن کلیدهای رمزگشاییشده از حافظه طراحی شدهاند، از دادهها محافظت کند.
کیف پولهای Signing Only
برای افزایش امنیت، کلیدهای خصوصی را میتوان به وسیلهی برنامهی کیف پول ارزدیجیتال جداگانه که در یک محیط امنتر کار میکنند، تولید و ذخیره کرد.
کیف پولهای signing-only با نمونه هایی که به صورت همتا به همتا با شبکه تعامل دارند، همکاری میکنند.
برنامههای کیف پول Signing only معمولاً برای ایجاد کلیدهای خصوصی و عمومی والد که میتوانند برای ایجاد کلیدهای عمومی و خصوصی فرزند استفاده شوند، از راههای ایجاد کلید قطعی استفاده میکنند.
کیف پولهای Signing Only
کیف پول signing-only هنگامی که برای اولین بار اجرا میشوند، یک کلید خصوصی والد ایجاد میکنند و کلید عمومی متناظر آن را به کیف پول شبکهشده منتقل میکند.
کیف پول ارزدیجیتال شبکهشده از کلید عمومی والد استفاده میکند تا:
کلیدهای عمومی فرزند را استنتاج کند
به صورت اختیاری به توزیع آنها کمک میکند
روی خروجیهایی که با این کلیدهای عمومی خرج میشوند
نظارت میکند
تراکنشهای امضاء نشدهای که این خروجیها را خرج میکنند را ایجاد میکند
و این تراکنشهای امضاء نشده را به کیف signing only منتقل میکند.
اغلب به کاربران این امکان داده میشود که جزئیات تراکنشهای امضاء نشده را با استفاده از کیف signing only بررسی کنند.
پس از گام بررسی اختیاری، کیف signing only از کلید خصوصی والد برای استنتاج کلیدهای خصوصی فرزند مناسب استفاده میکند و تراکنشها را امضاء میکند و این تراکنشهای امضاء شده را به کیف پولهای شبکهشده باز میگرداند.کیف پول شبکهشده سپس تراکنشهای امضاء شده در شبکهی همتا به همتا منتشر میکند.
انواع کیف پول های signing only
کیف پولهای آفلاین
کیف پولهای سختافزاری
کیف پول ارزدیجیتال آفلاین
چند برنامه کیف پول ارزدیجیتال تمام سرویس نیز به عنوان دو کیف جداگانه عمل میکنند:
یک نمونه برنامه که به عنوان کیف پول signing only (که اغلب «کیف پول آفلاین» نامیده میشوند) عمل میکند .
نمونه برنامهی دیگر که «کیف پول آنلاین» یا «watching only» نامیده میشود به عنوان کیف پول شبکهشده عمل میکند.
دلیل نامگذاری کیف پول آفلاین به این نام این است که روی دستگاهی اجرا شوند که به هیچ شبکهای متصل نباشد، اجرا میشود و به این ترتیب تعداد بردارهای حمله را به طور قابل توجهی کاهش میدهند.
هنگام استفاده از این کیف پولهای ارزدیجیتال، کاربر میتواند تمام انتقال داده را از طریق یک رسانهی قابل حمل مانند درایوهای USB کنترل کند.
۱ (آفلاین) تمام اتصالات شبکه روی یک دستگاه را غیرفعال کنید و نرمافزار کیف پول را نصب کنید.
برای ایجاد کلیدهای خصوصی و عمومی والد، نرمافزار کیف پول را در حالت آفلاین اجرا کنید.
کلید عمومی والد را در رسانهی قابل جابهجایی کپی کنید.
۲ (آنلاین) نرمافزار کیف پول را در دستگاه دیگری که به اینترنت متصل است، نصب کنید.
کلید عمومی والد را از رسانهی قابل جابهجایی را وارد کنید.
مانند زمانی که با یک کیف پول تمام سرویس کار میکنید، کلید عمومی را توزیع کنید تا وجه دریافت کنید.
هنگامی که قصد خرج کردن ساتوشی داشتید، جزئیات خروجی را پر کنید و تراکنش امضاء نشدهی تولید شده توسط کیف پول را در رسانهی قابل جابهجایی ذخیره کنید.
۳ (آفلاین) تراکنش امضاء نشده به صورت آفلاین باز کنید، جزئیات خروجی را بررسی کنید تا اطمینان حاصل کنید مقدار درست به آدرس درست ارسال میشود.
با این کار از بدافزار کیف پول آنلاین که سعی میکند کاربر را فریب دهد که برای ارسال وجه به مهاجم یک تراکنش را امضاء کند، جلوگیری میشود.
پس از بررسی، تراکنش را امضاء و آن را در یک رسانهی قابل جابهجایی ذخیره کنید.
۴ (آنلاین) تراکنش امضاء شده را در نمونهی آنلاین باز کنید تا بتوانید آن را در شبکهی همتا به همتا منتشر کنید.
مزیت اصلی کیف پولهای آفلاین این است که این امکان را میدهند که امنیت کیف پولهای تمام سرویس تا حد زیادی بهبود پیدا کند.
تا زمانی که کیف پول سختافزاری در معرض خطر قرار نگیرد و کاربر تمام تراکنشها را قبل از امضاء بررسی کند، حتی اگر کیف پول آنلاین در معرض خطر قرار بگیرد، ساتوشیهای کاربر ایمن باقی میمانند.
نقطه ضعف اصلی کیف پولهای آفلاین:
نقطه ضعف اصلی کیف پولهای آفلاین زحمت استفاده از آنها است. برای حداکثر امنیت، آنها از کاربر میخواهند تا یک دستگاه تنها برای کارهای آفلاین اختصاص دهند.
هر زمان که وجوه خرج شدند، این دستگاه آفلاین باید بوت شود، و کاربر باید دادهها را از دستگاه آنلاین به صورت فیزیکی روی دستگاه آفلاین کپی کند.
کیف پولهای سختافزاری :
کیف پولهای ارزدیجیتال سختافزاری دستگاههایی هستند که برای اجرای کیف پولهای signing-only اختصاص داده شدهاند.
این تخصیص به آنها اجازه میدهد تا بسیاری از آسیبپذیریهایی را که در سیستم عاملهای طراحیشده برای استفادهی عمومی حضور دارند، حذف کنند و به آنها اجازه میدهد به طور مستقیم با سایر دستگاهها ارتباط برقرار کنند.
بنابراین لازم نیست که کاربران به صورت دستی دادهها منتقل کنند.
جریان کاری کاربر چیزی نزدیک به موارد مطرح شده در زیر است:
۱ (سختافزار) کلیدهای خصوصی و عمومی والد را ایجاد میکند. کیف پول سختافزاری را به یک دستگاه شبکهشده متصل میکند تا بتواند کلید عمومی والد را دریافت کند.
۲ (شبکهشده) مانند زمانی که با یک کیف پول تمام سرویس کار میکنید، کلیدهای عمومی را برای دریافت وجه توزیع کنید.
هنگامی که آمادهی ارسال ساتوشی بودید، جزئیات تراکنش را پر کنید، به کیف پول سختافزاری متصل شوید، و روی گزینهی Spend کلیک کنید.
کیف پول شبکهشده به صورت اتوماتیک جزئیات تراکنش را به کیف سختافزار ارسال میکند.
۳ (سختافزار) جزئیات تراکنش موجود در صفحهی کیف پول سختافزاری بررسی کنید. برخی از کیف پولهای سختافزاری ممکن است کلمهی عبور یا شمارهی پین درخواست کنند.
کیف پول سخت افزاری تراکنش را امضاء میکند و آن را در کیف پول شبکهشده بارگذاری میکند.
۴ (شبکهشده) کف پول شبکهشده تراکنش امضاء شده را از سوی کیف پول سختافزاری دریافت میکند و آن را در شبکه منتشر میکند.
۵ مزیت کیف پولهای سختافزاری این است که با زحمت کمتری نسبت به آفلاین، امنیت کیف تمام سرویس را بهبود میبخشند.
عیب اصلی کیف پولهای ارزدیجیتال سختافزاری:
عیب اصلی کیف پولهای سختافزاری پر زحمت بودن آنها است.
اگرچه زحمت آن کمتر از کیف پولهای آفلاین است، کاربر هنوز هم باید یک کیف پول سختافزاری خریداری کند و هر زمان که بخواهد تراکنشی را با استفاده ازکیف پول signing-only انجام دهد، باید کیف پول سختافزاری را همراه داشته باشد.
عیب دیگر این کیف پولها که امید رفع آن هست، این است که برنامههای کیف پول محبوب بسیار کمی وجود دارند از کیف پولهای سختافزاری پشتیبانی میکنند.
اگرچه تقریباً تمام برنامههای کیف پول محبوب قصد خود را برای پشتیبانی از حداقل یک مدل کیف پول سختافزاری اعلام کردهاند.
کیف پولهای مخصوص توزیع :
برنامههای کیف پول ارزدیجیتال که در محیطهای نسبتاً امن مانند وب سرورها اجرا میشوند، میتوانند طوری طراحی شوند که فقط برای توزیع کلیدهای عمومی (از جمله آدرسهای P2PKH یا P2SH) استفاده شوند.
کیف پول مخصوص توزیع
دو راه متداول برای طراحی این کیف پولهای مینیمالیست وجود دارد:
• یک پایگاه داده را با تعدادی کلید عمومی یا آدرس پر کنید و سپس بر اساس درخواست یک اسکریپت کلید عمومی یا آدرس با استفاده از یکی از ورودیهای پایگاه داده توزیع کنید.
برای جلوگیری از استفادهی مجدد از کلیدها، وب سرورها باید کلیدهای استفاده شده را در لیستی ذخیره کنند.
این کار میتواند با استفاده از کلیدهای عمومی والد ، آسانتر انجام شود.
• برای ایجاد کلیدهای عمومی از یک کلید عمومی والد استفاده کنید.
برای جلوگیری از استفادهی مجدد از کلید، روشی باید استفاده شود تا اطمینان حاصل شود که کلید عمومی یکسانی دو بار توزیع نمیشود.
این کار میتواند با وارد کردن کلیدهای توزیع شده در یک پایگاه داده و یا با استفاده از یک اشارهگر افزایشی به عدد شاخص کلید انجام شود.
هیچ یک از روشهای بالایی سربار قابل توجهی به سیستم اضافه نمیکنند، به خصوص اگر برای ردیابی پرداخت یک پایگاه داده استفاده شود تا هر پرداخت ورودی را به یک کلید عمومی جداگانه مربوط کند.
فایلهای کیف پول ارزدیجیتال :
کیف پولهای بیت کوین در هستهی خود مجموعهای از کلیدهای خصوصی هستند.
آنها به صورت دیجیتالی در یک فایل ذخیره میشوند و میتوانند به صورت فیزیکی روی یک تکه کاغذ ذخیره شوند.
فرمتهای کلید خصوصی :
کلیدهای خصوصی برای رمزگشایی ساتوشیهای یک آدرس خاص استفاده میشوند.
در بیت کوین، یک کلید خصوصی در فرمت استاندارد یک عدد ۲۵۶ بیتی است که بین مقادیر زیر قرار دارد،که تقریباً محدودهی ۱ تا ۲^۲۵۶ را شامل میشود.
https://ircoolwallet.io/wp-content/uploads/2019/06/wallet.jpg600800ehsanhttps://ircoolwallet.io/wp-content/uploads/2019/12/Miners.pngehsan2019-06-13 19:01:292019-06-13 19:25:19کیف پول ارزدیجیتال قسمت اول