ขั้นตอนการจับคู่ด่วน

ขั้นตอน

แทนที่จะเรียกใช้ขั้นตอนการเชื่อมโยง BR/EDR หรือ BLE ปกติโดยทันที Seeker จะเปิดใช้การแจ้งเตือนในลักษณะการจับคู่ตามคีย์ก่อน แล้วจึงเขียนข้อมูลในตารางที่ 1.1 ลงในข้อมูลนั้น

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

  1. หากมีช่องคีย์สาธารณะอยู่ ให้ทำดังนี้
    1. หากอุปกรณ์ไม่ได้อยู่ในโหมดการจับคู่ ให้เพิกเฉยต่อการเขียนและการออก
    2. หรือไม่เช่นนั้น
      1. ใช้คีย์สาธารณะที่ได้รับ (จุด 64 ไบต์บนเส้นโค้ง secp256r1) คีย์ส่วนตัวป้องกันการปลอมแปลงที่ติดตั้งไว้ล่วงหน้า secp256r1 และอัลกอริทึม Elliptic-Curve Diffie-Hellman เพื่อสร้างคีย์ AES แบบ 256 บิต
      2. ใช้ SHA-256 เพื่อแฮชคีย์ AES 256 บิต
      3. ใช้ผลลัพธ์ 128 บิตแรก ซึ่งจะเป็นคีย์ AES การป้องกันการปลอมแปลง ซึ่งจะใช้ในขั้นตอนถัดไป
  2. ใช้ AES-128 เพื่อพยายามถอดรหัสค่า เนื่องจากค่านี้เป็นบล็อก AES แบบ 16 ไบต์เดี่ยว จึงไม่จำเป็นต้องใช้โหมดการเข้ารหัส IV หรือแบบหลายบล็อก

    1. คีย์ที่ควรใช้ ได้แก่
      1. หากมีการสร้างคีย์ AES การป้องกันการปลอมแปลงในขั้นตอนที่ 1 ให้ใช้คีย์นั้น
      2. หรือลองใช้แต่ละคีย์ในรายการคีย์บัญชีที่มีอยู่
    2. หากคีย์ถอดรหัสค่าสำเร็จ ให้เบรกและไปยังขั้นตอนถัดไป
    3. ระบบจะถอดรหัสค่าสำเร็จหากเอาต์พุตตรงกับรูปแบบในตาราง 1.2.1 หรือตารางที่ 1.2.2 (กล่าวคือ หากมีที่อยู่ BLE ปัจจุบันของผู้ให้บริการจับคู่ด่วนหรือที่อยู่สาธารณะของผู้ให้บริการจับคู่ด่วน)

      หมายเหตุ: ที่ท้ายแพ็กเก็ตจะมีเกลือแนบอยู่ เมื่อเป็นไปได้ ควรติดตาม Salt เหล่านี้ และหากผู้ให้บริการได้รับคำขอที่มี Salt ที่ใช้อยู่แล้ว ควรละเว้นคำขอนั้นเพื่อป้องกันการโจมตีซ้ำ

    4. หากการเขียนมีที่อยู่ส่วนตัวของผู้ให้บริการ อีกวิธีในการป้องกันการโจมตีแบบเล่นซ้ำคือเป็นอีกทางเลือกหนึ่งสำหรับการหมุนเวียนที่อยู่ส่วนตัวที่แก้ไขแล้วได้ในครั้งถัดไป เพื่อให้การหมุนเวียนเกิดขึ้นก่อนที่จะมีการยอมรับการเขียนการจับคู่ตามคีย์ถัดไป

  3. หากไม่มีคีย์ที่สามารถถอดรหัสค่าได้สำเร็จ ให้เพิกเฉยต่อการเขียนและการออก

    1. นับจำนวนความล้มเหลวเหล่านี้ เมื่อจำนวนความล้มเหลวถึง 10 คำขอใหม่ทั้งหมดจะล้มเหลวทันที รีเซ็ตจำนวนที่ไม่สำเร็จหลังจากผ่านไป 5 นาที หลังจากเปิดเครื่อง หรือหลังจากเปิดเครื่องสำเร็จ
  4. บันทึกคีย์ที่สำเร็จเป็น K ทำเครื่องหมาย K นี้ว่าใช้ได้สำหรับการถอดรหัสพาสคีย์และการเขียนชื่อที่ปรับเปลี่ยนในแบบของคุณที่ได้รับในลิงก์ LE นี้ แต่ไม่ใช่การเขียนอื่นๆ หรือการเขียนในลิงก์อื่นๆ เริ่มตัวจับเวลาเพื่อทิ้ง K หลังจากผ่านไป 10 วินาทีหากยังไม่ได้เริ่มการจับคู่ และทิ้ง K หาก ลิงก์ LE นี้ยกเลิกการเชื่อมต่อ

  5. สร้างคำตอบที่เป็นข้อมูลดิบ 16 ไบต์ที่แสดงในตารางที่ 1.3 โดยการเชื่อมโยงประเภทและที่อยู่ BR/EDR ของผู้ให้บริการ จากนั้นเติมบล็อกส่วนที่เหลือของแพ็กเก็ตด้วยบล็อกไบต์แบบสุ่ม (เกลือ)

  6. เข้ารหัสการตอบกลับแบบ Raw ด้วย K เพื่อสร้างคำตอบที่เข้ารหัสแบบ 16 ไบต์ที่แสดงในตารางที่ 1.4 ส่งข้อมูลนี้ผ่านการแจ้งเตือนเกี่ยวกับลักษณะการจับคู่ตามคีย์

  7. อ่านแฟล็กคำขอ

    1. หากไบต์การแจ้งของคำขอมีการตั้งค่าบิต 2 เป็น 1 โปรดแจ้งลักษณะของข้อมูลเพิ่มเติมด้วยชื่อที่ปรับเปลี่ยนในแบบของคุณ
    2. หากไบต์ของแฟล็กคำขอมีการตั้งค่าบิต 1 เป็น 1
      1. ซึ่งหมายความว่า Seeker ขอให้ผู้ให้บริการเริ่มต้นการผูกกับที่อยู่ BR/EDR ของ Seeker ซึ่งมีหน่วยเป็นไบต์ 8-13
      2. ส่งคำขอจับคู่ไปยังที่อยู่ BR/EDR ของ Seeker คำขอจับคู่ต้องมีลักษณะตามที่อธิบายไว้ด้านล่าง (ขั้นตอน "ระหว่างการจับคู่")
      3. เหตุผลที่ต้องใช้: การให้ผู้ให้บริการเป็นผู้เริ่มต้นแก้ไขปัญหาในอุปกรณ์บางอย่าง
    3. หากไบต์ของแฟล็กคำขอมีการตั้งค่าบิต 1 เป็น 0
      1. รอประมาณ 10 วินาทีสำหรับคำขอจับคู่ ถ้าไม่มีผู้รับ ให้ออก
      2. โปรดทราบว่านี่อาจเป็นคำขอ BR/EDR จากที่อยู่อื่น (ที่อยู่สาธารณะของผู้ร้องขอ แทนที่จะเป็นที่อยู่ส่วนตัวที่แปลงได้) เราจะยืนยันอีกครั้งระหว่างการจับคู่ว่าอุปกรณ์ที่ส่งคำขอมี K แล้ว
  8. ระหว่างการจับคู่

    1. เมื่อได้รับแพ็กเกตคำขอการจับคู่/การตอบกลับจาก Seeker แล้ว หากความสามารถของอุปกรณ์ในคำขอเป็น NoInput/Noผลลัพธ์ ให้สิ้นสุดการจับคู่ เพื่อหลีกเลี่ยงการใช้วิธีการจับคู่ Just Works
    2. สำหรับแพ็กเกตคำขอการจับคู่/การตอบกลับที่ส่งโดยผู้ให้บริการ ให้ตั้งค่าช่องความสามารถของอุปกรณ์เป็น Display/YesNo และตั้งค่าข้อกำหนดการตรวจสอบสิทธิ์เป็นต้องใช้การป้องกัน MITM ซึ่งจะทริกเกอร์วิธีการจับคู่แบบเปรียบเทียบตัวเลข (หรือที่เรียกว่าการยืนยันพาสคีย์ใน Android) เราอาศัยข้อมูลนี้ในการยืนยันว่าอุปกรณ์ที่ส่งคำขอเป็นอุปกรณ์ ที่ต้องการจับคู่ด่วนจริงๆ และไม่มีคนกลาง ดูตัวอย่าง
    3. เหตุผลที่ต้องทำเช่นนี้: วิธีจับคู่แบบนอกขอบเขตจะเหมาะสมกว่า แต่แพลตฟอร์มจะไม่แสดงวิธีการดังกล่าวใน Android เวอร์ชันที่ต้องการทั้งหมด
  9. เมื่อต้องยืนยันพาสคีย์ ให้รอประมาณ 10 วินาทีเพื่อให้การเขียนเป็นลักษณะของพาสคีย์

    1. โดยปกติแล้ว เมื่อใช้วิธีการจับคู่นี้ ผู้ใช้จะยืนยันว่าพาสคีย์ที่แสดงบนหน้าจอของอุปกรณ์แต่ละเครื่องเหมือนกัน แต่เราจะโอนอุปกรณ์ผ่าน BLE โดยเข้ารหัสด้วยคีย์ที่แชร์ล่วงหน้าที่เชื่อถือได้แทนสำหรับการจับคู่นี้เท่านั้น
    2. โปรดทราบว่าคุณไม่ควรใช้วิธีนี้กับอุปกรณ์ที่มีหน้าจอหรือแป้นพิมพ์เนื่องจากอาจเสี่ยงต่อการปกป้องของ MITM เล็กน้อย ปัจจุบันฟีเจอร์จับคู่ด่วนยังไม่รองรับอุปกรณ์ประเภทดังกล่าวด้วยเหตุผลดังกล่าว
    3. หากตัวจับเวลา 10 วินาทีหมดอายุโดยไม่ได้เขียนพาสคีย์ ให้ทิ้ง K
  10. เมื่อเขียนค่าเป็นลักษณะของพาสคีย์ ข้อมูลนี้จะเป็น บล็อกพาสคีย์ที่เข้ารหัส ถอดรหัสด้วย K เพื่อสร้างบล็อกพาสคีย์ดิบ โดยแสดงรูปแบบในลักษณะเฉพาะ: พาสคีย์ > ตารางที่ 2.2 - (ประเภท = พาสคีย์ของผู้ค้นหา)

  11. หากถอดรหัสไม่สำเร็จ ให้ละเว้นการเขียนและทิ้ง K

  12. มิเช่นนั้น Raw Passkey Block จะมีพาสคีย์ 6 หลัก PSeeker ซึ่งเป็นพาสคีย์ที่ Seeker คาดหวัง

  13. เปรียบเทียบ PSeeker กับ PProvider พาสคีย์ที่เรากำหนด

    1. หากค่าเท่ากัน ให้ตอบว่า "yes" เพื่อทำการยืนยัน
    2. หรือไม่เช่นนั้น ให้ตอบกลับอีเมลว่า "ไม่" ซึ่งจะทำให้จับคู่ไม่สำเร็จ
  14. สร้างบล็อกพาสคีย์ Raw อื่นที่มีรูปแบบแสดงในลักษณะเฉพาะ: พาสคีย์ > ตารางที่ 2.2 ซึ่งมีพาสคีย์ที่เราคาดหวังไว้เอง ซึ่งก็คือ > ไม่ว่าจะจับคู่ไม่สำเร็จหรือไม่

    1. ตรวจสอบว่าบล็อกเป็นประเภทที่ถูกต้อง (พาสคีย์ของผู้ให้บริการ โปรดดูตาราง) หมายเหตุ: อย่าใช้เกลือจาก Passkey Block ที่ได้รับจาก Seeker มาใช้ซ้ำ สร้างค่าสุ่มใหม่
  15. เข้ารหัส Raw Passkey Block ด้วย K แล้วส่ง "บล็อกพาสคีย์ที่เข้ารหัส" ที่ได้ผ่านทางการแจ้งเตือนเกี่ยวกับลักษณะพาสคีย์

  16. หากผู้แสวงหาได้รับและถอดรหัสพาสคีย์ P ที่ถูกต้อง ผู้ค้นหาจะตอบกลับการยืนยันว่า "ใช่" ด้วย และการจับคู่จะสำเร็จ

    1. หากจับคู่สำเร็จ ให้ทำเครื่องหมายว่า K ใช้งานได้สำหรับการถอดรหัสการเขียนคีย์บัญชีในลิงก์ LE นี้ แต่ใช้ไม่ได้กับการเขียนพาสคีย์ที่ตามมาหรือการเขียนในลิงก์อื่นๆ เริ่มตัวจับเวลาเพื่อทิ้ง K หลังจากผ่านไป 10 วินาที นอกจากนี้ ให้ทิ้ง K หลังจากพยายามเขียนคีย์บัญชี และในขั้นตอนที่ 4 หากลิงก์ LE ยกเลิกการเชื่อมต่อ
    2. หากจับคู่ไม่สำเร็จ ให้ทิ้ง K
  17. เปลี่ยนช่องความสามารถของอุปกรณ์กลับไปเป็นความสามารถ I/O เริ่มต้นและข้อกำหนดในการตรวจสอบสิทธิ์เป็นค่าเริ่มต้น เพื่อให้การจับคู่ใหม่ดำเนินการต่อตามที่คาดไว้

โปรดทราบว่าสำหรับผู้ให้บริการที่ไม่ต้องใช้การเชื่อมโยง Seeker จะไม่ส่งคำขอจับคู่ไปยังผู้ให้บริการ ซึ่งเป็นขั้นตอนที่ 8 ถึงขั้นตอนที่ 17 จะถูกข้ามไป นอกจากนี้ "K" ยังใช้ในลักษณะสำคัญของบัญชี

ตัวอย่าง
ตัวอย่างที่ 1: พยายามจับคู่สำเร็จ (ไม่มีคนกลาง)
ตัวอย่างที่ 2: พยายามจับคู่ไม่สำเร็จโดยใช้ "คนกลาง"