کد احراز هویت پیام
جریانهای پیام برای پیکربندی سوئیچ صوتی استفاده میشوند، به پیامهای سوئیچ صوتی مراجعه کنید. برای این پیکربندیهای مهم، ارائهدهنده باید اطمینان حاصل کند که پیام توسط GMSCore (ماژول جفتسازی سریع) ارسال میشود و نه هیچ برنامه دیگری در جستجوگر.
تولید MAC (کد احراز هویت پیام)
FP Seeker با استفاده از HMAC-SHA256 یک کد احراز هویت پیام برای پیامهای پیکربندی دستگاه اضافه میکند. MAC پیام شامل ۸ بایت اول از موارد زیر است:
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, message)))))
کجا
- K توسط concat(کلید حساب، ۴۸ بایت صفر) تولید میشود.
- پیام، دادههای اضافی جریان پیام است.
- nonce توسط concat(session_nonce, message_nonce) تولید میشود؛ nonce جلسه و nonce پیام در بخش زیر تعریف شدهاند.
- opad شامل ۶۴ بایت فضای خالی بیرونی است که از بایتهای تکراری با مقدار
0x5Cتشکیل شده است. - آیپد ۶۴ بایت فضای داخلی دارد که از بایتهای تکراری با مقدار
0x36تشکیل شده است.
عدم حضور در جلسه و عدم حضور در پیام
برای جلوگیری از حملهی بازپخش، ارائهدهنده باید اطمینان حاصل کند که یک nonce تکرار نمیشود. از آنجایی که حفظ همگامسازی ساعت یا شمارنده در هر دو ارائهدهنده و جستجوکننده ساده نیست، ارائهدهنده nonce جلسه (به ازای هر اتصال) را تولید میکند که با تمام پیامها در طول اتصال به اشتراک گذاشته میشود، در حالی که جستجوکننده nonce پیام (به ازای هر پیام) را تولید میکند که به صورت تصادفی برای هر پیام تولید میشود. nonce برای تولید MAC هر پیام، ترکیبی از nonce جلسه و nonce پیام است، یعنی concat(session_nonce, message_nonce).
ما یک nonce جلسه به گروه رویداد اطلاعات دستگاه اضافه میکنیم:
| نام گروه پیام | ارزش |
|---|---|
| رویداد اطلاعات دستگاه | 0x03 |
| نام کد پیام | ارزش |
|---|---|
| عدم حضور در جلسه | 0x0A |
هنگام اتصال جریان پیام، باید یک nonce نشست ایجاد و به جستجوگر ارسال شود:
| هشتتایی | نوع داده | توضیحات | ارزش |
|---|---|---|---|
| 0 | uint8 | رویداد اطلاعات دستگاه | 0x03 |
| ۱ | uint8 | عدم حضور در جلسه | 0x0A |
| ۲ - ۳ | واحد۱۶ | طول داده اضافی | 0x0008 |
| ۴ - ۱۱ | عدم حضور در جلسه | متغیر است |
برای ارسال پیام در صورت نیاز به MAC، جستجوگر یک پیام nonce و MAC را به همراه پیام ارسال میکند.
| هشتتایی | نوع داده | توضیحات | ارزش |
|---|---|---|---|
| 0 | uint8 | گروه پیام | متغیر است |
| ۱ | uint8 | کد پیام | متغیر است |
| ۲ - ۳ | واحد۱۶ | طول داده اضافی (طول داده اضافی + ۱۶) | متغیر است |
| ۴ - ن | دادههای اضافی | متغیر است | |
| ن + ۱ - ن + ۸ | پیام موقت | متغیر است | |
| ن + ۹ - ن + ۱۶ | کد احراز هویت پیام | متغیر است |
تأیید 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 - به دلیل کد احراز هویت نادرست پیام مجاز نیست - ارسال کند.