دانش رمز نگاری (Cryptography)
برای درک بهتر چگونگی استفاده رمزارز بیت کوین باید با موارد زیر آشنا باشید.
- حفظ محرمانگی اطلاعات (Confidentiality)
- اطمینان از ارسال پیام توسط فرستنده پیام (Authentication)
- اطمینان از عدم تغییر پیام در مسیر دریافت (Integrity)
- اثبات ارسال پیام توسط فرستنده (Non-repudiation)
ممکن است موارد فوق در نگاه اول پیچیده به نظر آیند، به همین منظور هر بخش را با مثالی توضیح خواهیم داد.
- حفظ محرمانگی اطلاعات (Confidentiality)
فرض کنید که Alice می خواهد پیامی را به Bob ارسال کند، اما Alice دوست ندارد که دیگران در صورت مشاهده پیام او از محتویات پیام مطلع شوند؛ بنابراین هر دو بر سر یک پروتکل رمزنگاری با هم توافق می کنند و به این ترتیب Alice پیام های خود را با یک کلید، رمزنگاری کرده و Bob با همان کلید و یا کلید دیگر (بستگی به پروتکل توافقی دارد) پیام را رمزگشایی می کند. در این مثال Alice و Bob در اصل محرمانگی اطلاعات را حفظ نموده اند و اشخاص غیر مجاز نمی توانند پیام را مشاهده کنند.
- اطمینان از ارسال پیام توسط فرستنده پیام (Authentication)
حال فرض کنید که Bob پیامی را از شخصی که خودش را Alice معرفی نموده، گرفته است. برای این که Bob مطمئن شود که فرد فرستنده پیام واقعا Alice است می تواند از الگوریتم ها و توابع دانش رمزنگاری استفاده کند و پیامی که Alice ارسال کرده است را بررسی نماید (Alice موظف است مقادیری را ایجاد نماید و به همراه پیام برای Bob بفرستد که امکان ایجاد این مقادیر فقط و فقط توسط Alice وجود دارد).
- اطمینان از عدم تغییر پیام در مسیر دریافت (Data Integrity)
فرض کنید که Alice می خواهد در پیامی حساب بانکی خود را برای Bob بفرستد؛ در این میان فردی پیام Alice را تغییر داده و شماره حساب خود را برای Bob ارسال می کند. در دانش رمزنگاری روشی برای کنترل صحت داده (Data Integrity) نیز وجود دارد.
- اثبات ارسال پیام توسط فرستنده (Non-repudiation)
اگر Alice از Bob درخواستی کند و فردای آن روز منکر درخواست خود شود چه می شود؟ قابلیت Non-repudiation این امکان را از Alice گرفته، و در صورت ارسال پیامی توسط Alice به Bob، او دیگر نمی تواند منکر ارسال پیام شود و Bob به راحتی می تواند این امر را ثابت نماید.
فهرست مقاله
Toggleانواع الگوریتمهای رمزنگاری
به طور کلی الگوریتم های رمزنگاری به دو دسته تقسیم میگردند:
- متقارن (Symmetric)
- نا متقارن (Asymmetric)
الگوریتمهای رمزنگاری متقارن (Symmetric)
در این نوع الگوریتم ها هر دو طرف (Alice و Bob) از یک کلید مشترک استفاده می کنند. به روشی Alice و Bob بر سر یک مقدار به عنوان کلید توافق نموده و تمامی پیام های خود را بر پایه این کلید، رمزنگاری نموده و یا موارد امنیتی دیگر از قبیل data Integrity را با این کلید انجام خواهند داد. نکته اینجاست که این کلید می بایست به صورت مخفیانه نگهداری شود، و در صورت دسترسی افراد غیر مجاز به این کلید، عملا امنیت این الگوریتم از بین خواهد رفت. از الگوریتم های متقارن می توان به ۳DES و Salsa20 اشاره نمود.
الگوریتم های رمزنگاری نامتقارن (Asymmetric)
در الگوریتم های غیر متقارن، یک جفت کلید تولید خواهد شد که یکی عمومی است و در دسترس همگان قرار خواهد گرفت، و دیگری خصوصی است که تنها توسط شخص تولید کننده ی کلید ها و به صورت امن نگهداری میگردد.
کلید عمومی امکان رمزنگاری (Encryption) و اعتبار سنجی (Verification) را ایجاد می نماید، در حالی که کلید خصوصی امکان رمزگشایی (Decryption) و امضاء (Signing) را فراهم میکند. با رمزنگاری و رمزگشایی قبل تر آشنا شدیم؛ به زبان ساده می توان گفت که دارندگان کلید عمومی می توانند یک پیام را رمزنگاری کنند، اما فقط و فقط دارنده کلید خصوصی می تواند یک پیام را رمزگشایی کند.
نکته ای که بسیار اهمیت دارد این است که در تکنولوژی زنجیره بلاک های بیت کوین و بسیاری از کوین های دیگر اصلا از عملیات رمزنگاری و رمزگشایی استفاده نمی گردد و تمامی داده ها به صورت رمزنگاری نشده (Plain) در تراکنش ها و دفتر کل وجود دارند، و در اصل از دو تابع Signing (امضاء دیجیتال) و Verifying در این شبکه ها استفاده می گردد.
امضای دیجیتال و اعتبار سنجی آن
در هنگام امضای یک پیام و یا یک سند چند هدف دنبال می شود:
- اطمینان از ارسال پیام توسط ارسال کننده واقعی
- عدم ایجاد تغییر در پیام
- توانایی اثبات ارسال پیام توسط شخص ارسال کننده پیام (به این معنی که امضاء کننده بعدا منکر امضای خود نشود)
همان طور که قبلا اشاره شد تنها کسی توانایی امضاء یک سند را دارد که کلید خصوصی را در اختیار داشته باشد، و کسانی که کلید عمومی را در اختیار دارند می توانند اعتبار امضاء دیجیتال را بررسی نمایند. برای درک بهتر موضوع به مثال زیر توجه کنید:
Alice می خواهد پیامی را به Bob ارسال کند؛ در این سناریو برای Alice این موضوع که دیگران از محتوای پیام مطلع شوند اهمیت ندارد، بلکه اطمینان از رسیدن بدون تغییر پیام به Bob برای او حائز اهمیت است. از طرفی Bob نیاز دارد که مطمئن باشد این پیام از طرف Alice ارسال شده است و همچنین Alice در آینده نتواند منکر پیام ارسالی از سوی خود باشد. به همین منظور Alice یک جفت کلید با نام های کلید خصوصی (Private Key) و کلید عمومی (Public Key که برگرفته شده از کلید خصوصی است) تولید می کند.
Alice کلید عمومی را به Bob می دهد و کلید خصوصی را در نزد خود و به صورت امن نگهداری می کند. حال هر باری که Alice پیامی را بخواهد برای Bob ارسال کند، علاوه بر پیام، امضای دیجیتال آن پیام را نیز برای Bob ارسال می کند.
در سمت دیگر Bob به وسیله ی کلید عمومی، پیام و امضای دیجیتال را با هم اعتبار سنجی میکند (که خروجی این اعتبار سنجی به صورت ۰ و ۱ و یا همان True & False است، به این معنی که در صورت True بودن خروجی، مشخص می شود که پیام را Alice فرستاده و همچنین این پیام تغییری نداشته است، و در صورت False بودن، مشخص می گردد که این پیام از سمت Alice نیست و یا تغییراتی در متن آن توسط افراد غیر مجاز صورت پذیرفته است)، و از آنجایی که تنها شخصِ قادر به ساختن امضای دیجیتال، دارنده کلید خصوصی(Alice) است، در صورت True بودن خروجی امضای دیجیتال، Alice نمی تواند در آینده منکر پیام ارسالی خود شده و از آن سر باز زند.
از الگوریتم های غیر متقارن می توان به RSA و Elliptic Curve اشاره کرد که در رمزارز بیت کوین از Elliptic Curve استفاده می گردد. در ادامه در مورد این الگوریتم و چگونگی ایجاد آدرس بیت کوین توضیح خواهیم داد.
Elliptic Curve Digital Signature Algorithm (ECDSA)
تفاوت عمده الگوریتم Elliptic Curve Digital Signature Algorithm (ECDSA) با RSA (Rivest–Shamir–Adleman) به خاطر طول کلید است که در ECDSA شما می توانید با طول کلید بسیار کوتاه تر به همان درجه امنیت برسید (صرف نظر از الگوریتم، طول کلید در دانش رمزنگاری ارتباط مستقیمی با امنیت الگوریتم دارد، و همچنین هرچه طول کلید بیشتر باشد به همان نسبت سرعت الگوریتم پایین تر خواهد بود).
کلید خصوصی در ECDSA
کلید خصوصی در اصل به شما این امکان را می دهد که بتوانید دارایی رمزارز خود در یک آدرس را خرج نمایید؛ به طور مثال Alice در یک تراکنش اعلام می کند که چه مقدار بیت کوین و به چه آدرسی می خواهد ارسال کند و امضای آن درخواست را به همراه خود درخواست و همچنین کلید عمومی به شبکه بیت کوین ارسال می کند. ماینر ها با بررسی صحت امضای Alice به وسیله کلید او، تراکنش Alice را معتبر شناخته و دفتر کل (Public Ledger) را به گونه ای به روز رسانی می کنند که از این به بعد مقدار بیت کوین مربوطه در آدرس Bob مشاهده شود.
کلید خصوصی ۳۲ بایت (۲۵۶ بیت) می باشد که در حالت WIF (Wallet Import Format) و کد شده بر پایه ۵۸ (Base58 encode) تعداد کاراکتر های آن ۵۱ می باشد و با عدد ۵ شروع می شود. اگر کلید خصوصی با حروف K و یا L شروع شده باشد، به این معنی است که این کلید در حالت WIF Compressed است و ۵۲ کاراکتر (کد شده بر پایه ۵۸( خواهد بود .
کلید عمومی در ECDSA
کلید عمومی در اصل مقداری است که از کلید خصوصی گرفته شده و نیازی به نگهداری آن به صورت امن نمی باشد. کلید عمومی در دو حالت Compressed و Uncompressed وجود دارد که در نوع اول ۳۳ بایت (شروع با ۰x02 و یا ۰x03) و در نوع دوم ۶۵ بایت (شروع با ۰x04) است. همان طور که گفته شد کلید عمومی برای اعتبار سنجی تراکنش ارسالی از سمت صاحب آدرس مبدا مورد استفاده قرار می گیرد.
آدرس رمزارز بیت کوین
آدرس بیت کوین طی پروسه خاصی از کلید عمومی استخراج می گردد که این پروسه را با جزئیات و ذکر یک مثال برای شما نشان خواهیم داد:
-
تولید یک کلید خصوصی
Private Key:
۹cebf8a078dc4e7dc654ea2eac28a70783a1a3e1e39ef68d7832a98e79d883c2
-
.تولید کلید عمومی مربوطه
Public Key:
۰۴۴۰edfb2e05f0f335ab039f9f0223612a577ab223a7095e50c22109495147a2b1437f6f606de0d81188a772fa5b9fb7899a8a93437a432e8006b8de3df91fc9dd
- دریافت خروجی SHA-256 کلید عمومی (می توان از سایت کمک گرفت)
SHA-256 Hash of the Public Key:
۷c8d99c51cbc089ec97cabbcabf9f3e5ebe4a42f554b4a16e241e1c8c2a365f7
- دریافت خروجی RIPMED-160 از SHA-256 (می توان از سایت کمک گرفت)
RIPMED-160 HASH of SHA-256
d0e252944b2031b66f9a60705ae794b02dee459b
- اضافه نمودن ورژن شبکه اصلی (۰x00 ) به خروجی RIPMED-160 (ورژن شبکه اصلی رمزارز بیت کوین ۰۰ می باشد)
۰x00d0e252944b2031b66f9a60705ae794b02dee459b
- اعمال مجدد SHA1-256 Hash بر روی مقدار به دست امده از مرحله ۵
۵e3a704c2683f35b3fb5ca374360e7ddf4ac3e7e1565a985927ef32915968c73
- تکرار SHA-256 HASH بر روی خروجی مرحله ۶
cb43c7b8147c476a9ce074cc5f38c8affa18653791a29c3031d622a0172473d3
چهار بایت اول مقدار به دست آمده Checksum آدرس خواهند بود
cb43c7b8
- اضافه نمودن چهار بایت مذکور به انتهای خروجی RIPMED-160 HASH در مرحله ۴ (و اضافه نمودن ۰۰ شبکه اصلی در ابتدا) که نهایتا می شود ۲۵ بایت آدرس بیت کوینی که ما تولید کرده ایم
۰۰d0e252944b2031b66f9a60705ae794b02dee459bcb43c7b8
- همان طور که می بینید حروفی مانند ۰-o و یا حروفی این چنین احتمال اشتباه در خواندن آدرس را بالا می برند، به همین منظور آدرس را به فرمت Base58 تبدیل می کنیم تا این حروف حذف گردند (می توان از سایت کمک گرفت)
آدرس نهایی ما که بر اساس فرمت Base58 نمایش داده می شود:
۱L3Ug4zuhgRSFufDseXtG9wCtuKaXhQesR
(شمای کلی فرآیند تولید آدرس رمزارز بیت کوین)
قطعا برای استفاده از رمزارز بیت کوین به دانستن تمامی این اطلاعات نیازی نیست؛ اما ارزجو وظیفه خود می داند تا اطلاعات مورد نیاز علاقه مندان را از مبتدی تا سطح پیشرفته در اختیار ایشان قرار دهد.