کد احراز هویت پیام

از جریان های پیام برای پیکربندی سوئیچ صوتی استفاده می شود، به پیام های سوئیچ صوتی مراجعه کنید. برای این پیکربندی‌های مهم، ارائه‌دهنده باید اطمینان حاصل کند که پیام توسط GMSCore (ماژول جفت سریع) ارسال می‌شود و نه هر برنامه دیگری در جستجوگر.

ایجاد MAC (کد احراز هویت پیام)

FP Seeker با استفاده از HMAC-SHA256 یک کد احراز هویت پیام را برای پیام های پیکربندی دستگاه اضافه می کند. MAC پیام از 8 بایت اول تشکیل شده است:

 sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, message)))))

جایی که

  1. K توسط concat (کلید حساب، 48 بایت صفر) تولید می شود.
  2. پیام داده های اضافی جریان پیام است.
  3. nonce توسط concat (session_nonce، message_nonce) تولید می شود. session nonce و message nonce در قسمت زیر تعریف شده اند.
  4. opad دارای 64 بایت لایه بیرونی است که از بایت های مکرر با ارزش 0x5C تشکیل شده است.
  5. 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)))))

جایی که:

  1. K توسط concat(account key, 48-byte ZEROs) تولید می‌شود و ارائه‌دهنده باید تمام کلیدهای حساب ذخیره‌شده را برای تأیید MAC طی کند.
  2. پیام داده های اضافی (به استثنای پیام nonce و MAC) جریان پیام است.

اگر MAC صحیح باشد، ارائه دهنده باید دستورالعمل پیام را دنبال کند. در غیر این صورت، ارائه دهنده باید یک NAK با دلیل خطا، 0x3 - به دلیل کد احراز هویت اشتباه پیام مجاز نیست، ارسال کند.