ขั้นตอนการจับคู่ด่วน
ขั้นตอน
แทนที่จะเรียกใช้ขั้นตอนการเชื่อมโยง BR/EDR หรือ BLE ปกติโดยทันที Seeker จะเปิดใช้การแจ้งเตือนในลักษณะการจับคู่ตามคีย์ก่อน แล้วจึงเขียนข้อมูลในตารางที่ 1.1 ลงในข้อมูลนั้น
เมื่อจัดการคำขอการเขียนจากผู้มองหาการจับคู่ด่วน ผู้ให้บริการจับคู่ด่วนจะดำเนินการต่อไปนี้
- หากมีช่องคีย์สาธารณะอยู่ ให้ทำดังนี้
- หากอุปกรณ์ไม่ได้อยู่ในโหมดการจับคู่ ให้เพิกเฉยต่อการเขียนและการออก
- หรือไม่เช่นนั้น
- ใช้คีย์สาธารณะที่ได้รับ (จุด 64 ไบต์บนเส้นโค้ง secp256r1) คีย์ส่วนตัวป้องกันการปลอมแปลงที่ติดตั้งไว้ล่วงหน้า secp256r1 และอัลกอริทึม Elliptic-Curve Diffie-Hellman เพื่อสร้างคีย์ AES แบบ 256 บิต
- ใช้ SHA-256 เพื่อแฮชคีย์ AES 256 บิต
- ใช้ผลลัพธ์ 128 บิตแรก ซึ่งจะเป็นคีย์ AES การป้องกันการปลอมแปลง ซึ่งจะใช้ในขั้นตอนถัดไป
ใช้ AES-128 เพื่อพยายามถอดรหัสค่า เนื่องจากค่านี้เป็นบล็อก AES แบบ 16 ไบต์เดี่ยว จึงไม่จำเป็นต้องใช้โหมดการเข้ารหัส IV หรือแบบหลายบล็อก
- คีย์ที่ควรใช้ ได้แก่
- หากมีการสร้างคีย์ AES การป้องกันการปลอมแปลงในขั้นตอนที่ 1 ให้ใช้คีย์นั้น
- หรือลองใช้แต่ละคีย์ในรายการคีย์บัญชีที่มีอยู่
- หากคีย์ถอดรหัสค่าสำเร็จ ให้เบรกและไปยังขั้นตอนถัดไป
ระบบจะถอดรหัสค่าสำเร็จหากเอาต์พุตตรงกับรูปแบบในตาราง 1.2.1 หรือตารางที่ 1.2.2 (กล่าวคือ หากมีที่อยู่ BLE ปัจจุบันของผู้ให้บริการจับคู่ด่วนหรือที่อยู่สาธารณะของผู้ให้บริการจับคู่ด่วน)
หมายเหตุ: ที่ท้ายแพ็กเก็ตจะมีเกลือแนบอยู่ เมื่อเป็นไปได้ ควรติดตาม Salt เหล่านี้ และหากผู้ให้บริการได้รับคำขอที่มี Salt ที่ใช้อยู่แล้ว ควรละเว้นคำขอนั้นเพื่อป้องกันการโจมตีซ้ำ
หากการเขียนมีที่อยู่ส่วนตัวของผู้ให้บริการ อีกวิธีในการป้องกันการโจมตีแบบเล่นซ้ำคือเป็นอีกทางเลือกหนึ่งสำหรับการหมุนเวียนที่อยู่ส่วนตัวที่แก้ไขแล้วได้ในครั้งถัดไป เพื่อให้การหมุนเวียนเกิดขึ้นก่อนที่จะมีการยอมรับการเขียนการจับคู่ตามคีย์ถัดไป
- คีย์ที่ควรใช้ ได้แก่
หากไม่มีคีย์ที่สามารถถอดรหัสค่าได้สำเร็จ ให้เพิกเฉยต่อการเขียนและการออก
- นับจำนวนความล้มเหลวเหล่านี้ เมื่อจำนวนความล้มเหลวถึง 10 คำขอใหม่ทั้งหมดจะล้มเหลวทันที รีเซ็ตจำนวนที่ไม่สำเร็จหลังจากผ่านไป 5 นาที หลังจากเปิดเครื่อง หรือหลังจากเปิดเครื่องสำเร็จ
บันทึกคีย์ที่สำเร็จเป็น K ทำเครื่องหมาย K นี้ว่าใช้ได้สำหรับการถอดรหัสพาสคีย์และการเขียนชื่อที่ปรับเปลี่ยนในแบบของคุณที่ได้รับในลิงก์ LE นี้ แต่ไม่ใช่การเขียนอื่นๆ หรือการเขียนในลิงก์อื่นๆ เริ่มตัวจับเวลาเพื่อทิ้ง K หลังจากผ่านไป 10 วินาทีหากยังไม่ได้เริ่มการจับคู่ และทิ้ง K หาก ลิงก์ LE นี้ยกเลิกการเชื่อมต่อ
สร้างคำตอบที่เป็นข้อมูลดิบ 16 ไบต์ที่แสดงในตารางที่ 1.3 โดยการเชื่อมโยงประเภทและที่อยู่ BR/EDR ของผู้ให้บริการ จากนั้นเติมบล็อกส่วนที่เหลือของแพ็กเก็ตด้วยบล็อกไบต์แบบสุ่ม (เกลือ)
เข้ารหัสการตอบกลับแบบ Raw ด้วย K เพื่อสร้างคำตอบที่เข้ารหัสแบบ 16 ไบต์ที่แสดงในตารางที่ 1.4 ส่งข้อมูลนี้ผ่านการแจ้งเตือนเกี่ยวกับลักษณะการจับคู่ตามคีย์
อ่านแฟล็กคำขอ
- หากไบต์การแจ้งของคำขอมีการตั้งค่าบิต 2 เป็น 1 โปรดแจ้งลักษณะของข้อมูลเพิ่มเติมด้วยชื่อที่ปรับเปลี่ยนในแบบของคุณ
- หากไบต์ของแฟล็กคำขอมีการตั้งค่าบิต 1 เป็น 1
- ซึ่งหมายความว่า Seeker ขอให้ผู้ให้บริการเริ่มต้นการผูกกับที่อยู่ BR/EDR ของ Seeker ซึ่งมีหน่วยเป็นไบต์ 8-13
- ส่งคำขอจับคู่ไปยังที่อยู่ BR/EDR ของ Seeker คำขอจับคู่ต้องมีลักษณะตามที่อธิบายไว้ด้านล่าง (ขั้นตอน "ระหว่างการจับคู่")
- เหตุผลที่ต้องใช้: การให้ผู้ให้บริการเป็นผู้เริ่มต้นแก้ไขปัญหาในอุปกรณ์บางอย่าง
- หากไบต์ของแฟล็กคำขอมีการตั้งค่าบิต 1 เป็น 0
- รอประมาณ 10 วินาทีสำหรับคำขอจับคู่ ถ้าไม่มีผู้รับ ให้ออก
- โปรดทราบว่านี่อาจเป็นคำขอ BR/EDR จากที่อยู่อื่น (ที่อยู่สาธารณะของผู้ร้องขอ แทนที่จะเป็นที่อยู่ส่วนตัวที่แปลงได้) เราจะยืนยันอีกครั้งระหว่างการจับคู่ว่าอุปกรณ์ที่ส่งคำขอมี K แล้ว
ระหว่างการจับคู่
- เมื่อได้รับแพ็กเกตคำขอการจับคู่/การตอบกลับจาก Seeker แล้ว หากความสามารถของอุปกรณ์ในคำขอเป็น NoInput/Noผลลัพธ์ ให้สิ้นสุดการจับคู่ เพื่อหลีกเลี่ยงการใช้วิธีการจับคู่ Just Works
- สำหรับแพ็กเกตคำขอการจับคู่/การตอบกลับที่ส่งโดยผู้ให้บริการ ให้ตั้งค่าช่องความสามารถของอุปกรณ์เป็น Display/YesNo และตั้งค่าข้อกำหนดการตรวจสอบสิทธิ์เป็นต้องใช้การป้องกัน MITM ซึ่งจะทริกเกอร์วิธีการจับคู่แบบเปรียบเทียบตัวเลข (หรือที่เรียกว่าการยืนยันพาสคีย์ใน Android) เราอาศัยข้อมูลนี้ในการยืนยันว่าอุปกรณ์ที่ส่งคำขอเป็นอุปกรณ์ ที่ต้องการจับคู่ด่วนจริงๆ และไม่มีคนกลาง ดูตัวอย่าง
- เหตุผลที่ต้องทำเช่นนี้: วิธีจับคู่แบบนอกขอบเขตจะเหมาะสมกว่า แต่แพลตฟอร์มจะไม่แสดงวิธีการดังกล่าวใน Android เวอร์ชันที่ต้องการทั้งหมด
เมื่อต้องยืนยันพาสคีย์ ให้รอประมาณ 10 วินาทีเพื่อให้การเขียนเป็นลักษณะของพาสคีย์
- โดยปกติแล้ว เมื่อใช้วิธีการจับคู่นี้ ผู้ใช้จะยืนยันว่าพาสคีย์ที่แสดงบนหน้าจอของอุปกรณ์แต่ละเครื่องเหมือนกัน แต่เราจะโอนอุปกรณ์ผ่าน BLE โดยเข้ารหัสด้วยคีย์ที่แชร์ล่วงหน้าที่เชื่อถือได้แทนสำหรับการจับคู่นี้เท่านั้น
- โปรดทราบว่าคุณไม่ควรใช้วิธีนี้กับอุปกรณ์ที่มีหน้าจอหรือแป้นพิมพ์เนื่องจากอาจเสี่ยงต่อการปกป้องของ MITM เล็กน้อย ปัจจุบันฟีเจอร์จับคู่ด่วนยังไม่รองรับอุปกรณ์ประเภทดังกล่าวด้วยเหตุผลดังกล่าว
- หากตัวจับเวลา 10 วินาทีหมดอายุโดยไม่ได้เขียนพาสคีย์ ให้ทิ้ง K
เมื่อเขียนค่าเป็นลักษณะของพาสคีย์ ข้อมูลนี้จะเป็น บล็อกพาสคีย์ที่เข้ารหัส ถอดรหัสด้วย K เพื่อสร้างบล็อกพาสคีย์ดิบ โดยแสดงรูปแบบในลักษณะเฉพาะ: พาสคีย์ > ตารางที่ 2.2 - (ประเภท = พาสคีย์ของผู้ค้นหา)
หากถอดรหัสไม่สำเร็จ ให้ละเว้นการเขียนและทิ้ง K
มิเช่นนั้น Raw Passkey Block จะมีพาสคีย์ 6 หลัก PSeeker ซึ่งเป็นพาสคีย์ที่ Seeker คาดหวัง
เปรียบเทียบ PSeeker กับ PProvider พาสคีย์ที่เรากำหนด
- หากค่าเท่ากัน ให้ตอบว่า "yes" เพื่อทำการยืนยัน
- หรือไม่เช่นนั้น ให้ตอบกลับอีเมลว่า "ไม่" ซึ่งจะทำให้จับคู่ไม่สำเร็จ
สร้างบล็อกพาสคีย์ Raw อื่นที่มีรูปแบบแสดงในลักษณะเฉพาะ: พาสคีย์ > ตารางที่ 2.2 ซึ่งมีพาสคีย์ที่เราคาดหวังไว้เอง ซึ่งก็คือ > ไม่ว่าจะจับคู่ไม่สำเร็จหรือไม่
- ตรวจสอบว่าบล็อกเป็นประเภทที่ถูกต้อง (พาสคีย์ของผู้ให้บริการ โปรดดูตาราง) หมายเหตุ: อย่าใช้เกลือจาก Passkey Block ที่ได้รับจาก Seeker มาใช้ซ้ำ สร้างค่าสุ่มใหม่
เข้ารหัส Raw Passkey Block ด้วย K แล้วส่ง "บล็อกพาสคีย์ที่เข้ารหัส" ที่ได้ผ่านทางการแจ้งเตือนเกี่ยวกับลักษณะพาสคีย์
หากผู้แสวงหาได้รับและถอดรหัสพาสคีย์ P ที่ถูกต้อง ผู้ค้นหาจะตอบกลับการยืนยันว่า "ใช่" ด้วย และการจับคู่จะสำเร็จ
- หากจับคู่สำเร็จ ให้ทำเครื่องหมายว่า K ใช้งานได้สำหรับการถอดรหัสการเขียนคีย์บัญชีในลิงก์ LE นี้ แต่ใช้ไม่ได้กับการเขียนพาสคีย์ที่ตามมาหรือการเขียนในลิงก์อื่นๆ เริ่มตัวจับเวลาเพื่อทิ้ง K หลังจากผ่านไป 10 วินาที นอกจากนี้ ให้ทิ้ง K หลังจากพยายามเขียนคีย์บัญชี และในขั้นตอนที่ 4 หากลิงก์ LE ยกเลิกการเชื่อมต่อ
- หากจับคู่ไม่สำเร็จ ให้ทิ้ง K
เปลี่ยนช่องความสามารถของอุปกรณ์กลับไปเป็นความสามารถ I/O เริ่มต้นและข้อกำหนดในการตรวจสอบสิทธิ์เป็นค่าเริ่มต้น เพื่อให้การจับคู่ใหม่ดำเนินการต่อตามที่คาดไว้
โปรดทราบว่าสำหรับผู้ให้บริการที่ไม่ต้องใช้การเชื่อมโยง Seeker จะไม่ส่งคำขอจับคู่ไปยังผู้ให้บริการ ซึ่งเป็นขั้นตอนที่ 8 ถึงขั้นตอนที่ 17 จะถูกข้ามไป นอกจากนี้ "K" ยังใช้ในลักษณะสำคัญของบัญชี