ลักษณะเฉพาะ
บริการจับคู่ด่วน
ผู้ให้บริการจับคู่ด่วนจะมีบริการ 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 |
ธง
|
แตกต่างกัน | บังคับ |
2-7 คน | uint48 |
หรือ:
|
แตกต่างกัน | บังคับ |
8-13 ปี | uint48 |
ที่อยู่ BR/EDR ของผู้ขอ | แตกต่างกัน | แสดงเมื่อตั้งค่าแฟล็กบิต 1 หรือ 3 ไว้เท่านั้น |
n - 15 | ค่าแบบสุ่ม (เกลือ) | แตกต่างกัน | บังคับ |
ตาราง 1.2.1: คำขอข้อมูลดิบ (ประเภท 0x00) ถอดรหัสจากไฟล์ที่เข้ารหัส คำขอใน ตาราง 1.1
อ็อกเท็ต | ประเภทข้อมูล | คำอธิบาย | ค่า | จำเป็นไหม |
---|---|---|---|---|
0 | uint8 |
ประเภทข้อความ | 0x10 = คำขอดำเนินการ |
บังคับ |
1 | uint8 |
ธง
|
แตกต่างกัน | บังคับ |
2-7 คน | uint48 |
หรือ:
|
แตกต่างกัน | บังคับ |
8 | uint8 |
กลุ่มข้อความ | แตกต่างกัน | บังคับหากตั้งค่าแฟล็กบิต 0 ไว้ |
9 | uint8 |
รหัสข้อความ | แตกต่างกัน | บังคับหากตั้งค่าแฟล็กบิต 0 ไว้ |
10 | uint8 |
ขึ้นอยู่กับแฟล็ก:
|
แตกต่างกัน | บังคับหากตั้งค่าแฟล็กบิต 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 |
ประเภทข้อความ | ข้อใดข้อหนึ่ง:
|
1 - 3 | unit32 |
พาสคีย์ 6 หลัก | แตกต่างกัน |
4 - 15 ปี | ค่าแบบสุ่ม (เกลือ) | แตกต่างกัน |
ตาราง 2.2: การบล็อกพาสคีย์ดิบ ตาราง 2.1 เวอร์ชันที่ถอดรหัสแล้ว
ลักษณะเฉพาะ: คีย์บัญชี
หลังจากจับคู่แล้ว ผู้ค้นหาการจับคู่ด่วนจะเขียนคีย์บัญชีไปยังการจับคู่ด่วน ผู้ให้บริการ
อ็อกเท็ต | ประเภทข้อมูล | คำอธิบาย | ค่า |
---|---|---|---|
0-15 | uint128 |
คีย์บัญชี (เข้ารหัส) | แตกต่างกัน |
เมื่อได้รับคำขอเป็นลายลักษณ์อักษร ผู้ให้บริการจับคู่ด่วนจะดำเนินการต่อไปนี้
- ถอดรหัสคีย์บัญชีโดยใช้ข้อมูลลับที่ใช้ร่วมกันที่สร้างขึ้นจากขั้นตอนที่ 4 ใน
procedure
- สำหรับผู้ให้บริการที่ต้องมีการผูกมัด (ทั่วไป)
- ก่อนถอดรหัส ให้ตรวจสอบว่ามีการใช้ข้อมูลลับที่ใช้ร่วมกันเพื่อถอดรหัส คำขอพาสคีย์จากขั้นตอนที่ 12 หากไม่ผ่านขั้นตอนนี้ โดยใช้ ข้อมูลลับ ไม่ต้องสนใจการเขียนนี้แล้วออก
- ในขั้นนี้ ระบบจะไม่ใช้ข้อมูลลับ (K ในกระบวนการ) อีกครั้งสำหรับการจับคู่นี้ คำขอทั้งหมดที่เข้ารหัสด้วยคีย์นี้ โดยไม่ต้องรีสตาร์ทกระบวนการดังกล่าว
- สำหรับผู้ให้บริการที่ต้องมีการผูกมัด (ทั่วไป)
- ตรวจสอบว่าค่าที่ถอดรหัสนั้นขึ้นต้นด้วย
0x04
หากไม่ใช่ ให้เพิกเฉย การเขียนและปิดไป - ตรวจสอบว่ารายการคีย์บัญชีที่มีอยู่มีพื้นที่ว่างสำหรับ
- หากไม่ ให้ลบค่าที่ใช้งานล่าสุดออกจากรายการ
- เพิ่มค่าใหม่ลงในรายการ
คีย์บัญชีในรายการจะใช้ในระหว่างการจับคู่คีย์
ลักษณะเฉพาะ: การแก้ไขเฟิร์มแวร์
ลักษณะเฉพาะนี้ช่วยให้ผู้ค้นหาอ่านการแก้ไขเฟิร์มแวร์ของ ระบุผู้ให้บริการตามต้องการ ซึ่งควรแสดงข้อมูลต่อไปนี้เสมอ
อ็อกเท็ต | ประเภทข้อมูล | คำอธิบาย | ค่า |
---|---|---|---|
0 - var | utf8s |
รหัสการแก้ไขเฟิร์มแวร์ | แตกต่างกัน |
โดยควรห่อหุ้มด้วยสตริง utf8 เดียวแม้ว่าจะมีมากกว่า 1 สตริง เฟิร์มแวร์ (เช่น เฟิร์มแวร์ 3 รายการสำหรับหูฟังข้างซ้าย หูฟังข้างขวา และเคส) จากผู้ให้บริการ ผู้ให้บริการยังส่งคืนสตริงที่เฉพาะเจาะจงสําหรับกรณีพิเศษได้ด้วย ดังนี้
status-updating: กรณีที่ผู้ให้บริการกำลังอัปเดตเป็นเฟิร์มแวร์ใหม่ หรือผู้ให้บริการอาจส่งคืนเวอร์ชันของเฟิร์มแวร์ที่ทดลองใช้แล้ว
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:
|
ตาราง 3.2: ข้อมูลดิบ ถอดรหัสจากข้อมูลที่เข้ารหัสใน ตาราง 3.1
เมื่อมีการขอให้แจ้งเตือน (เช่น ขอชื่อที่ปรับเปลี่ยนในแบบของตนผ่านบิต 2 นิ้ว ตาราง 1.2.1) ผู้ให้บริการจับคู่ด่วนจะต้องดำเนินการดังนี้
- สร้างแบบสุ่มจำนวน 8 ไบต์แบบเข้ารหัสลับสำหรับ Nonce
เข้ารหัสข้อมูลโดยใช้ AES-CTR ซึ่งจะสร้างบล็อกขนาด 16 ไบต์แต่ละบล็อกโดยใช้
encryptedBlock[i] = clearBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
ที่ไหน
- คีย์ AES เป็นข้อมูลลับที่ใช้ร่วมกันจากขั้นตอนที่ 4 ในขั้นตอน
- clearBlock[i] คือบล็อกขนาด 16 ไบต์ที่เริ่มต้นจากข้อมูล [i * 16] สุดท้าย อาจมีขนาดไม่เกิน 16 ไบต์
ดำเนินการ concat(encryptedBlock[0], encryptedBlock[1],...) เพื่อสร้าง ข้อมูลที่เข้ารหัส
สร้าง HMAC-SHA256 โดย
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, encrypted_data)))))
ที่ไหน
- K สร้างขึ้นโดย concat(shared_secret, 0 ขนาด 48 ไบต์), the shared_secret มาจากขั้นตอนที่ 4 ใน procedure
- opad คือระยะห่างจากขอบด้านนอก 64 ไบต์ซึ่งประกอบด้วยไบต์ซ้ำที่มีค่า
0x5C
- ipad คือระยะห่างจากขอบภายใน 64 ไบต์ ซึ่งประกอบด้วยไบต์ซ้ำที่มีค่า
0x36
นำ 8 ไบต์แรกจาก HMAC-SHA256 เป็นคำนำหน้า Data แพ็กเก็ต
เมื่อได้รับคำขอเป็นลายลักษณ์อักษร ผู้ให้บริการจับคู่ด่วนจะดำเนินการต่อไปนี้
- ยืนยันความสมบูรณ์ของข้อมูลโดยตรวจสอบ 8 ไบต์แรกของ HMAC-SHA256
ถอดรหัสข้อมูลที่เข้ารหัสโดยใช้ AES-CTR ซึ่งแต่ละบล็อกจะสร้างขึ้นโดยใช้
clearBlock[i] = encryptedBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
ที่ไหน
- encryptedBlock[i] คือบล็อกขนาด 16 ไบต์ที่เริ่มต้นจาก encrypted_data[i * 16] การบล็อกล่าสุดอาจมีขนาดไม่เกิน 16 ไบต์
- คีย์ AES สร้างขึ้นหรือระบุจากแฮนด์เชค เช่น
- ขั้นตอนการตั้งชื่อที่ 1 มาจาก ECDH และ อีกครั้งสำหรับการจับคู่นี้ คำขอใดๆ ที่เข้ารหัส ด้วยคีย์นี้โดยไม่ต้องเริ่มขั้นตอนใหม่ ถูกปฏิเสธ
- ในขั้นตอนการตั้งชื่อที่ 2 ตัวแปรนี้ก็คือคีย์บัญชี
ดำเนินการ concat(clearBlock[0], clearBlock[1],...) เพื่อสร้างข้อมูลดิบ