روش جفت سریع

روش

به جای فراخوانی فوری هر یک از رویه‌های پیوند معمولی BR/EDR یا BLE، جستجوگر ابتدا اعلان‌های مربوط به ویژگی جفت‌سازی مبتنی بر کلید را فعال می‌کند و سپس داده‌های جدول 1.1 را روی آن می‌نویسد.

هنگام رسیدگی به درخواست نوشتن از طرف جستجوگر جفت سریع، ارائه دهنده جفت سریع باید موارد زیر را انجام دهد:

  1. اگر فیلد کلید عمومی اختیاری وجود داشته باشد :
    1. اگر دستگاه در حالت جفت شدن نیست، نوشتن را نادیده بگیرید و خارج شوید.
    2. در غیر این صورت:
      1. از کلید عمومی دریافتی (نقطه 64 بایتی در منحنی بیضی secp256r1)، کلید خصوصی از پیش نصب شده Anti-Spoofing - همچنین secp256r1 و الگوریتم Elliptic-Curve Diffie-Hellman برای تولید یک کلید AES 256 بیتی استفاده کنید.
      2. از SHA-256 برای هش کردن کلید AES 256 بیتی استفاده کنید.
      3. 128 بیت اول نتیجه را بگیرید. این کلید AES Anti-Spoofing است که در مرحله بعد استفاده می شود.
  2. با استفاده از AES-128، سعی کنید مقدار را رمزگشایی کنید. از آنجایی که مقدار یک بلوک AES 16 بایتی است، هیچ حالت رمزگذاری IV یا چند بلوکی لازم نیست.

    1. از کدام کلید استفاده کنید:
      1. اگر در مرحله 1 یک کلید AES ضد جعل ایجاد شد، از آن کلید استفاده کنید.
      2. در غیر این صورت، هر کلید را در فهرست کلیدهای حساب موجود امتحان کنید.
    2. اگر کلیدی مقدار را با موفقیت رمزگشایی کرد، آن را شکسته و به مرحله بعد ادامه دهید.
    3. اگر خروجی با فرمت جدول 1.2.1 یا جدول 1.2.2 - مطابقت داشته باشد، مقدار با موفقیت رمزگشایی می شود (یعنی اگر حاوی آدرس BLE فعلی ارائه دهنده جفت سریع یا آدرس عمومی ارائه دهنده جفت سریع باشد).

      توجه: در انتهای بسته یک نمک چسبانده شده است. در صورت امکان، این نمک‌ها باید ردیابی شوند، و اگر ارائه‌دهنده درخواستی حاوی نمک از قبل استفاده‌شده را دریافت کرد، برای جلوگیری از حملات پخش مجدد، درخواست باید نادیده گرفته شود.

    4. به عنوان جایگزینی برای salt ردیابی، اگر نوشتن شامل آدرس خصوصی ارائه‌دهنده باشد، راه دیگری برای جلوگیری از حملات مجدد این است که زمان چرخش آدرس خصوصی قابل حل بعدی را به جلو بیاورید تا چرخش قبل از نوشتن جفت‌سازی مبتنی بر کلید بعدی انجام شود. پذیرفته شده.

  3. اگر هیچ کلیدی نتوانست مقدار را با موفقیت رمزگشایی کند، نوشتن را نادیده بگیرید و از آن خارج شوید.

    1. این شکست ها را بشمارید. وقتی تعداد خرابی ها به 10 رسید، تمام درخواست های جدید را فوراً انجام دهید. پس از 5 دقیقه، پس از روشن شدن، یا پس از موفقیت، شمارش خرابی را بازنشانی کنید.
  4. در غیر این صورت، کلید موفق را به عنوان K ذخیره کنید. این K را به‌عنوان قابل استفاده برای رمزگشایی نوشته‌های Passkey و Personalized name دریافت‌شده در این پیوند LE علامت‌گذاری کنید، اما نه نوشته‌های دیگر و نه نوشته‌های روی پیوندهای دیگر. اگر جفت شدن شروع نشده است، تایمر را شروع کنید تا پس از 10 ثانیه K را دور بریزید. همچنین اگر این پیوند LE قطع شد، K را دور بریزید.

  5. پاسخ خام 16 بایتی نشان داده شده در جدول 1.3 را با الحاق نوع و آدرس BR/EDR ارائه دهنده و سپس پر کردن باقیمانده بسته با بلوکی از بایت های تصادفی (یعنی نمک) تولید کنید.

  6. برای ایجاد پاسخ رمزگذاری شده 16 بایتی نشان داده شده در جدول 1.4، پاسخ خام را با K رمزگذاری کنید. این را از طریق یک اعلان در مورد مشخصه جفت سازی مبتنی بر کلید ارسال کنید.

  7. پرچم درخواست را بخوانید:

    1. اگر بایت Request's Flags بیت 2 را روی 1 تنظیم کرده است ، مشخصه داده های اضافی را با نام شخصی سازی شده مطلع کنید.
    2. اگر بایت Request's Flags بیت 1 را روی 1 تنظیم کرده است:
      1. این نشان می دهد که جستجوگر از ارائه دهنده درخواست می کند تا اتصال به آدرس BR/EDR جستجوگر را که در بایت های 8-13 وجود دارد، آغاز کند.
      2. درخواست جفت شدن را به آدرس BR/EDR جستجوگر ارسال کنید. درخواست جفت شدن باید به شرح زیر باشد (مرحله "در طول جفت شدن").
      3. دلیل اینکه این مورد نیاز است: راه اندازی ارائه دهنده در برخی از دستگاه ها مشکلی را حل می کند.
    3. اگر بایت Request's Flags بیت 1 را روی 0 تنظیم کرده باشد:
      1. برای درخواست جفت شدن حداکثر 10 ثانیه صبر کنید. اگر هیچ کدام دریافت نشد، خارج شوید.
      2. توجه داشته باشید که این ممکن است یک درخواست BR/EDR از آدرس دیگری باشد (نشانی عمومی جستجوگر، به جای آدرس خصوصی قابل حل آن). در حین جفت‌سازی مجدداً تأیید می‌کنیم که دستگاه درخواست‌کننده دارای K است.
  8. در طول جفت شدن:

    1. وقتی یک بسته درخواست/پاسخ جفت‌سازی از جستجوگر دریافت می‌شود: اگر قابلیت‌های دستگاه در درخواست NoInput/NoOutput هستند، جفت‌سازی پایان دهید تا از روش جفت‌سازی Just Works اجتناب کنید.
    2. برای بسته درخواست/پاسخ جفت ارسال شده توسط ارائه دهنده: قسمت Device Capabilities را روی Display/YesNo تنظیم کنید و Requirements Authentication را روی MITM Protection Required تنظیم کنید. این روش جفت‌سازی مقایسه عددی (همچنین به عنوان تأیید رمز عبور در اندروید شناخته می‌شود) را راه‌اندازی می‌کند. ما بر این تکیه می کنیم تا تأیید کنیم که دستگاه درخواست کننده در واقع جفت جستجوگر سریع است و هیچ مردی در وسط وجود ندارد. نمونه ها را ببینید.
    3. دلیل این مورد نیاز است: روش جفت‌سازی خارج از باند مناسب‌تر است، اما پلتفرم آن را در همه نسخه‌های دلخواه اندروید نشان نمی‌دهد.
  9. هنگامی که تأیید رمز عبور مورد نیاز است ، تا 10 ثانیه منتظر بمانید تا مشخصه Passkey نوشته شود.

    1. به طور معمول، با این روش جفت سازی، کاربر تأیید می کند که کلیدهای عبور نمایش داده شده در صفحه نمایش هر دستگاه یکسان هستند. در عوض، فقط برای این جفت‌سازی، آن‌ها را از طریق BLE، رمزگذاری شده با کلید از پیش اشتراک‌گذاری شده مطمئن، منتقل می‌کنیم.
    2. توجه داشته باشید که این رویکرد نباید برای دستگاه‌هایی که صفحه‌نمایش یا صفحه‌کلید دارند، اتخاذ شود، زیرا باعث ایجاد مصالحه جزئی در حفاظت MITM می‌شود. به همین دلیل، Fast Pair در حال حاضر از انواع دستگاه‌ها پشتیبانی نمی‌کند.
    3. اگر تایمر 10 ثانیه ای بدون اینکه رمز عبور نوشته شود منقضی شود، K را کنار بگذارید.
  10. هنگامی که یک مقدار روی مشخصه Passkey نوشته می شود ، این Block رمز عبور رمزگذاری شده است. آن را با K رمزگشایی کنید تا یک بلوک رمز عبور خام به دست آید، با قالب نشان داده شده در مشخصه: Passkey > جدول 2.2 - (نوع = رمز عبور جستجوگر).

  11. اگر رمزگشایی ناموفق بود، نوشتن را نادیده بگیرید و K را کنار بگذارید.

  12. در غیر این صورت، Raw Passkey Block حاوی یک رمز عبور 6 رقمی P Seeker است که همان رمز عبوری است که جستجوگر انتظار دارد.

  13. P Seeker را با کلید عبور مورد انتظار ما، P Provider مقایسه کنید.

    1. اگر مقادیر برابر هستند، به تأیید پاسخ «بله» بدهید.
    2. در غیر این صورت، به تأیید پاسخ «نه» دهید، که باعث می‌شود جفت‌سازی ناموفق باشد.
  14. صرف نظر از اینکه آیا جفت شدن انجام نشد، یک بلوک رمز عبور خام دیگر تولید کنید، با قالب نشان داده شده در ویژگی: Passkey > جدول 2.2 ، که حاوی کلید عبور مورد انتظار ما، P Provider است .

    1. اطمینان حاصل کنید که بلوک دارای نوع صحیح است (کلید عبور ارائه دهنده؛ جدول را ببینید). توجه: نمک موجود در بلوک رمز عبور دریافت شده از جستجوگر را مجدداً استفاده نکنید. یک مقدار تصادفی جدید ایجاد کنید.
  15. بلوک رمز عبور خام را با K رمزگذاری کنید و بلوک رمز عبور رمزگذاری شده حاصل را از طریق یک اعلان روی مشخصه رمز عبور ارسال کنید.

  16. اگر جستجوگر رمز عبور صحیح P را دریافت و رمزگشایی کند، جستجوگر نیز به تأیید پاسخ «بله» می‌دهد و جفت‌سازی با موفقیت انجام می‌شود.

    1. اگر جفت‌سازی موفق شد، K را به‌عنوان قابل استفاده برای رمزگشایی نوشته‌های کلید حساب در این پیوند LE علامت‌گذاری کنید، اما نه برای نوشته‌های بعدی Passkey و نه نوشته‌های روی پیوندهای دیگر. یک تایمر را برای دور انداختن K بعد از 10 ثانیه شروع کنید. همچنین به دنبال هر تلاشی برای نوشتن یک کلید حساب و طبق مرحله 4، اگر پیوند LE قطع شد، K را کنار بگذارید.
    2. اگر جفت شدن ناموفق بود، K را کنار بگذارید.
  17. قسمت قابلیت‌های دستگاه را به قابلیت‌های ورودی/خروجی پیش‌فرض و الزامات احراز هویت را به حالت پیش‌فرض برگردانید تا جفت‌سازی‌های جدید همانطور که انتظار می‌رود ادامه یابد.

توجه داشته باشید که برای ارائه دهندگانی که نیازی به پیوند ندارند، جستجوگر درخواست جفت شدن را برای ارائه دهنده ارسال نمی کند، یعنی مرحله 8 - مرحله 17 نادیده گرفته می شود. همچنین، "K" در مشخصه کلید حساب استفاده می شود.

مثال ها
مثال 1: تلاش موفقیت آمیز جفت شدن (بدون مرد در وسط).
مثال 2: تلاش برای جفت شدن ناموفق، با یک مرد در وسط.