محاسبهٔ SHA-256 و SHA-1 یک فایل
SHA-256 و SHA-1 یک فایل را با کتابخانهٔ رمزنگاری خود مرورگر محاسبه و با checksum جایگذاریشده مقایسه میکند. فایل بهشکل بایت خام خوانده میشود و هرگز بارگذاری نمیشود.
هر نوع فایل تا ۵۱۲ مگابایت. در همین زبانه خوانده میشود و هیچجا فرستاده نمیشود.
نتیجهها بدون تضمین درستی ارائه میشوند. روش و منابع در پایین صفحه منتشر شدهاند تا بتوانید محاسبه را بررسی کنید.
چگونگی کار
checksum چه چیزی را ثابت میکند
هش رمزنگاری همهٔ بایتهای فایل را به رشتهای با طول ثابت نگاشت میکند. تغییر یک بایت خروجی کاملاً دیگری میسازد. به همین دلیل میتوان فایل ISO یا بستهٔ نصب را پس از دانلود با مقدار منتشرشده سنجید، بدون اینکه خود فایل برای بررسی جایی فرستاده شود.
SHA-256 خروجی ۲۵۶بیتی دارد و بهصورت ۶۴ نویسهٔ هگز نمایش داده میشود. SHA-1 ۱۶۰بیتی و ۴۰نویسهای است. ابزار هر دو را از Web Crypto میگیرد؛ همان لایهٔ رمزنگاری مرورگر که توسط سیستم و موتور مرورگر پیادهسازی شده است.
نمونهٔ شناختهشده
سه بایت ASCII واژهٔ abc طبق بردار آزمون NIST این SHA-256 را دارند:
ba7816bf8f01cfea414140de5dae2223
b00361a396177a9cb410ff61f20015ad
و SHA-1 همان سه بایت چنین است:
a9993e364706816aba3e25717850c26c9cd0d89d
آزمون ابزار همین بردارها و نمونههای بلندتر NIST را بایتبهبایت بررسی میکند. صفر آغازین هر بایت نیز حفظ میشود؛ حذف یک صفر رشته را کوتاه و مقدار را نادرست میکند.
برابری با اعتماد فرق دارد
checksum یکسان بهترین پاسخ برای «آیا دانلود خراب یا ناقص شده است؟» است. برای «چه کسی این فایل را ساخته است؟» کافی نیست. اگر مقدار از همان صفحهای آمده که فایل را میزبانی میکند و آن صفحه دستکاری شده باشد، مهاجم هر دو را جایگزین میکند. در آن وضعیت امضای دیجیتال با کلیدی که از مسیر دیگری معتبر شده لازم است.
SHA-1 برای همین دلیل محدودتر است: برخوردهای عملی امکان ساخت دو ورودی متفاوت با یک digest را نشان دادهاند. اگر فقط یک فهرست قدیمی SHA-1 در دسترس است، تطبیق آن هنوز خطای انتقال را آشکار میکند؛ برای انتشار تازه SHA-256 انتخاب درست است.
مراحل انجام کار
- فایل را در همین زبانه بهشکل بایت خام و بدون رمزگشایی یا تبدیل بخوان.
- بایتها را با نام الگوریتم SHA-256 به Web Crypto بده و ۳۲ بایت digest را دریافت کن.
- همان ورودی را با SHA-1 هش کن تا digest بیستبایتی ساخته شود و میان دو مرحله برای عملکرد دکمهٔ لغو کنترل را به رویدادها برگردان.
- هر بایت را با دو نویسهٔ هگزادسیمال بنویس و صفر آغازین بایتهای کوچکتر از شانزده را نگه دار.
- checksum واردشده را با حذف فاصلهٔ بیرونی، بزرگی حروف، پیشوند الگوریتم و نام فایل پایانی به هگز خالص تبدیل و با هر دو digest مقایسه کن.
- هر مقدار را در یک فایل یکخطی سازگار با قالب sha256sum برای دریافت آماده کن.
فرضها
- هر دو هش از پیادهسازی Web Crypto مرورگر میآیند، نه از یک کتابخانهٔ رمزنگاری نوشتهشده برای این صفحه.
- checksum یکسان، برابری بایتبهبایت با فایل منتشرشده را نشان میدهد؛ هویت منتشرکننده یا امنبودن خود فایل را ثابت نمیکند.
- SHA-1 فقط برای فهرستهای قدیمی نمایش داده میشود. برخورد عملی آن نشان داده شده و برای انتشار تازه باید از SHA-256 استفاده شود.
- کل فایل هنگام هشکردن در حافظه است و سقف ۵۱۲ مگابایت دارد؛ Web Crypto رابط digest مرحلهای ارائه نمیکند.
- مقایسه فقط شکل نمایش بیرون از digest را نادیده میگیرد و هیچ نویسهای را درون خود مقدار حذف یا اصلاح نمیکند.
پرسشهای رایج
آیا فایلی که هش میکنم بارگذاری میشود؟
نه. مرورگر فایل را محلی میخواند و Worker روی همین دستگاه هر دو هش را محاسبه میکند. این موضوع برای فایلی که هنوز به آن اعتماد ندارید مهمتر است و آزمون صفحه هر درخواست بیرونی را رد میکند.
باید SHA-256 را بررسی کنم یا SHA-1 را؟
اگر منتشرکننده SHA-256 داده است همان را به کار ببرید. مقدار هگز ۶۴نویسهای SHA-256 و مقدار ۴۰نویسهای معمولاً SHA-1 است. SHA-1 فقط برای سازگاری با انتشارهای قدیمی باقی مانده است.
بزرگی یا کوچکی حروف checksum مهم است؟
نه. حروف هگز در دو شکل یک مقدار دارند. فاصلهٔ میان جفتبایتها، پیشوندی مانند sha256: و نام فایل پس از digest نیز در مقایسه نادیده گرفته میشوند.
اگر checksumها یکسان نبودند چه کار کنم؟
فایل را اجرا نکنید. ابتدا اندازه را بررسی و فایل را از یک اتصال و منبع قابل کنترل دوباره دریافت کنید. اگر اندازه درست ولی هش متفاوت است، فایل را تغییرکرده یا خراب در نظر بگیرید.
آیا SHA-256 یکسان یعنی فایل امن است؟
فقط ثابت میکند بایتها با checksum مقایسهشده یکساناند. مهاجمی که هم فایل و هم مقدار کنار آن را عوض کند هنوز نتیجهٔ یکسان میسازد. برای اثبات منشأ به امضای دیجیتال و کلید ازپیشمعتبر نیاز دارید.