الگوریتم SHA 256 چیست؟ نحوه کار الگوریتم SHA 256 و کاربرد آن
شبکه بلاکچین و رمزارزها برای کارکرد خود، از برخی از امکانات و تکنولوژیهای علوم کامپیوتری بهره میبرند. الگوریتمهای هشنگاری یا هشینگ یکی از این امکانات است. توابع و الگوریتمهای هش تنوع زیادی دارند، ولی یکی از امنترین آنها الگوریتم SHA 256 است که در بیت کوین نیز مورد استفاده قرار گرفته است. در ادامه به بررسی چیستی و نحوه کار الگوریتم SHA 256 میپردازیم و با کاربردها و مزایا و معایب آن بیشتر آشنا میشویم.
الگوریتم SHA 256 چیست؟
SHA مخفف Secure Hashing Algorithm است و خانوادهای از توابع هش است که توسط آژانس امنیت ملی (NSA) در ایالات متحده توسعه یافته است. یک تابع هش به عبارت ساده، یک الگوریتم ریاضی است که یک ورودی (هر دادهای مانند یک فایل یا یک رمز عبور) را دریافت میکند و یک رشته کاراکتر با اندازه ثابت تولید میکند که مقدار هش یا خلاصه آن داده ورودی است. اما به خاطر داشته باشید که این فرایند شامل رمزگذاری نمیشود.
پس از کشف آسیبپذیریهای موجود در الگوریتم SHA 1، الگوریتم جدید SHA 256 توسعه پیدا کرد. SHA 1 یک الگوریتم محبوب ولی قدیمی است که نقاط ضعف امنیتی زیادی داشت و با پیشرفت تکنولوژی و افزایش قدرت محاسباتی، منسوخ شد.
SHA-256 به اندازه بیت خروجی هش اشاره دارد. به عبارت دیگر، مقدار هش حاصل از SHA-256، دقیقا ۲۵۶ بیت طول دارد که فضای جستجوی قابل توجه بیشتری را در مقایسه با نسخه قبلی خود فراهم میکند و مهندسی معکوس ورودی اصلی بهوسیله مقدار هش را از نظر محاسباتی غیرممکن میکند.
نحوه کار الگوریتم SHA 256
الگوریتم SHA 256 را میتوانید به عنوان سس مورد علاقه خود در نظر بگیرید که از ترکیب و مخلوط کردن سبزیجات و ادویههای مختلف تهیه میشود؛ شما نمیتوانید دقیقا بگویید چه چیزی در آن وجود دارد، مگر اینکه برچسب روی محصول را بررسی کنید.
الگوریتم SHA 256 کلمات و نمادها را میگیرد و آنها را با یکدیگر ترکیب میکند. اگر کلمات و نمادها یکسان باشند، هش طولانی ۲۵۶ بیتی نیز یکسان خواهد بود؛ اما اگر جزئیات کوچکی مانند حروف بزرگ و کوچک را تغییر دهید، خروجی کاملا متفاوت خواهد بود.
الگوریتمهای درهمسازی مانند SHA 256 میتوانند رمزهای عبور کوتاه (حتی در حد یک حرف یا عدد) و کتابهای الکترونیکی ۱۰۰۰۰۰ کلمهای را بگیرند و آنها را از چندین مرحله پیچیده عبور دهند تا یک مقدار هش ۲۵۶ بیتی تولید کنند.
ویژگیهای الگوریتم SHA 256
ویژگیهای کلیدی که SHA 256 را قادر میسازد تا اهداف خود را برآورده کند، عبارتند از:
منحصر به فرد بودن
هنگامی که از تابع هش SHA 256 استفاده میشود، ورودیهای مجزا همیشه مقادیر هش منحصربهفردی تولید میکنند؛ حتی یک تغییر کوچک در ورودی منجر به یک مقدار هش بسیار متفاوت میشود. این به عنوان اثر بهمن (Avalanche Effect) شناخته میشود. علاوهبراین، فارغ از اندازه ورودی، مقدار هش همیشه ۲۵۶ بیت خواهد بود.
ورودی | مقدار هش |
---|---|
M | ۰۸f271887ce94707da822d5263bae19d5519cb3614e0daedc4c7ce5dab7473f1 |
m | ۶۲c66a7a5dd70c3146618063c344e531e6d4b59e379808443ce962b3abd63c5a |
me | ۲۷۴۴ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0 |
meandyou | cf7af6b1be152c4f427a3b5beb444e85eeadfb9e062ed420fb9b9a10ccfbadf7 |
در اینجا نمونهای از نحوه کار الگوریتم SHA 256 آورده شده است. همانطور که میبینید، هشهای ورودی با تعداد کاراکترهای مختلف، منجر به ایجاد هش کاملا متفاوتی میشود؛ اما همیشه اندازه آنها یکسان است (۶۴ کاراکتر هگزادسیمال یا ۲۵۶ بیت). حتی اگر شما هش ورودی m را با حرف بزرگ (M) بنویسید، هش به کلی تغییر مییابد.
برگشت ناپذیری
مقادیر هش ایجاد شده با استفاده از الگوریتم SHA 256 از نظر محاسباتی برای مهندسی معکوس غیرممکن است؛ به این معنی که شما نمیتوانید دادههای ورودی اصلی را از مقدار هش بدست آورید. این تضمین میکند که حتی اگر مقدار هش در دسترس عموم باشد، دادهها محافظت میشوند که اشتراکگذاری فایلها را به صورت عمومی آسان میکند.
قطعیت
SHA 256 همیشه مقدار هش یکسانی را برای یک ورودی خاص تولید میکند. یعنی اگر یک ورودی خاص به این الگوریتم بدهید، همواره مقدار هش یکسانی دریافت خواهید کرد. این ویژگی ثبات در فرآیند هش را تضمین میکند و امکان تایید دادهها را در سیستمها فراهم میکند.
کاربرد الگوریتم SHA 256
الگوریتم SHA 256 نقشی اساسی در تضمین امنیت دادهها ایفا میکند؛ از محافظت از کیف پول بلاکچین گرفته تا کمک به ذخیره رمزهای عبور کاربر و امضای دیجیتال. در ادامه رایجترین موارد استفاده از این الگوریتم هش را بررسی میکنیم.
امضای دیجیتال
در امضاهای دیجیتال، الگوریتم SHA 256 میتواند یکپارچگی و صحت اسناد و پیامها را تضمین کند. به عنوان مثال، SHA 256 یک مقدار هش از محتوای امضا شده تولید میکند که به عنوان اثر انگشت دیجیتال منحصر به فرد عمل میکند. سپس از کلید خصوصی امضا کننده برای رمزگذاری مقدار هش و ایجاد امضای دیجیتال استفاده میشود.
در انتها، گیرنده یک برنامه، میتواند امضا را با استفاده از کلید عمومی مربوطه، رمزگشایی کرده و مقدار هش سند را محاسبه کند.
هش رمز عبور
یکی از محبوبترین کاربردهای الگوریتم SHA 256 هش کردن رمز عبور است. شرکتها به جای ذخیره رمزهای عبور واقعی، مقادیر هش خود را استخراج میکنند. این فرایند برای کاربر بسیار ایمنتر است. هر بار که رمز عبور خود را وارد میکنید، سیستم یک مقدار هش جدید دریافت کرده و بررسی میکند که آیا با رمز ذخیره شده در پایگاه داده مطابقت دارد یا خیر.
فناوری بلاکچین
فناوری بلاکچین نیز از الگوریتم SHA 256 برای ایمنسازی، یکپارچگی و تغییرناپذیری دادههای ذخیره شده در بلوکها استفاده میکند. از آنجایی که هر بلوک در یک بلاکچین دارای یک اثر انگشت دیجیتال منحصر به فرد است، هیچکس نمیتواند محتوای بلاک را بدون تغییر دادن هش تغییر دهد. به عبارت دیگر، با پیوند دادن بلوکها با استفاده از مقادیر هش، بلاکچین یک دفتر کل شفاف و ضد دستکاری ایجاد میکند که هر کسی میتواند آن را تایید کند.
یکپارچگی فایل
هش کردن میتواند به محافظت از یکپارچگی هر فایلی کمک کند. اسناد، فیلمها، فایلهای اجرایی نرمافزار و هرگونه فایل دیگری میتواند به کمک این فرایند، یکپارچه و ایمن شود. این موضوع بسیار مهم است؛ زیرا در حین استفاده از امضای دیجیتال یا بهروزرسانی یک نرمافزار، میتوانید تایید کنید که هیچیک از این فایلها دستکاری نشده است.
گواهینامههای SSL/TLS
توابع هش مانند SHA به بهتر شدن مرور وب کمک میکنند. SHA 256 میتواند با ایجاد امضای دیجیتالی که دستگاه شما توانایی تایید آن را دارد، به ایمن کردن گواهینامههای SSL/TLS (امنیت لایه حمل و نقل داده) کمک میکند. به عنوان مثال، هنگامی که یک سرور گواهی TLS خود را به مشتریانی مانند مرورگرهای وب ارائه میدهد، مشتری میتواند از کلید عمومی مربوطه برای رمزگشایی و تایید امضا استفاده کند. اگر گواهی SSL توسط یک مرجع گواهی معتبر صادر نشده یا دستکاری شده باشد، مقادیر هش با هم مطابقت ندارند.
کاربردهای الگوریتم SHA 256 در ارزهای دیجیتال
یکی از کاربردهای مهم الگوریتم SHA 256 در دنیای ارزهای دیجیتال، بر بستر بلاکچین بیت کوین است. در ادامه دو کاربرد مهم این الگوریتم در بلاکچین بیت کوین را توضیح میدهیم.
استفاده در فرایند استخراج بیت کوین
در فرایند استخراج بیت کوین که بر اساس الگوریتم اجماع اثبات کار عمل میکند، ماینرها باید با به اشتراک گذاشتن توان محاسباتی دستگاههای ماینر خود، با یکدیگر بر سر به دست آوردن عددی خاص به نام عدد nounce رقابت کنند. پس از به دست آوردن عدد نانس، ماینرها این عدد را با سایر اطلاعات بلوک به الگوریتم اضافه کرده تا فرایند استخراج آغاز شود. برای به دست آوردن هش بلوک قبل، ماینر باید هدر بلاک (Block Header) قبلی را دو بار از الگوریتم SHA 256 عبور دهد. پس از ثبت اطلاعات مورد نیاز و حل کردن این پازل ریاضی، بلاک جدید با موفقیت ساخته شده و به زنجیره بلاکچین اضافه میشود.
کل فرایند اضافه شدن بلوک جدید تقریبا ۱۰ دقیقه طول میکشد. برای اینکه زمان استخراج بلاک جدید همان ۱۰ دقیقه باقی بماند و تغییر نکند، از سختی استخراج یا سختی شبکه استفاده میشود که تقریبا هر ۲ هفته یکبار (هر ۲۰۱۶ بلاک) مجددا تنظیم میشود. در واقع سختی استخراج، زمان اضافه شدن بلوک جدید را کنترل میکند و باعث میشود که بلوکهای جدید با یک سرعت تقریبا ثابت به شبکه اضافه شوند. هرچه هش ریت یا نرخ هش شبکه بیشتر شود، سختی شبکه نیز افزایش خواهد یافت و بنابراین، ماینرها باید قدرت هش بیشتری به شبکه بیت کوین وارد کنند تا بتوانند با دیگر ماینرها بر سر ساخت بلاکهای جدید رقابت کنند.
ساخت آدرسهای بیت کوین
ساخت آدرس بیت کوین ۴ مرحله دارد که در ادامه، آنها را به ترتیب نام میبریم:
- ابتدا کلید خصوصی ساخته میشود.
- از کلید خصوصی، با استفاده از الگوریتم ECDSA (الگوریتم امضای دیجیتال منحنی بیضوی) یک کلید عمومی (Public Key) مشتق میشود.
- سپس این کلید عمومی با توابع SHA 256 و RIPEMD 160 هش میشود (به این موضوع دو بار هش یا Double Hash نیز گفته میشود) تا یک هش کلید عمومی (Public Key Hash) بهدست بیاید.
- در نهایت، الگوریتم رمزگذاری Base58 به هش کلید عمومی اضافه میشود و آدرس بیت کوین تولید میشود.
تراکنشهای بیت کوین با استفاده از کلید خصوصی به صورت دیجیتال امضا میشوند تا ثابت شود که بیت کوینهای ارسال شده واقعا متعلق به فرستنده است. امضای تراکنشهای بیت کوین نیز با تابع SHA 256 انجام میشود؛ به این صورت که دادههای تراکنش با الگوریتم SHA 256 هش میشوند و هش حاصل، با کلید خصوصی فرستنده و با استفاده از تابعی دیگر امضا میشود. این امضای دیجیتال در دادههای تراکنش قرار داده میشود تا سایر اعضای شبکه بتوانند با استفاده از کلید عمومی فرستنده، صحت امضا را تایید کنند.
آیا الگوریتم SHA 256 امن است؟
بسیاری الگوریتم SHA 256 را یکی از امنترین الگوریتمهای هش امروزی میدانند. امنیت این الگوریتم به این دلیل است که در جلوگیری از برگشت مقادیر به محتوای اصلی عالی عمل میکند. علاوهبراین، SHA 256 از برخورد هش جلوگیری میکند؛ بدین معنی که دو ورودی مجزا نمیتوانند یک هش یکسان تولید کنند. در نهایت برای استفاده ایمن از الگوریتمهای هش، باید اطمینان حاصل کرد که مقادیر به اندازه کافی متفاوت باشند.
الگوریتم SHA 256، ابزاری مفید برای کارکرد بیت کوین
همانطور که مطالعه کردید، کاربرد SHA 256 بسیار متنوع است و در حوزههای مختلف مانند امضای دیجیتال، هش رمز عبور و فناوری بلاکچین مورد استفاده قرار میگیرد. شبکه بیت کوین نیز برای استخراج، ساخت آدرسها و امضای تراکنشهای خود از این الگوریتم رایج کامپیوتری استفاده میکند. در واقع این فرایند، خرید بیت کوین، ارسال تراکنشها و استخراج آن را ممکن میسازد. در این مقاله به طور کامل الگوریتم SHA 256 را شرح دادیم و کاربردهای آن در صنایع کامپیوتری و بلاکچین را بررسی کردیم.
گام قبلی (۱۱/۱۸) گام بعدی