پیام finished در پروتکل TLS
سلام بچه ها امیدوارم که حالتون خوب باشه اول این جواب chat gpt داده بخونین . مرسی
در پروتکل TLS، مرحلهای که پیام Finished ارسال میشود، نقش بسیار مهمی در اعتبارسنجی امنیتی ارتباط ایفا میکند. در این پیام، از HMAC برای بررسی صحت و یکپارچگی ارتباط استفاده میشود. همانطور که اشاره کردید، در پیام Finished یک هش یا HMAC از کل پیامهای رد و بدل شده (از ابتدای handshake تا این مرحله) به همراه session key گرفته میشود و از طریق سرور به کلاینت ارسال میشود. کلاینت هم دقیقاً همین محاسبات را انجام میدهد و نتیجهی هش را مقایسه میکند.
در مورد سناریویی که گفتید، دو حالت داریم:
session key یکسان است ولی پیامهای رد و بدل شده دستکاری شدهاند:
در این حالت، اگرچه session key در دو طرف یکسان است، اما تغییر در پیامها باعث میشود هش نهایی متفاوت باشد. وقتی کلاینت هش دریافتشده از سرور را با هش محاسبهشده خودش مقایسه میکند، تفاوت را شناسایی میکند. اینجا کلاینت متوجه میشود که پیامی در طول ارتباط تغییر یافته و این تغییر به معنای دستکاری یا شنود است، بنابراین یک پیام Alert به سرور ارسال میکند و ارتباط قطع میشود.پیامهای رد و بدل شده تغییر نکردهاند ولی session key متفاوت است: اگر به هر دلیلی session key بین کلاینت و سرور متفاوت باشد (مانند اشتباه در محاسبه یا وجود نقص امنیتی)، هشهایی که هر دو طرف تولید میکنند متفاوت خواهند بود. در این حالت، کلاینت بدون ارسال پیغام Alert، به دلیل تفاوت کلیدی session key، ارتباط را به سادگی قطع میکند.
این دو حالت مکانیزم بسیار قویای برای شناسایی دستکاری یا تفاوت کلیدهای جلسه (session key) در TLS فراهم میکنند.
سوالم اینه که کلاینت فقط یک خروجی هش از سرور دریافت می کند ، و بعد اینکه خودش میاد از کل پیام های رد و بدل شده با کمک الگوریتم SHA-256 و session key با این ها میاد از دیتا هش میگیره . و مقایسه می کنه می بینه که هش خروجی خودش یکسان نیست با هش دریافت کرده ، این که اوکیه می فهمه ارتباط دستکاری شده تا اینجا حله . سوالم اینه از کجا می فهمه این دستکاری مربوط به session key بوده یا پیام های رد و بدل شده ، بعد این وضعیت کلاینت ارتباط نامعتبر میدونه بدون ارسال هیچ پیامی ارتباط یک طرفه قطع می کنه ، یا پیام alert به سرور می فرسته ، من خوندم میگن بدون ارسال هیچ پیام ارتباط قطع می کنه و سرور هم تا دو دقه منتظر دریافت پیام می مونه اگه نگرفت اون هم قطع می کنه .
3 پاسخ
سلام sessin key که اینجا گفته شده در واقع همون secret key هست. و با اون session key که برای رمزنگاری و رمزگشایی ترافیک بین سرور و کلاینت استفاده میشه ممکنه فرق می کنه.
در hmac ابتدا هش پیام ها گرفته میشه و هش خروجی دوباره با secret key هش میشه و همین اتفاق سمت کلاینت هم اتفاق میفته و هش نهایی مقایسه میشه، و اگر hmac ها با هم برابر نبودند یعنی یا secret key دستکاری شده و یا پیام، و نمیشه به طور یقین گفت که کدوم یکی.
بله تعریف اولی کامل تر هست.
برای MAC هم مقاله ی زیر مطالعه کنین:
در کل HMAC و MAC برای بررسی integrity (جامعیت و امنیت) دیتا، اینکه در بین مسیر تغییر داده نشده استفاده میشه
سلام . یعنی HMAC نحوه کارش اینجوریه که میاد اول از کل پیام هش عادی میگیره ( الگوریتم SHA-256 ) بعد این خروجی که یک هش هست رو میاد با کلید مخفی دوباره یک هش میگیره . این فرق داره با زمانی که میگیم از پیام + کلید مخفی با هم هش میگیره ، اولی میگه باید از پیام هش گرفته بشه خروجی اش که یک هش بیاد با کلید مخفی هش گرفته بشه . ولی دومی میگه همزمان الان اولی درسته پس ؟ MAC چجوری کار می کنه ؟