با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
کد احراز هویت پیام
از جریان های پیام برای پیکربندی سوئیچ صوتی استفاده می شود، به پیام های سوئیچ صوتی مراجعه کنید. برای این پیکربندیهای مهم، ارائهدهنده باید اطمینان حاصل کند که پیام توسط GMSCore (ماژول جفت سریع) ارسال میشود و نه هر برنامه دیگری در جستجوگر.
ایجاد MAC (کد احراز هویت پیام)
FP Seeker با استفاده از HMAC-SHA256 یک کد احراز هویت پیام را برای پیام های پیکربندی دستگاه اضافه می کند. MAC پیام از 8 بایت اول تشکیل شده است:
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 بایت اول باشد
K توسط concat(account key, 48-byte ZEROs) تولید میشود و ارائهدهنده باید تمام کلیدهای حساب ذخیرهشده را برای تأیید MAC طی کند.
پیام داده های اضافی (به استثنای پیام nonce و MAC) جریان پیام است.
اگر MAC صحیح باشد، ارائه دهنده باید دستورالعمل پیام را دنبال کند. در غیر این صورت، ارائه دهنده باید یک NAK با دلیل خطا، 0x3 - به دلیل کد احراز هویت اشتباه پیام مجاز نیست، ارسال کند.
تاریخ آخرین بهروزرسانی 2025-08-13 بهوقت ساعت هماهنگ جهانی.
[null,null,["تاریخ آخرین بهروزرسانی 2025-08-13 بهوقت ساعت هماهنگ جهانی."],[[["\u003cp\u003eMessage Authentication Codes (MACs) are used to verify that Fast Pair configuration messages originate from Google Mobile Services (GMSCore) and not other apps.\u003c/p\u003e\n"],["\u003cp\u003eMACs are generated using HMAC-SHA256, incorporating session and message nonces to prevent replay attacks.\u003c/p\u003e\n"],["\u003cp\u003eProviders initiate a session nonce upon RFCOMM connection and seekers generate a unique message nonce for each message.\u003c/p\u003e\n"],["\u003cp\u003eTo verify a message, providers compute the MAC using the received data and compare it with the received MAC, using stored account keys for verification.\u003c/p\u003e\n"],["\u003cp\u003eIf MAC verification fails, the provider sends a NAK message indicating an incorrect authentication code.\u003c/p\u003e\n"]]],["Message Authentication Code (MAC) ensures messages originate from GMSCore. The Seeker generates a MAC using HMAC-SHA256, derived from a key (K), nonce, and message data. The nonce combines a per-connection session nonce (Provider-generated) and a per-message nonce (Seeker-generated). The Seeker transmits the message nonce and MAC with each message. The Provider verifies the MAC using the same function and stored keys, acting on the message only if the MAC is correct. If not, a NAK is sent.\n"],null,["Message Authentication Code\n---------------------------\n\n[Message streams](/nearby/fast-pair/specifications/extensions/messagestream#MessageStream \"message stream\") are used to configure Audio switch, see\n[Audio switch messages](/nearby/fast-pair/specifications/extensions/sass#MacOfSassMessages \"MAC of Audio switch Messages\"). For these important configurations, the Provider needs\nto ensure that the message is sent by GMSCore (Fast Pair module) and not any\nother app on the Seeker.\n| **Note:** Google recommends implementing the [Cryptographic Test Cases](/nearby/fast-pair/specifications/appendix/cryptotestcases \"Link to the Cryptographic Test Cases.\") to ease verification of these requirements.\n\n### Generate MAC (message authentication code)\n\nFP Seeker adds a message authentication code for device configuration messages\nusing HMAC-SHA256. The MAC of the message consists of the first 8 bytes of: \n\n sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, message)))))\n\nwhere\n\n1. *K* is generated by concat(account key, 48-byte ZEROs).\n2. *message* is the additional data of Message stream.\n3. *nonce* is generated by concat(session_nonce, message_nonce); session nonce and message nonce are defined in the following section.\n4. *opad* is 64 bytes of outer padding, consisting of repeated bytes valued `0x5C`.\n5. *ipad* is 64 bytes of inner padding, consisting of repeated bytes valued `0x36`.\n\n### Session nonce and message nonce\n\nTo prevent a replay attack, the Provider needs to ensure that a nonce is not\nrepeated. Since maintaining clock or counter synchronization on both Provider\nand Seeker is not straightforward, the Provider generates the session nonce\n(per connection), which is shared with all messages during the connection,\nwhile the Seeker generates the message nonce (per message), which is randomly\ngenerated for each message. The nonce for generating the MAC of each message is\nthe combination of session nonce and message nonce, i.e.\nconcat(session_nonce, message_nonce).\n\nWe add a session nonce to the Device information event group:\n\n| Message Group Name | Value |\n|--------------------------|-------|\n| Device information event | 0x03 |\n\n| Message Code Name | Value |\n|-------------------|-------|\n| Session nonce | 0x0A |\n\nThe session nonce should be generated and sent to the Seeker when RFCOMM\nconnects:\n\n| Octet | Data Type | Description | Value |\n|--------|-----------|--------------------------|----------|\n| 0 | uint8 | Device information event | 0x03 |\n| 1 | uint8 | Session nonce | 0x0A |\n| 2 - 3 | uint16 | Additional data length | 0x0008 |\n| 4 - 11 | | session nonce | *varies* |\n\nTo send a message when a MAC is required, the Seeker will send a message nonce\nand the MAC together with the message.\n\n| Octet | Data Type | Description | Value |\n|----------------|-----------|---------------------------------------------------------|----------|\n| 0 | uint8 | Message group | *varies* |\n| 1 | uint8 | Message code | *varies* |\n| 2 - 3 | uint16 | Additional data length(the additional data length + 16) | *varies* |\n| 4 - n | | Additional data | *varies* |\n| n + 1 - n + 8 | | Message nonce | *varies* |\n| n + 9 - n + 16 | | Message authentication code | *varies* |\n\n### Verify MAC (message authentication code)\n\nUpon receiving a message with the message authentication code, the Provider\nshall verify it by using the same function as the generating function. That is,\nthe received MAC should be equal to the first 8 bytes of \n\n sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(section_nonce, message_nonce, message)))))\n\nwhere:\n\n1. *K* is generated by `concat(account key, 48-byte ZEROs)`, and the Provider shall traverse all stored account keys to verify the MAC.\n2. *message* is the additional data (excluding message nonce and MAC) of the Message stream.\n\nIf the MAC is correct, then the Provider shall follow the instruction of the\nmessage. Otherwise, the Provider shall send a NAK with the error reason, 0x3 -\nnot allowed due to incorrect message authentication code."]]