silabs ห้องปฏิบัติการความปลอดภัยอุปกรณ์ BLE ที่ปลอดภัยในไตรมาส 21/2

คู่มือห้องปฏิบัติการความปลอดภัย BLE

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

การเริ่มต้น

บลูทูธเอสampแอปพลิเคชันที่คุณจะสร้างขึ้นนั้นมีวัตถุประสงค์เพื่อใช้กับ bootloader หากคุณกำลังทำงานกับ EFR32MG21B ใหม่ล่าสุด จะไม่มีบูทโหลดเดอร์ คุณสามารถค้นหา Bootloader ที่สร้างไว้ล่วงหน้าได้ในแพลตฟอร์ม\bootloader\sample-apps\bootloader-storage-internalsingle\efr32mg21a010f1024im32-brd4181a โฟลเดอร์ของ SDK ของคุณ

  1. เริ่มต้นด้วย soc-empty sampเลอแอป นี้สampแอป le ถูกใช้เป็นเทมเพลตและเป็นจุดเริ่มต้นที่ดีสำหรับแอปพลิเคชัน BLE ใดๆ
    1. เปิดตัวช่วยสร้างโครงการ Silicon Labs จาก Simplicity Studio File เมนู -> ใหม่
    2. เลือก BRD4181C และคลิกปุ่ม 'ถัดไป'
    3. คลิกช่องทำเครื่องหมาย 'บลูทูธ (9)' ใต้ประเภทเทคโนโลยี
    4. ไฮไลต์ 'บลูทูธ – SoC ว่างเปล่า' จากนั้นคลิกถัดไป
    5. คลิกปุ่ม 'เสร็จสิ้น'
  2. ตอนนี้คุณสามารถเพิ่มคุณลักษณะบางอย่างเพื่อดูว่าคุณลักษณะที่ได้รับการป้องกันและไม่ได้รับการป้องกันได้รับการปฏิบัติที่แตกต่างกันอย่างไร
    1. เปิด slcp ของโครงการ file โดยดับเบิลคลิกในหน้าต่าง Project Explorer
    2. ไฮไลต์แท็บ 'ส่วนประกอบซอฟต์แวร์' และเปิดเครื่องมือกำหนดค่า GATT ดังที่แสดงด้านล่าง: และใช้เครื่องมือนำเข้าที่แสดงด้านล่างเพื่อนำเข้า gatt_configuration.btconf file จากโฟลเดอร์เซิร์ฟเวอร์ในเอกสารที่ให้มาฐานข้อมูล GATT มีบริการที่กำหนดเองที่เรียกว่า 'การฝึกอบรม' โดยมีข้อมูลบางส่วนที่ได้รับการปกป้องและบางส่วนไม่ได้รับการคุ้มครอง สิ่งนี้ทำให้คุณสามารถเปรียบเทียบสิ่งที่เกิดขึ้นเมื่อพยายามเข้าถึงคุณลักษณะที่ได้รับการป้องกันกับคุณลักษณะที่ไม่มีการป้องกัน นี่เป็นวิธีที่รวดเร็วในการสร้างอุปกรณ์ที่มีการรักษาความปลอดภัยขั้นพื้นฐาน
  3. เราจะใช้พอร์ตอนุกรมเพื่อพิมพ์ไปยังคอนโซลใน Simplicity Studio เพื่อติดตามสิ่งที่เกิดขึ้นในแอปพลิเคชัน วิธีที่ง่ายที่สุดในการค้นหาส่วนประกอบเหล่านี้คือการค้นหาในกล่องโต้ตอบส่วนประกอบซอฟต์แวร์ดังที่แสดง:
      1. ติดตั้งส่วนประกอบ IO Stream USART
      2. ติดตั้งคอมโพเนนต์ IO Stream Retarget STDIO
      3. ติดตั้งส่วนประกอบ I/O มาตรฐาน
      4. ติดตั้งคอมโพเนนต์บันทึก
      5. เปิดส่วนประกอบการควบคุมบอร์ดและเปิด 'เปิดใช้งาน Virtual COM UART'
      6. คลิกขวาที่อะแดปเตอร์ในแผง 'Debug adapters' และเลือก 'Launch Console' เลือกแท็บ 'อนุกรม 1' และวางเคอร์เซอร์ในช่องป้อนข้อความของหน้าต่างคอนโซล แล้วกด Enter เพื่อปลุกคอนโซล
  4. สร้างตัวแปรท้องถิ่นใน sl_bt_on_event() ซึ่งพบใน app.c เพื่อบันทึกหมายเลขอ้างอิงการเชื่อมต่อ ตัวแปรจะต้องคงที่เนื่องจากฟังก์ชันนี้ถูกเรียกทุกครั้งที่มีการเพิ่มเหตุการณ์โดยสแต็กและเราต้องการให้ค่าคงอยู่ หมายเลขอ้างอิงการเชื่อมต่อจะถูกใช้ในภายหลังส่วนของห้องปฏิบัติการ
  5. แทรกคำสั่ง app_log() สำหรับกิจกรรมเพื่อดูว่าเราเชื่อมต่อกันเมื่อใด โหมดความปลอดภัย ฯลฯ
      1. รวมส่วนหัว app_log.h file
      2. sl_bt_evt_connection_opened – พิมพ์หมายเลขอ้างอิงพันธบัตรและบันทึกหมายเลขอ้างอิงการเชื่อมต่อ หากหมายเลขอ้างอิงบอนด์เป็น 0xFF แสดงว่าไม่มีพันธะระหว่างอุปกรณ์ที่เชื่อมต่ออยู่ แก้ไขตัวจัดการเหตุการณ์ที่มีอยู่เพื่อให้มีลักษณะดังนี้:
      3. sl_bt_evt_connection_parameters - โหมดความปลอดภัย การทำเช่นนี้เพื่อให้คุณเห็นว่าโหมดความปลอดภัยเปลี่ยนแปลงเมื่อใด มีความแตกต่างในการกำหนดหมายเลขของโหมดความปลอดภัยโดยที่โหมดความปลอดภัย 1 แจกแจงด้วยค่า 0 เป็นต้น เพิ่มตัวจัดการเหตุการณ์ต่อไปนี้ให้กับแอปพลิเคชันของคุณ:
      4. sl_bt_evt_connection_closed_id. ตัวจัดการเหตุการณ์นี้ได้รับการแก้ไขเพื่อปรับปรุงหมายเลขอ้างอิงการเชื่อมต่อ ค่า 0xFF ใช้เพื่อระบุว่าไม่มีการเชื่อมต่อที่ใช้งานอยู่ คำสั่ง app_log() ใช้เพื่อพิมพ์สาเหตุของการเชื่อมต่อที่ถูกปิด รายการรหัสสถานะอยู่ที่นี่ แก้ไขตัวจัดการเหตุการณ์ที่มีอยู่เพื่อให้มีลักษณะดังนี้:
  6. สร้างและแฟลชโปรเจ็กต์ ณ จุดนี้ เราจะเรียกใช้ sample app เพื่อดูว่ามันทำงานอย่างไรโดยไม่มีการเปลี่ยนแปลงใดๆ นอกเหนือจากฐานข้อมูล GATT
  7. เชื่อมต่อกับแอพมือถือ EFRConnect ดังนี้:
      1. แตะไอคอน 'เบราว์เซอร์ Bluetooth'
      2. แตะไอคอน 'เชื่อมต่อ' บนอุปกรณ์ชื่อ 'การฝึกอบรม'
  8. อ่านลักษณะที่ไม่มีการป้องกันดังต่อไปนี้:
      1. แตะลิงก์ 'ข้อมูลเพิ่มเติม' ใต้บริการที่ไม่รู้จักด้วย UUID a815944e-da1e-9d2a- 02e2-a8d15e2430a0
      2. อ่านคุณสมบัติที่ไม่มีการป้องกัน UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c โดยการแตะที่ไอคอน 'อ่าน' ไม่มีความประหลาดใจที่นี่ เนื่องจากคุณลักษณะไม่ได้รับการปกป้อง แต่อย่างใด จึงถูกส่งไปในรูปแบบข้อความธรรมดา
  9. ตอนนี้อ่านคุณสมบัติที่ได้รับการป้องกัน UUID d4261dbb-dcd0-daab-ec95-deec088d532b โทรศัพท์มือถือของคุณควรแจ้งให้คุณจับคู่และเชื่อมต่อ ข้อความอาจแตกต่างกันไปขึ้นอยู่กับระบบปฏิบัติการมือถือของคุณ หลังจากที่คุณยอมรับคำขอจับคู่แล้ว คุณควรได้รับข้อความบนคอนโซลดังนี้: บันทึก: ภาคผนวก A ที่ส่วนท้ายของคู่มือนี้มีสรุปความสามารถ I/O และวิธีการจับคู่เพื่อใช้อ้างอิง ภาคผนวก B สรุปโหมดความปลอดภัย Bluetooth

การกำหนดค่าตัวจัดการความปลอดภัย

ตัวจัดการความปลอดภัยเป็นส่วนหนึ่งของสแต็ค Bluetooth ที่กำหนดคุณลักษณะความปลอดภัยที่จะใช้ คุณสมบัติเหล่านี้ประกอบด้วยการป้องกันแบบแทรกกลางการสื่อสาร (MITM), การเชื่อมต่อ LE Secure (หรือที่เรียกว่า ECDH), ต้องมีการยืนยันการเชื่อมต่อ ฯลฯ นอกจากนี้ ตัวจัดการความปลอดภัยยังจัดการความสามารถของ I/O ซึ่งใช้ในการพิจารณาว่าจะใช้วิธีใดในการจับคู่ /bonding (ดูภาคผนวก A สำหรับการสรุป) ในส่วนนี้คุณจะเห็นการตั้งค่าอย่างง่าย

  1. ตั้งค่า SM ด้วยการกำหนดค่าที่ต้องการ ฮาร์ดแวร์สำหรับแล็บนี้ทำให้การแสดงรหัสผ่านบนคอนโซลเป็นเรื่องง่าย การป้อนรหัสผ่านเป็นข้อกำหนดในการเปิดใช้งานการป้องกัน MITM เพิ่มรหัสต่อไปนี้ลงในตัวจัดการเหตุการณ์ sl_bt_system_boot_id ของคุณ ซึ่งจะช่วยให้สามารถแทรกคนตรงกลางและแจ้งให้อุปกรณ์ระยะไกลทราบว่าเราสามารถแสดงรหัสผ่านได้ แต่แค่นั้นเอง
  2. ในการแสดงรหัสผ่านบนคอนโซล จำเป็นต้องมีตัวจัดการเหตุการณ์ดังที่แสดงด้านล่าง:
  3. ตั้งค่าโหมดการติด จำนวนสูงสุดของการติด ฯลฯ ใช้โค้ดต่อไปนี้เพื่อเริ่มต้น:การตั้งค่าเหล่านี้สามารถใช้เพื่อจำกัดความสามารถของผู้โจมตีในการเชื่อมโยงกับอุปกรณ์ของคุณ หากผลิตภัณฑ์ของคุณจำเป็นต้องมีผู้ใช้เพียงคนเดียว คุณสามารถจำกัดการเชื่อมโยงสูงสุดไว้ที่ 1 ตำแหน่งที่ดีในการเพิ่มการโทรเหล่านี้คือในตัวจัดการเหตุการณ์ sl_bt_system_boot_id เราจะไม่เปิดใช้งานการยึดติดในขณะนี้เพื่อทำให้ส่วนที่เหลือของห้องปฏิบัติการดำเนินไปอย่างราบรื่นยิ่งขึ้น แต่เราได้กำหนดนโยบายการยึดเหนี่ยวเพื่อให้ยึดเหนี่ยวได้เพียงอันเดียว เพื่อเป็นข้อมูลอ้างอิง โปรดดูเอกสารประกอบสำหรับ API เหล่านี้ ที่นี่ และ ที่นี่
  4. เพิ่มตัวจัดการเหตุการณ์สำหรับ sl_bt_evt_sm_bonded_id และ sl_bt_evt_sm_bonding_failed_id การใช้งานหลักสำหรับเหตุการณ์เหล่านี้เป็นเพียงการให้ข้อมูลในปัจจุบัน แต่คุณจะเพิ่มฟังก์ชันการทำงานในแล็บในภายหลัง
  5. สร้างและแฟลชไปยังกระดานเป้าหมาย เชื่อมต่อกับ EFRConnect และอ่านคุณลักษณะที่ได้รับการป้องกันเช่นเดิม คราวนี้คุณจะเห็นรหัสผ่านปรากฏบนคอนโซล ป้อนรหัสผ่านนี้บนโทรศัพท์มือถือของคุณเมื่อได้รับแจ้ง
  6. ลองใช้การยืนยันการติด คุณลักษณะนี้ช่วยให้ผู้ใช้สามารถกำหนดให้คำขอเชื่อมโยงได้รับการยืนยัน การทำเช่นนี้ทำให้แอปพลิเคชันสามารถควบคุมอุปกรณ์เพียร์ที่เชื่อมโยงด้วยได้ ความเป็นไปได้ประการหนึ่งคือต้องการให้ผู้ใช้กดปุ่มก่อนที่จะอนุญาตให้มีการผูกมัด
    1. เปิดการตั้งค่า Bluetooth ในโทรศัพท์มือถือของคุณและลบการเชื่อมโยงกับอุปกรณ์ EFR32 การใช้งานโทรศัพท์มือถือแตกต่างกันไป ดังนั้นขั้นตอนนี้อาจไม่จำเป็น หากคุณไม่เห็นอุปกรณ์ "การฝึกอบรม" ในการตั้งค่าบลูทูธ ให้ดำเนินการขั้นตอนต่อไป
    2. ในส่วนประกอบซอฟต์แวร์ ให้ติดตั้งหนึ่งอินสแตนซ์ของตัวจัดการปุ่มแบบธรรมดา
    3. รวมส่วนหัว file sl_simple_button_instances.h ใน app.c
    4. เพิ่มตัวจัดการสำหรับเหตุการณ์ sl_bt_evt_sm_bonding_confirm_id งานหลักของตัวจัดการเหตุการณ์นี้คือการแจ้งให้ผู้ใช้ทราบว่าอุปกรณ์ระยะไกลกำลังร้องขอการเชื่อมโยงใหม่
    5. เพิ่มฟังก์ชันการโทรกลับสำหรับตัวจัดการปุ่มอย่างง่ายเพื่อส่งสัญญาณไปยังสแต็ก Bluetooth เพื่อระบุว่ามีการกดปุ่มแล้ว สิ่งนี้จะแทนที่การโทรกลับเริ่มต้นซึ่งเพียงแค่ส่งคืน
    6. เพิ่มตัวจัดการเหตุการณ์สัญญาณภายนอก เหตุการณ์นี้เกิดขึ้นเพื่อตอบสนองต่อการรับสัญญาณ เช่น ในขั้นตอนก่อนหน้า เหตุการณ์สัญญาณภายนอกจะถูกนำมาใช้เพื่อยืนยันการเชื่อมต่อ
    7. เปลี่ยนการเรียกเป็น sl_bt_sm_configure เพื่อต้องการการยืนยันการเชื่อม เช่น
    8. สร้างใหม่และแฟลช
    9. เชื่อมต่อกับ EFRConnect และอ่านคุณลักษณะที่ได้รับการป้องกันเช่นเดิม ตอนนี้คุณจะเห็นข้อความบนคอนโซลดังนี้:กด PB0 เพื่อยืนยันการติด ตอนนี้คอนโซลจะแสดงรหัสผ่านที่จะป้อนบนโทรศัพท์มือถือเพื่อเชื่อมต่อ ป้อนรหัสผ่านเพื่อเสร็จสิ้นกระบวนการเชื่อม

 

เคล็ดลับ: ใช้กรณีเริ่มต้นในตัวจัดการเหตุการณ์เพื่อพิมพ์ข้อความเมื่อสแต็กส่งเหตุการณ์ที่ไม่ได้รับการจัดการ สแต็กอาจพยายามบอกบางสิ่งที่สำคัญแก่คุณ

เหนือกว่าพื้นฐาน

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

  1. ตัดการเชื่อมต่อเมื่อพยายามผูกมัดล้มเหลว นี่เป็นสถานที่ที่ดีในการตรวจจับภัยคุกคาม หากอุปกรณ์ระยะไกลไม่รองรับการเข้ารหัส/การรับรองความถูกต้อง หรือเพียงแค่ไม่มีคีย์ที่ถูกต้อง อาจเป็นแฮ็กเกอร์ได้ เอาล่ะ เรามาทำลายการเชื่อมต่อกันดีกว่า ลองเพิ่มการเรียกไปที่ sl_bt_connection_close() ในเหตุการณ์ sl_bt_sm_bonding_failed_id API ได้รับการบันทึกไว้ที่นี่คุณสามารถทดสอบคุณสมบัตินี้ได้โดยการป้อนรหัสผ่านผิด
  2. อนุญาตให้มีการผูกมัดเฉพาะบางช่วงเวลาเท่านั้น นี่เป็นการจำกัดเวลาที่ผู้โจมตีต้องสร้างพันธะ และทำให้สามารถใช้ฟีเจอร์ 'อนุญาตเฉพาะการเชื่อมต่อที่ถูกผูกมัดเท่านั้น' ผู้ออกแบบสามารถเลือกวิธีการเปิดใช้งานหรือปิดใช้งานโหมดที่เชื่อมโยงได้ เพื่อวัตถุประสงค์ในการสาธิตที่นี่ เราจะเปิดใช้งาน 'โหมดการตั้งค่า' ด้วย PB1 และใช้ตัวจับเวลาเพื่อปิดใช้งานหลังจากผ่านไป 30 วินาที
    1. ติดตั้งอินสแตนซ์ที่สองของอินเทอร์เฟซปุ่มอย่างง่าย สิ่งนี้จะทำให้สามารถใช้ PB1 ได้
    2. แก้ไขการโทรกลับเพื่อส่งสัญญาณอื่นไปยังสแต็กเพื่อเปิด/ปิดการเชื่อมโยง ผลลัพธ์ควรมีลักษณะดังนี้:
    3. ปรับเปลี่ยนตัวจัดการเหตุการณ์สัญญาณภายนอกเพื่อให้จัดการสัญญาณใหม่นี้ ผลลัพธ์ควรเป็นดังนี้:
    4. เพิ่มตัวจัดการเหตุการณ์สำหรับเหตุการณ์ sl_bt_evt_system_soft_timer_id สิ่งนี้จะใช้ในการปิดการใช้งานโหมดการตั้งค่า
    5. รหัสต่อไปนี้สามารถใช้เพื่อเปิดใช้งานโหมด Bondable และอนุญาตการเชื่อมต่อทั้งหมด หรือปิดใช้งานโหมด Bondable และอนุญาตการเชื่อมต่อจากอุปกรณ์ที่ถูกผูกมัดเท่านั้น:
    6. เพิ่มการเรียกต่อไปนี้ในตัวจัดการเหตุการณ์sl_bt_system_boot_id
    7. สร้างโปรเจ็กต์และแฟลชไปยังอุปกรณ์
    8. ลองเชื่อมต่อกับอุปกรณ์ด้วย EFRConnect การเชื่อมต่อควรจะล้มเหลว
    9. ตอนนี้ให้ลองกด PB1 ก่อนที่จะเชื่อมต่อกับ EFRConnect คราวนี้การเชื่อมต่อจะสำเร็จ หลังจากผ่านไป 30 วินาที คุณจะเห็นข้อความบนคอนโซลระบุว่าอุปกรณ์กำลังออกจากโหมดการตั้งค่า ซึ่งหมายความว่าขณะนี้โหมด Bondable ถูกปิดใช้งานแล้ว
  3. เพิ่มความปลอดภัยในการสร้างการเชื่อมต่อ เนื่องจากการรักษาความปลอดภัยเป็นทางเลือก เราควรขอการเชื่อมต่อที่เข้ารหัสโดยเร็วที่สุดแทนที่จะอาศัยคุณลักษณะ GATT API ได้รับการบันทึกไว้ที่นี่ ตำแหน่งที่ดีในการเรียก API นี้คือในเหตุการณ์ sl_bt_evt_connection_opened_id หมายเลขอ้างอิงการเชื่อมต่อมีอยู่ในตัวแปรการเชื่อมต่อ

ข้อมูลประจำตัวที่ปลอดภัย

ตอนนี้เรามีอุปกรณ์ Bluetooth ที่ปลอดภัยยิ่งขึ้นแล้ว มาปรับปรุงขั้นตอนการรับรองความถูกต้องกันดีกว่า คุณได้เห็นวิธีการยืนยันตัวตนที่ปลอดภัยของอุปกรณ์นิรภัยด้วยบรรทัดคำสั่งในห้องปฏิบัติการฝึกอบรมก่อนหน้านี้แล้ว ในส่วนนี้ เราจะดูว่าอุปกรณ์ BLE หนึ่งเครื่องสามารถตรวจสอบตัวตนของอุปกรณ์ BLE อื่นได้อย่างไรโดยขอสายใบรับรองและส่งคำถาม ชิ้นส่วนตู้นิรภัยที่ปลอดภัยทั้งหมดมีใบรับรองอุปกรณ์และใบรับรองแบทช์ของตัวเอง ใบรับรองจากโรงงานและใบรับรองหลักจะถูกเข้ารหัสลงในแอปพลิเคชันไคลเอนต์เพื่อให้สามารถตรวจสอบห่วงโซ่ใบรับรองทั้งหมดได้ โปรดดู AN1268 สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับข้อมูลประจำตัวที่ปลอดภัย

  1. กำหนดบัฟเฟอร์ส่วนกลางสำหรับจัดเก็บลายเซ็นรับรองอุปกรณ์ดังต่อไปนี้:
  2. ตั้งค่าการกำหนดค่าตัวจัดการความปลอดภัยเพื่อใช้การจับคู่ JustWorks ทำเช่นนี้เพื่อให้การเชื่อมต่อได้รับการเข้ารหัส ในทางปฏิบัติ ควรใช้การป้องกัน MITM แต่เพื่อให้ห้องปฏิบัติการเรียบง่าย เราจะใช้ JustWorks เปลี่ยนการเรียกเป็น sl_bt_sm_configure กลับเป็นดังนี้:นอกจากนี้ ให้แสดงความคิดเห็นการเรียก setup_mode(true) ในตัวจัดการเหตุการณ์ system_boot
  3. เปิด helpers.c จากสื่อที่ให้มาและคัดลอกเนื้อหาลงใน app.c ฟังก์ชันการเรียกกลับเหล่านี้ทำงานต่างๆ เช่น การแบ่งส่วนใบรับรองเพื่อให้สามารถส่งผ่าน BLE ตรวจสอบสายโซ่ใบรับรอง และสร้าง/ตรวจสอบความท้าทาย
  4. จำเป็นต้องกำหนดขนาดหน่วยถ่ายโอนสูงสุด (MTU) เพื่อให้สามารถแบ่งส่วนและประกอบใบรับรองอีกครั้งได้ กำหนดตัวแปรโกลบอลเพื่อบันทึก MTU ดังที่แสดงไว้ที่นี่:จากนั้นเพิ่มตัวจัดการเหตุการณ์สำหรับเหตุการณ์ที่แลกเปลี่ยน GATT MTU ดังที่แสดงด้านล่าง:
  5. มีลักษณะข้อมูลผู้ใช้สามประการที่สามารถอ่านได้ คุณลักษณะเหล่านี้ใช้เพื่อสื่อสารใบรับรองอุปกรณ์ ใบรับรองชุด และความท้าทาย ฟังก์ชันโทรกลับใช้เพื่อจัดการคำขออ่านของผู้ใช้เหล่านี้ เพิ่มตัวจัดการเพื่อเรียกใช้ฟังก์ชันนี้ดังที่แสดงด้านล่าง:การโทรกลับใช้ MTU จากขั้นตอน #2 เพื่อแบ่งกลุ่มและส่งใบรับรองตามความจำเป็น นอกจากนี้ยังจัดการการส่งคำท้าที่เซ็นชื่อด้วย
  6. ไคลเอนต์ส่งการท้าทาย ซึ่งเป็นตัวเลขสุ่มที่จะลงนามโดยเซิร์ฟเวอร์ โดยการเขียนคุณลักษณะ GATT อย่างใดอย่างหนึ่ง ด้วยเหตุผลนี้ แอปพลิเคชันจำเป็นต้องมีตัวจัดการสำหรับเหตุการณ์คำขอเขียนของผู้ใช้ดังต่อไปนี้:
  7. เพิ่มการสนับสนุนข้อมูลประจำตัวที่ปลอดภัย fileไปยังโครงการ:
    1. app_se_manager_macro.h, app_se_manager_secure_identity.c และ app_se_secure_identity.h จากเอกสารที่จัดเตรียมให้กับโปรเจ็กต์ เหล่านี้ fileมีฟังก์ชันตัวช่วยบางอย่างสำหรับงานต่างๆ เช่น การกำหนดขนาดของใบรับรอง การรับคีย์สาธารณะของอุปกรณ์ และการลงนามคำท้าทาย
    2. รวม app_se_manager_secure_identity.h ใน app.c
  8. นำเข้า gatt_configuration-attest.btconf ที่ให้มาจากเอกสารที่ให้มา ฐานข้อมูล GATT นี้เรียกว่าการรับรองความปลอดภัย ซึ่งรวมถึงคุณลักษณะสี่ประการที่จะใช้ในการตรวจสอบตัวตนของอุปกรณ์ของเรา ซึ่งรวมถึงใบรับรองอุปกรณ์ ใบรับรองแบทช์ ความท้าทาย และการตอบสนอง
  9. ไคลเอนต์ซึ่งใช้ในการจำลองอุปกรณ์ เช่น เกตเวย์ ได้รับการจัดเตรียมให้เป็นโปรเจ็กต์ที่สมบูรณ์ เนื่องจากมีความซับซ้อนในการสร้างมากกว่า โดยทั่วไปการดำเนินการของลูกค้าจะเป็นดังนี้:
    1. สแกนหาอุปกรณ์ที่โฆษณาบริการรับรองความปลอดภัยและเชื่อมต่อกับอุปกรณ์เหล่านั้น
    2. ค้นพบบริการและคุณลักษณะของฐานข้อมูล GATT
    3. อ่านอุปกรณ์และใบรับรองชุด และตรวจสอบห่วงโซ่ใบรับรองโดยใช้ใบรับรองจากโรงงานและใบรับรองหลักที่จัดเก็บไว้ในแฟลช
    4. ส่งการท้าทายแบบสุ่มไปยังเซิร์ฟเวอร์
    5. พยายามตรวจสอบการตอบสนองต่อความท้าทาย
    6. ปิดการเชื่อมต่อหากการยืนยันอย่างใดอย่างหนึ่งล้มเหลว
  10. สร้างและแฟลชโปรเจ็กต์เซิร์ฟเวอร์ไปยังเซิร์ฟเวอร์ของคุณ WSTK /radioboard
  11. นำเข้าโครงการลูกค้าจากโฟลเดอร์ลูกค้าในเอกสารที่ให้มา สร้างและแฟลชโปรเจ็กต์ไคลเอนต์ไปยังไคลเอนต์ของคุณ WSTK/radioboard
  12. กดรีเซ็ตบนไคลเอนต์ WSTK และเปิดคอนโซลอนุกรม ลูกค้าเริ่มสแกนหาอุปกรณ์ที่โฆษณาบริการข้อมูลประจำตัวที่ปลอดภัยของเรา และจะเชื่อมต่อเมื่อพบอุปกรณ์ดังกล่าว
  13. ไคลเอนต์จะแสดงข้อความบางส่วนเพื่อระบุว่าพบเซิร์ฟเวอร์พร้อมบริการที่ต้องการและข้อความสถานะเกี่ยวกับการตรวจสอบห่วงโซ่ใบรับรอง
  14. หากการตรวจสอบผ่าน ลูกค้าจะสร้างหมายเลขสุ่มที่เรียกว่าความท้าทาย และส่งไปยังเซิร์ฟเวอร์ เซิร์ฟเวอร์จะลงนามการท้าทายด้วยรหัสอุปกรณ์ส่วนตัวที่เก็บอย่างปลอดภัยและลายเซ็นกลับไปยังไคลเอนต์ ซึ่งเรียกว่าการตอบสนองต่อความท้าทาย จากนั้นไคลเอ็นต์จะใช้คีย์สาธารณะในใบรับรองอุปกรณ์ที่ได้รับก่อนหน้านี้เพื่อตรวจสอบลายเซ็น สิ่งนี้ทำเพื่อยืนยันว่าเซิร์ฟเวอร์มีรหัสส่วนตัวที่อ้างว่ามีจริงๆ หากการท้าทายได้รับการตรวจสอบอย่างถูกต้อง ข้อความจะแสดงถึงเอฟเฟกต์นั้น มิฉะนั้น การเชื่อมต่อจะถูกปิด และมีข้อความปรากฏขึ้นเพื่ออธิบายสาเหตุ
  15. ตอนนี้ส่งใบรับรองที่ไม่ถูกต้องเพื่อยืนยันว่าการตรวจสอบใช้งานได้จริง คุณสามารถแก้ไข user_read_request_cb() เพื่อทำให้ข้อมูลใบรับรองเสียหายหรือการตอบสนองต่อความท้าทายได้

ภาคผนวก A – ความสามารถ I/O และวิธีการจับคู่
ภาคผนวก B – โหมดและระดับความปลอดภัย

โหมดความปลอดภัย 1 เป็นโหมดเดียวที่รองรับ Bluetooth Low Energy ในสแต็กของ Silicon Labs ระดับมีดังนี้:

  • ระดับ 1 ไม่มีการรักษาความปลอดภัย
  • การจับคู่ที่ไม่ได้รับการรับรองความถูกต้องระดับ 2 กับการเข้ารหัส
  • การจับคู่การรับรองความถูกต้องระดับ 3 พร้อมการเข้ารหัส
  • การเชื่อมต่อที่ปลอดภัยที่ผ่านการรับรองความถูกต้องระดับ 4 พร้อมการเข้ารหัสที่รัดกุม (การแลกเปลี่ยนคีย์ ECDH)

 

เอกสาร / แหล่งข้อมูล

silabs ห้องปฏิบัติการความปลอดภัยอุปกรณ์ BLE ที่ปลอดภัยในไตรมาส 21/2 [พีดีเอฟ] คู่มือการใช้งาน
อุปกรณ์ BLE ที่ปลอดภัยในไตรมาส 21/2 ห้องปฏิบัติการความปลอดภัย อุปกรณ์ BLE ที่ปลอดภัย ห้องปฏิบัติการความปลอดภัย ห้องปฏิบัติการความปลอดภัย

อ้างอิง

ฝากความคิดเห็น

ที่อยู่อีเมลของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องกรอกข้อมูลมีเครื่องหมาย *