ลักษณะเฉพาะ

บริการจับคู่ด่วน

ผู้ให้บริการจับคู่ด่วนจะมีบริการ GATT ต่อไปนี้

บริการ UUID
บริการจับคู่ด่วน 0xFE2C

บริการนี้ต้องมีลักษณะดังต่อไปนี้

ลักษณะของบริการจับคู่ด่วน มีการเข้ารหัส สิทธิ์ UUID
รหัสโมเดล ไม่ได้ อ่าน FE2C1233-8366-4814-8EB0-01DE32100BEA
การจับคู่คีย์ตาม ไม่ได้ เขียนและแจ้งเตือน FE2C1234-8366-4814-8EB0-01DE32100BEA
พาสคีย์ ไม่ได้ เขียนและแจ้งเตือน FE2C1235-8366-4814-8EB0-01DE32100BEA
คีย์บัญชี ไม่ได้ เขียน FE2C1236-8366-4814-8EB0-01DE32100BEA

บริการข้อมูลอุปกรณ์

ผู้ให้บริการจับคู่ด่วนควรรองรับบริการข้อมูลอุปกรณ์ด้วย

บริการ UUID
บริการข้อมูลอุปกรณ์ 0x180A

โปรแกรมค้นหาการจับคู่ด่วนใช้ลักษณะเฉพาะต่อไปนี้

ชื่อ มีการเข้ารหัส สิทธิ์ UUID
การแก้ไขเฟิร์มแวร์ ไม่ได้ อ่าน 0x2A26

ลักษณะเฉพาะ: รหัสโมเดล

ลักษณะเฉพาะนี้ช่วยให้ผู้ค้นหาอ่านรหัสโมเดลได้ตามต้องการ นอกเหนือจาก เมื่ออุปกรณ์โฆษณาในโหมดที่ค้นพบได้ ซึ่งควรกลับมาเสมอ ข้อมูลต่อไปนี้

อ็อกเท็ต ประเภทข้อมูล คำอธิบาย ค่า
0-2 ครั้ง uint24 รหัสโมเดล แปรเปลี่ยน

ลักษณะเฉพาะ: การจับคู่ตามคีย์

ลักษณะเฉพาะนี้จะควบคุมขั้นตอนการจับคู่คีย์ตาม ในขั้นตอนนี้ ระบบสร้างความไว้วางใจได้ในระดับหนึ่งจากการยืนยันว่า ผู้หาและ ผู้ให้บริการทั้งคู่มีคีย์ที่แชร์ล่วงหน้าไว้ในครอบครอง คีย์จะแตกต่างออกไปใน แต่ละกรณี

  • กรณีที่ 1: คีย์ที่แชร์ล่วงหน้าอิงตามคีย์สาธารณะ/ส่วนตัวป้องกันการปลอมแปลง และคู่คีย์สาธารณะ/ส่วนตัวของ Seeker ซึ่งจะเปลี่ยนแปลงไปสำหรับ ความพยายามในการจับคู่

    • ผู้ให้บริการอยู่ในโหมดการจับคู่
    • ผู้ขอยืนยันว่าผู้ให้บริการรายนั้นมี คีย์ส่วนตัวการป้องกันการปลอมแปลง

    โปรดทราบว่าเมื่ออยู่ในโหมดการจับคู่ ผู้ให้บริการอาจจับคู่ วิธีปกติ เช่น ในการจับคู่กับอุปกรณ์ที่ไม่รองรับ Fast การจับคู่คีย์ตามการจับคู่

  • กรณีที่ 2: คีย์ที่แชร์ล่วงหน้าเป็นหนึ่งในคีย์บัญชี

    • โดยปกติแล้วผู้ให้บริการจะไม่อยู่ในโหมดการจับคู่ (แต่นี่ไม่ใช่ - ผู้ให้บริการควรรองรับการใช้คีย์บัญชี โหมดการจับคู่)
    • ผู้ค้นหาและผู้ให้บริการต้องยืนยันว่าอีกฝ่ายมี คีย์บัญชี

เนื่องจากทั้งสองกรณีคล้ายกันมาก ยกเว้นการใช้คีย์ที่แชร์ล่วงหน้า จะรวมกันได้ในขั้นตอน

รูปแบบข้อมูล

ดูขั้นตอนสำหรับวิธีใช้แต่ละรูปแบบ

อ็อกเท็ต ประเภทข้อมูล คำอธิบาย ค่า จำเป็นไหม
0-15 uint128 คำขอที่เข้ารหัส แปรเปลี่ยน บังคับ
16-79 ปี คีย์สาธารณะ แปรเปลี่ยน ไม่บังคับ

ตาราง 1.1: คำขอที่เข้ารหัส ซึ่งผู้ขอเขียนขึ้นตามลักษณะเฉพาะ

อ็อกเท็ต ประเภทข้อมูล คำอธิบาย ค่า จำเป็นไหม
0 uint8 ประเภทข้อความ 0x00 = คำขอจับคู่คีย์ บังคับ
1 uint8 ธง
  • บิต 0 (MSB): เลิกใช้งานแล้วและละเว้นโดย Seeker
  • บิต 1: 1 หากผู้ขอขอให้ผู้ให้บริการเริ่มการเชื่อมโยง และคำขอนี้มีที่อยู่ BR/EDR ของผู้ขอ หากไม่เป็นเช่นนั้น
  • บิต 2: 1 หากผู้ขอขอให้ผู้ให้บริการแจ้งชื่อที่มีอยู่ หากไม่เป็นเช่นนั้น
  • บิต 3: 1 หากเป็นกรณีนี้สำหรับการเขียนคีย์บัญชีย้อนหลัง หากไม่เป็นเช่นนั้น
  • บิต 4 - 7 สงวนไว้สำหรับการใช้งานในอนาคต และจะถูกละเว้น
แตกต่างกัน บังคับ
2-7 คน uint48 หรือ:
  • ที่อยู่ BLE ปัจจุบันของผู้ให้บริการ
  • ที่อยู่สาธารณะของผู้ให้บริการ
แตกต่างกัน บังคับ
8-13 ปี uint48 ที่อยู่ BR/EDR ของผู้ขอ แตกต่างกัน แสดงเมื่อตั้งค่าแฟล็กบิต 1 หรือ 3 ไว้เท่านั้น
n - 15 ค่าแบบสุ่ม (เกลือ) แตกต่างกัน บังคับ

ตาราง 1.2.1: คำขอข้อมูลดิบ (ประเภท 0x00) ถอดรหัสจากไฟล์ที่เข้ารหัส คำขอใน ตาราง 1.1

อ็อกเท็ต ประเภทข้อมูล คำอธิบาย ค่า จำเป็นไหม
0 uint8 ประเภทข้อความ 0x10 = คำขอดำเนินการ บังคับ
1 uint8 ธง แตกต่างกัน บังคับ
2-7 คน uint48 หรือ:
  • ที่อยู่ BLE ปัจจุบันของผู้ให้บริการ
  • ที่อยู่สาธารณะของผู้ให้บริการ
แตกต่างกัน บังคับ
8 uint8 กลุ่มข้อความ แตกต่างกัน บังคับหากตั้งค่าแฟล็กบิต 0 ไว้
9 uint8 รหัสข้อความ แตกต่างกัน บังคับหากตั้งค่าแฟล็กบิต 0 ไว้
10 uint8 ขึ้นอยู่กับแฟล็ก:
  • ตั้งค่าบิต 0 แล้ว: ความยาวของข้อมูลเพิ่มเติมน้อยกว่า 6
  • ตั้งค่าบิต 1: รหัสข้อมูลแล้ว
แตกต่างกัน บังคับหากตั้งค่าแฟล็กบิต 0 หรือ 1 ไว้
11 - n ข้อมูลเพิ่มเติม แตกต่างกัน ไม่บังคับ
n - 15 ค่าแบบสุ่ม (เกลือ) แตกต่างกัน บังคับ

ตาราง 1.2.2: คำขอดิบ (ประเภท 0x10) ถอดรหัสจากไฟล์ที่เข้ารหัส คำขอใน ตาราง 1.1

อ็อกเท็ต ประเภทข้อมูล คำอธิบาย ค่า
0 uint8 ประเภทข้อความ 0x01 = การตอบกลับการจับคู่ตามคีย์
1-6 ครั้ง uint48 ที่อยู่สาธารณะ (BR/EDR) ของผู้ให้บริการ แตกต่างกัน
7 - 15 ปี ค่าแบบสุ่ม (เกลือ) แตกต่างกัน

ตาราง 1.3: คำตอบที่เป็นข้อมูลดิบ เข้ารหัสเพื่อสร้างคำตอบที่เข้ารหัสใน ตาราง 1.4

อ็อกเท็ต ประเภทข้อมูล คำอธิบาย ค่า
0-15 ครั้ง uint128 คำตอบที่เข้ารหัส แตกต่างกัน

ตาราง 1.4: คำตอบที่เข้ารหัสซึ่งส่งโดยผู้ให้บริการไปยังผู้ค้นหาผ่าน แจ้งเตือน

ลักษณะเฉพาะ: พาสคีย์

ลักษณะนี้จะใช้ในระหว่าง การจับคู่คีย์ตามคีย์

อ็อกเท็ต ประเภทข้อมูล คำอธิบาย ค่า
0-15 uint128 บล็อกพาสคีย์ที่เข้ารหัส แตกต่างกัน

ตาราง 2.1: บล็อกพาสคีย์ที่เข้ารหัส โปรดดู ขั้นตอนการจับคู่ตามคีย์สำหรับการใช้งาน

อ็อกเท็ต ประเภทข้อมูล คำอธิบาย ค่า
0 uint8 ประเภทข้อความ ข้อใดข้อหนึ่ง:
  • 0x02 = พาสคีย์ของ Seeker
  • 0x03 = พาสคีย์ของผู้ให้บริการ
1 - 3 unit32 พาสคีย์ 6 หลัก แตกต่างกัน
4 - 15 ปี ค่าแบบสุ่ม (เกลือ) แตกต่างกัน

ตาราง 2.2: การบล็อกพาสคีย์ดิบ ตาราง 2.1 เวอร์ชันที่ถอดรหัสแล้ว

ลักษณะเฉพาะ: คีย์บัญชี

หลังจากจับคู่แล้ว ผู้ค้นหาการจับคู่ด่วนจะเขียนคีย์บัญชีไปยังการจับคู่ด่วน ผู้ให้บริการ

อ็อกเท็ต ประเภทข้อมูล คำอธิบาย ค่า
0-15 uint128 คีย์บัญชี (เข้ารหัส) แตกต่างกัน

เมื่อได้รับคำขอเป็นลายลักษณ์อักษร ผู้ให้บริการจับคู่ด่วนจะดำเนินการต่อไปนี้

  1. ถอดรหัสคีย์บัญชีโดยใช้ข้อมูลลับที่ใช้ร่วมกันที่สร้างขึ้นจากขั้นตอนที่ 4 ใน procedure
    • สำหรับผู้ให้บริการที่ต้องมีการผูกมัด (ทั่วไป)
      • ก่อนถอดรหัส ให้ตรวจสอบว่ามีการใช้ข้อมูลลับที่ใช้ร่วมกันเพื่อถอดรหัส คำขอพาสคีย์จากขั้นตอนที่ 12 หากไม่ผ่านขั้นตอนนี้ โดยใช้ ข้อมูลลับ ไม่ต้องสนใจการเขียนนี้แล้วออก
    • ในขั้นนี้ ระบบจะไม่ใช้ข้อมูลลับ (K ในกระบวนการ) อีกครั้งสำหรับการจับคู่นี้ คำขอทั้งหมดที่เข้ารหัสด้วยคีย์นี้ โดยไม่ต้องรีสตาร์ทกระบวนการดังกล่าว
  2. ตรวจสอบว่าค่าที่ถอดรหัสนั้นขึ้นต้นด้วย 0x04 หากไม่ใช่ ให้เพิกเฉย การเขียนและปิดไป
  3. ตรวจสอบว่ารายการคีย์บัญชีที่มีอยู่มีพื้นที่ว่างสำหรับ
  4. หากไม่ ให้ลบค่าที่ใช้งานล่าสุดออกจากรายการ
  5. เพิ่มค่าใหม่ลงในรายการ

คีย์บัญชีในรายการจะใช้ในระหว่างการจับคู่คีย์

ลักษณะเฉพาะ: การแก้ไขเฟิร์มแวร์

ลักษณะเฉพาะนี้ช่วยให้ผู้ค้นหาอ่านการแก้ไขเฟิร์มแวร์ของ ระบุผู้ให้บริการตามต้องการ ซึ่งควรแสดงข้อมูลต่อไปนี้เสมอ

อ็อกเท็ต ประเภทข้อมูล คำอธิบาย ค่า
0 - var utf8s รหัสการแก้ไขเฟิร์มแวร์ แตกต่างกัน

โดยควรห่อหุ้มด้วยสตริง utf8 เดียวแม้ว่าจะมีมากกว่า 1 สตริง เฟิร์มแวร์ (เช่น เฟิร์มแวร์ 3 รายการสำหรับหูฟังข้างซ้าย หูฟังข้างขวา และเคส) จากผู้ให้บริการ ผู้ให้บริการยังส่งคืนสตริงที่เฉพาะเจาะจงสําหรับกรณีพิเศษได้ด้วย ดังนี้

  1. status-updating: กรณีที่ผู้ให้บริการกำลังอัปเดตเป็นเฟิร์มแวร์ใหม่ หรือผู้ให้บริการอาจส่งคืนเวอร์ชันของเฟิร์มแวร์ที่ทดลองใช้แล้ว

  2. status-abnormal: หากผู้ให้บริการอยู่ในสถานะผิดปกติ ตัวอย่างเช่น ได้ทำงานผิดปกติเนื่องจากอัปเดตเฟิร์มแวร์ไม่สำเร็จ ค่านี้จะทำให้เกิด ผู้ค้นหาจะแสดงข้อความเพื่อแจ้งให้ผู้ใช้ทราบว่าต้องอัปเดตตอนนี้เลย

ผู้ให้บริการควรจำกัดการเข้าถึงฟีเจอร์การแก้ไขเฟิร์มแวร์เป็น ป้องกันการติดตามอุปกรณ์ ข้อจำกัดที่แนะนำ

  • อุปกรณ์ที่ถูกผูกไว้ควรเข้าถึงได้ทุกเมื่อ
  • อุปกรณ์ทุกเครื่องควรเข้าถึงได้เมื่อค้นพบผู้ให้บริการได้

ลักษณะเฉพาะ: ข้อมูลเพิ่มเติม

บริการนี้จะมีลักษณะดังต่อไปนี้

ลักษณะของบริการจับคู่ด่วน มีการเข้ารหัส สิทธิ์ UUID
ข้อมูล ไม่ได้ เขียนและแจ้งเตือน FE2C1237-8366-4814-8EB0-01DE32100BEA
ลักษณะเฉพาะของบริการจับคู่ด่วนแบบเก่า (เป้าหมายจะเลิกใช้งานในวันที่ 1/1/2021) มีการเข้ารหัส สิทธิ์ UUID
ข้อมูล ไม่ได้ เขียนและแจ้งเตือน 0x1237

ก่อนที่จะเขียนหรือแจ้งเตือนเกี่ยวกับลักษณะนี้ จะต้องมี จับมือผ่านลักษณะเฉพาะ FE2C1234-8366-4814-8EB0-01DE32100BEA ข้อมูลลับที่ใช้ร่วมกัน ระบบจะใช้ AES-CTR ในการเข้ารหัสข้อมูลที่ไหลผ่าน ลักษณะเฉพาะของคุณสมบัติ ซึ่งอัลกอริทึมได้รับการกำหนดไว้ด้านล่างนี้ โหมดนี้ทำงานมากขึ้น ปลอดภัยในข้อมูลที่ขยายเกินบล็อกขนาด 16 ไบต์เดี่ยว HMAC-SHA256 จะ ซึ่งใช้เพื่อตรวจสอบความสมบูรณ์ของข้อมูล ซึ่งมีคำจำกัดความไว้ด้านล่างด้วย

อ็อกเท็ต คำอธิบาย ค่า
0-7 ครั้ง 8 ไบต์แรกของ HMAC-SHA256 แตกต่างกัน
8-15 ปี Nonce ใช้โดยการเข้ารหัส AES-CTR แตกต่างกัน
16 - var ข้อมูลที่เข้ารหัส แตกต่างกัน

ตาราง 3.1: แพ็กเก็ตข้อมูลที่ส่งโดยผู้ให้บริการไปยังผู้หาผ่าน แจ้งให้ผู้ให้บริการทราบหรือส่งให้ผู้ให้บริการผ่านการเขียน

อ็อกเท็ต ประเภทข้อมูล คำอธิบาย ค่า
0 - var byte array ข้อมูล varies แล้วถอดรหัสตามรหัสข้อมูลของตาราง 1.2.2:
  • 0x01(ชื่อในแบบของคุณ): utf8s

ตาราง 3.2: ข้อมูลดิบ ถอดรหัสจากข้อมูลที่เข้ารหัสใน ตาราง 3.1

เมื่อมีการขอให้แจ้งเตือน (เช่น ขอชื่อที่ปรับเปลี่ยนในแบบของตนผ่านบิต 2 นิ้ว ตาราง 1.2.1) ผู้ให้บริการจับคู่ด่วนจะต้องดำเนินการดังนี้

  1. สร้างแบบสุ่มจำนวน 8 ไบต์แบบเข้ารหัสลับสำหรับ Nonce
  2. เข้ารหัสข้อมูลโดยใช้ AES-CTR ซึ่งจะสร้างบล็อกขนาด 16 ไบต์แต่ละบล็อกโดยใช้

    encryptedBlock[i] = clearBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
    

    ที่ไหน

    1. คีย์ AES เป็นข้อมูลลับที่ใช้ร่วมกันจากขั้นตอนที่ 4 ในขั้นตอน
    2. clearBlock[i] คือบล็อกขนาด 16 ไบต์ที่เริ่มต้นจากข้อมูล [i * 16] สุดท้าย อาจมีขนาดไม่เกิน 16 ไบต์
  3. ดำเนินการ concat(encryptedBlock[0], encryptedBlock[1],...) เพื่อสร้าง ข้อมูลที่เข้ารหัส

  4. สร้าง HMAC-SHA256 โดย

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

    ที่ไหน

    1. K สร้างขึ้นโดย concat(shared_secret, 0 ขนาด 48 ไบต์), the shared_secret มาจากขั้นตอนที่ 4 ใน procedure
    2. opad คือระยะห่างจากขอบด้านนอก 64 ไบต์ซึ่งประกอบด้วยไบต์ซ้ำที่มีค่า 0x5C
    3. ipad คือระยะห่างจากขอบภายใน 64 ไบต์ ซึ่งประกอบด้วยไบต์ซ้ำที่มีค่า 0x36
  5. นำ 8 ไบต์แรกจาก HMAC-SHA256 เป็นคำนำหน้า Data แพ็กเก็ต

เมื่อได้รับคำขอเป็นลายลักษณ์อักษร ผู้ให้บริการจับคู่ด่วนจะดำเนินการต่อไปนี้

  1. ยืนยันความสมบูรณ์ของข้อมูลโดยตรวจสอบ 8 ไบต์แรกของ HMAC-SHA256
  2. ถอดรหัสข้อมูลที่เข้ารหัสโดยใช้ AES-CTR ซึ่งแต่ละบล็อกจะสร้างขึ้นโดยใช้

    clearBlock[i] = encryptedBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
    

    ที่ไหน

    1. encryptedBlock[i] คือบล็อกขนาด 16 ไบต์ที่เริ่มต้นจาก encrypted_data[i * 16] การบล็อกล่าสุดอาจมีขนาดไม่เกิน 16 ไบต์
    2. คีย์ AES สร้างขึ้นหรือระบุจากแฮนด์เชค เช่น
      1. ขั้นตอนการตั้งชื่อที่ 1 มาจาก ECDH และ อีกครั้งสำหรับการจับคู่นี้ คำขอใดๆ ที่เข้ารหัส ด้วยคีย์นี้โดยไม่ต้องเริ่มขั้นตอนใหม่ ถูกปฏิเสธ
      2. ในขั้นตอนการตั้งชื่อที่ 2 ตัวแปรนี้ก็คือคีย์บัญชี
  3. ดำเนินการ concat(clearBlock[0], clearBlock[1],...) เพื่อสร้างข้อมูลดิบ