در این مطلب میخوایم اول مفهوم MAC و HMAC رو بررسی کنیم ، بعد به بررسی تفاوت های میان این دو بپردازیم
فرض کنید شما یه پیام میخواید بفرستید برای یه نفری و از صحت اون فایل اطمینان حاصل کنید (Integrity) پس میایید و از Hash استفاده میکنید و از فایل مربوطه هش میگیرید و هر دو رو میفرستید برای مخاطبتون ، و مخاطب هم وقتی فایل به دستش رسید میاد و از اون هش میگیره و با هشی که شما فرستادید مقایسه میکنه و وقتی جفتشون یکی بودن اطمینان حاصل میکنه که فایلا یکی هستن
تا اینجا همه چیز خوبه ولی اگر یه مهاجم بخواد این وسط دیتای شمارو شنود کنه و تغییر بده (MITM) ، اونوقت جریان چی میشه؟ هکر میاد و فایلی که فرستادید رو تغییر میده و ازش هش میگیره ، و هش جدید بهمراه فایل تغییر یافته رو برای مقصد میفرسته و وقتی مقصد از فایل هش میگیره ، هیچ تغییری رو متوجه نمیشه چون با هشی که مهاجم فرستاده یکیه و درواقع گول خورده و مهاجم کارشو با موفقیت انجام داده
در اینجاست که ما از یه کلید استفاده میکنیم که از قبل از راه امنی به اشتراک گذاشته شده (چه In Band ، چه Out of Band) و این کلید باید حتما متقارن باشه و این کلید رو دو نفر دارن ، حالا نفر اول میخواد پیام رو بفرسته ، میاد و از پیام و کلید باهم هش میگیره ، و هش و پیام رو میفرسته برای مقصد (کلید رو نمیفرسته) و وقتی مقصد فایل و هش رو گرفت ، میاد و از فایل با کلید خودش هش میگیره و اگر هشی که خودش گفته با هشی که نفر اول فرستاده یکی باشه ، صحت پیام تایید میشه و مهاجم این وسط اگر شنودی هم بتونه بکنه نمیتونه تغییری تو فایل ایجاد کنه چون قابل شناسایی میشه
نکته : اگر ما از فایل + کلید هش بگیریم یه هش داریم ، اگر از کلید + فایل هش بگیریم یه هش متفاوت دیگه داریم ، پس قبل ارتباط توافق کنید که چطوری هش گرفته بشه
حالا به اون کلیدی که دونفر به اشتراک گذاشتن میگن MAC یا Message Authentication Code یا کد اعتبار سنجی پیام که باهاش صحت پیامو تایید میکنن و به روشی که با استفاده از اون کلید + فایل ما هش میگیریم و اعتبار پیامو میسنجیم میگن HMAC یا Hash Message Authentication Code
اگر سوالی ابهامی ، پیشنهادی یا انتقادی بود در خدمتم
سلام وقت بخیر
ساختار پیام finished در اخر اینطوریه :
HMAC(session_key, handshake_messages)
و چون هم سشن کی رو نیاز داره هم هش پیام ها، اگر فیل بشه کلا نتیجه رو فیل برمیگردونه
سر همین دقیق مشخص نیست گردن کی بوده یا چی fail شده
سر همین امید وارم جوابتونو گرفته باشید
ولی شما میتونید یا ساختار tls خودتونو ایجاد کنید که زیاد جالب نیست ولی خب شدنیه و اینجا میتونید بفهمید
یا
میتونید توی بحث keyexchange از استاندارد های بروز و بسیار سخت گیرانه استفاده کنید، چون توی فرایند تبادل کلید که بعدا میخواد منجر بشه به ساخت session key ما RFC 5114 رو داریم که اسیب پذیره، و شما اگر از RFC 7919 استفاده کنید خیالتون جمع تره (اگر دوست داشتید درباره رمزنگاری من مقالات تخصصی دارم به این لینک ))
اینطوری مطمئنید ک در صورت fail شدن مشکل از session key نبوده
هر سوال دیگه ای بود در خدمتم
سلام ببخشید یه سوال داشتم در پروتکلTLS هم پیام Finished با الگوریتم HMAC ارسال میشه . هش ( کل پیام های رد و بدل شده + کلید مخفی ) گرفته میشه درسته . یا روش هش گرفتن . حالا وقتی سرور تنها یه هش از کلاینت دریافت می کنه . این ها اوکیه که میاد خودش هم از کل پیام ها + کلید مخفی هش می گیره و مقایسه می کنه و .... کاملا اوکیه . سوالم اینه وقتی کلاینت متوجه میشه هش،ها یکسان نیست پس دستکاری صورت گرفته آیا میتونه تشخیص بده این دستکاری روی session key بوده یا پیام های رد و بدل شده. امیدوارم تونسته باشم منظورم گفته باشم،. این که اوکیه می فهمه هش ها یکسان نیست یعنی دستکاری صورت گرفته، اما آیا می تونه بفهمه دستکاری روی کلید مخفی بوده یا پیام ؟
سلام وقتتون بخیر بله
AES الگریتم رمز نگاری هست و برای محافظت از این رمز میشه از یه الگریتم برای حفظ Integrity یا صحت پیام استفاده کرد که همون HMAC هست
منافاتی ندارن
پیروز باشید :)
سلام وقتتون بخیر. از hmac برای الگوریتم AES هم میشه استفاده کرد؟