کد احراز هویت پیام
از جریان های پیام برای پیکربندی سوئیچ صوتی استفاده می شود، به پیام های سوئیچ صوتی مراجعه کنید. برای این پیکربندیهای مهم، ارائهدهنده باید اطمینان حاصل کند که پیام توسط GMSCore (ماژول جفت سریع) ارسال میشود و نه هر برنامه دیگری در جستجوگر.
ایجاد MAC (کد احراز هویت پیام)
FP Seeker با استفاده از HMAC-SHA256 یک کد احراز هویت پیام را برای پیام های پیکربندی دستگاه اضافه می کند. MAC پیام از 8 بایت اول تشکیل شده است:
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, message)))))
کجا
- K توسط concat (کلید حساب، 48 بایت صفر) تولید می شود.
- پیام داده های اضافی جریان پیام است.
- nonce توسط concat (session_nonce، message_nonce) تولید می شود. session nonce و message nonce در قسمت زیر تعریف شده اند.
- opad دارای 64 بایت لایه بیرونی است که از بایت های مکرر با ارزش
0x5C
تشکیل شده است. - ipad دارای 64 بایت بالشتک داخلی است که از بایت های مکرر با ارزش
0x36
تشکیل شده است.
بدون جلسه و غیره پیام
برای جلوگیری از حمله مجدد، ارائه دهنده باید اطمینان حاصل کند که یک nonce تکرار نمی شود. از آنجایی که حفظ همگام سازی ساعت یا شمارنده در هر دو ارائه دهنده و جستجوگر ساده نیست، ارائه دهنده جلسه nonce (در هر اتصال) را تولید می کند، که در طول اتصال با همه پیام ها به اشتراک گذاشته می شود، در حالی که جستجوگر پیام nonce (در هر پیام) را تولید می کند. به طور تصادفی برای هر پیام تولید می شود. nonce برای تولید MAC هر پیام ترکیبی از session nonce و message nonce است، یعنی concat(session_nonce، message_nonce).
ما یک جلسه nonce به گروه رویداد اطلاعات دستگاه اضافه می کنیم:
نام گروه پیام | ارزش |
---|---|
رویداد اطلاعات دستگاه | 0x03 |
نام کد پیام | ارزش |
---|---|
جلسه هیچ | 0x0A |
هنگام اتصال RFCOMM، nonce جلسه باید تولید و به جستجوگر ارسال شود:
اکتت | نوع داده | توضیحات | ارزش |
---|---|---|---|
0 | uint8 | رویداد اطلاعات دستگاه | 0x03 |
1 | uint8 | جلسه هیچ | 0x0A |
2 - 3 | uint16 | طول داده های اضافی | 0x0008 |
4 - 11 | بدون جلسه | متفاوت است |
برای ارسال پیام در زمانی که نیاز به MAC است، جستجوگر یک پیام nonce و MAC را همراه با پیام ارسال می کند.
اکتت | نوع داده | توضیحات | ارزش |
---|---|---|---|
0 | uint8 | گروه پیام | متفاوت است |
1 | uint8 | کد پیام | متفاوت است |
2 - 3 | uint16 | طول داده اضافی (طول داده اضافی + 16) | متفاوت است |
4 - n | داده های اضافی | متفاوت است | |
n + 1 - n + 8 | پیام هیچ | متفاوت است | |
n + 9 - n + 16 | کد احراز هویت پیام | متفاوت است |
تأیید MAC (کد احراز هویت پیام)
به محض دریافت پیامی با کد احراز هویت پیام، ارائهدهنده باید آن را با استفاده از عملکرد مشابه تابع تولیدکننده تأیید کند. یعنی MAC دریافتی باید برابر با 8 بایت اول باشد
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(section_nonce, message_nonce, message)))))
کجا:
- K توسط
concat(account key, 48-byte ZEROs)
تولید میشود و ارائهدهنده باید تمام کلیدهای حساب ذخیرهشده را برای تأیید MAC طی کند. - پیام داده های اضافی (به استثنای پیام nonce و MAC) جریان پیام است.
اگر MAC صحیح باشد، ارائه دهنده باید دستورالعمل پیام را دنبال کند. در غیر این صورت، ارائه دهنده باید یک NAK با دلیل خطا، 0x3 - به دلیل کد احراز هویت اشتباه پیام مجاز نیست، ارسال کند.