silabs 21Q2 thiết bị BLE an toàn Phòng thí nghiệm bảo mật
Sổ tay hướng dẫn phòng thí nghiệm bảo mật BLE
Trong phòng thí nghiệm này, bạn sẽ thấy cách thiết kế một thiết bị BLE an toàn hơn. Chúng ta sẽ bắt đầu với mộtview về cách sử dụng một số tính năng của ngăn xếp và chuyển sang một số lời khuyên chung về các kỹ thuật để kết nối an toàn hơn và cuối cùng chúng ta sẽ xem cách sử dụng chứng chỉ thiết bị qua BLE để xác định thiết bị ngoại vi là xác thực.
Bắt đầu
Bluetooth sampứng dụng bạn sẽ xây dựng trên đó được thiết kế để sử dụng với bộ nạp khởi động. Nếu bạn đang làm việc với EFR32MG21B hoàn toàn mới, nó sẽ không có bộ nạp khởi động. Bạn có thể tìm thấy bộ nạp khởi động được xây dựng sẵn trong platform\bootloader\sampthư mục le-apps\bootloader-storage-internalsingle\efr32mg21a010f1024im32-brd4181a của SDK của bạn.
- Bắt đầu bằng một xã hội trống rỗngampứng dụng này. Đây làampỨng dụng này được sử dụng làm mẫu và là điểm khởi đầu tốt cho bất kỳ ứng dụng BLE nào.
- Mở Silicon Labs Project Wizard từ Simplicity Studio File menu -> mới.
- Chọn BRD4181C và nhấp vào nút 'tiếp theo'.
- Nhấp vào hộp kiểm 'Bluetooth (9)' bên dưới loại công nghệ.
- Đánh dấu 'Bluetooth – SoC Empty' rồi nhấp vào tiếp theo.
- Nhấp vào nút 'Hoàn tất'.
- Bây giờ bạn có thể thêm một số đặc điểm để xem các đặc điểm được bảo vệ và không được bảo vệ được xử lý khác nhau như thế nào.
- Mở slcp của dự án file bằng cách nhấp đúp vào nó trong cửa sổ Project Explorer
- Đánh dấu tab 'PHẦN MỀM' và mở công cụ cấu hình GATT như hiển thị bên dưới:
Và sử dụng công cụ nhập được hiển thị bên dưới để nhập gatt_configuration.btconf file từ thư mục máy chủ trong tài liệu được cung cấp.
Cơ sở dữ liệu GATT có một dịch vụ tùy chỉnh, được gọi là 'Đào tạo', với một số dữ liệu được bảo vệ và một số thì không. Điều này cho phép bạn so sánh những gì xảy ra khi cố gắng truy cập vào một đặc điểm được bảo vệ so với một đặc điểm không được bảo vệ. Đây là một cách nhanh chóng để tạo ra một thiết bị có bảo mật rất cơ bản.
- Chúng ta sẽ sử dụng cổng nối tiếp để in ra bảng điều khiển trong Simplicity Studio để theo dõi những gì đang diễn ra trong ứng dụng. Cách dễ nhất để tìm các thành phần này là tìm kiếm chúng trong hộp thoại SOFTWARE COMPONENTS như minh họa:
-
- Cài đặt thành phần IO Stream USART
- Cài đặt thành phần IO Stream Retarget STDIO
- Cài đặt thành phần I/O chuẩn
- Cài đặt thành phần Nhật ký
- Mở thành phần Board Control và bật 'Enable Virtual COM UART'
- Nhấp chuột phải vào bộ điều hợp trong bảng 'Debug adapters' và chọn 'Launch Console'. Chọn tab 'Serial 1' và đặt con trỏ vào trường nhập văn bản của cửa sổ bảng điều khiển và nhấn enter để đánh thức bảng điều khiển.
-
- Tạo một biến cục bộ trong sl_bt_on_event(), có trong app.c, để lưu xử lý kết nối. Biến phải là biến tĩnh vì hàm này được gọi mỗi khi một sự kiện được ngăn xếp tạo ra và chúng ta muốn giá trị được duy trì. Xử lý kết nối sẽ được sử dụng trong một
phần của phòng thí nghiệm.
- Chèn một số câu lệnh app_log() cho các sự kiện để xem khi nào chúng ta được kết nối, chế độ bảo mật, v.v.
-
- Bao gồm tiêu đề app_log.h file
- sl_bt_evt_connection_opened – in bond handle và lưu connection handle. Nếu bond handle là 0xFF, không có bond nào giữa các thiết bị được kết nối. Sửa đổi trình xử lý sự kiện hiện tại để trông giống như thế này:
- sl_bt_evt_connection_parameters – chế độ bảo mật. Điều này được thực hiện để bạn có thể thấy khi chế độ bảo mật thay đổi. Có sự khác biệt trong cách đánh số các chế độ bảo mật, trong đó chế độ bảo mật 1 được liệt kê với giá trị 0, v.v. Thêm trình xử lý sự kiện sau vào ứng dụng của bạn:
- sl_bt_evt_connection_closed_id. Trình xử lý sự kiện này được sửa đổi để cập nhật trình xử lý kết nối. Giá trị 0xFF được sử dụng để chỉ ra rằng không có kết nối đang hoạt động. Lệnh app_log() được sử dụng để in ra lý do kết nối bị đóng, danh sách mã trạng thái ở đây. Sửa đổi trình xử lý sự kiện hiện tại để trông giống như thế này:
- Bao gồm tiêu đề app_log.h file
-
- Xây dựng và flash dự án. Tại thời điểm này, chúng tôi sẽ chạy sampứng dụng để xem ứng dụng hoạt động như thế nào mà không có bất kỳ thay đổi nào, ngoài cơ sở dữ liệu GATT.
- Kết nối với ứng dụng di động EFRConnect như sau:
-
- Chạm vào biểu tượng 'Trình duyệt Bluetooth'.
- Chạm vào biểu tượng 'Kết nối' trên thiết bị có tên 'Đào tạo'.
-
- Đọc đặc điểm không được bảo vệ như sau:
-
- Chạm vào liên kết 'Thông tin thêm' bên dưới dịch vụ không xác định có UUID a815944e-da1e-9d2a- 02e2-a8d15e2430a0.
- Đọc đặc điểm không được bảo vệ, UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c bằng cách chạm vào biểu tượng 'Đọc'. Không có gì ngạc nhiên ở đây. Vì đặc điểm không được bảo vệ theo bất kỳ cách nào, nên nó sẽ được gửi dưới dạng văn bản thuần túy.
-
- Bây giờ hãy đọc đặc điểm được bảo vệ, UUID d4261dbb-dcd0-daab-ec95-deec088d532b. Điện thoại di động của bạn sẽ nhắc bạn ghép nối và kết nối, thông báo có thể khác nhau tùy thuộc vào hệ điều hành di động của bạn. Sau khi bạn chấp nhận yêu cầu ghép nối, bạn sẽ thấy thông báo trên bảng điều khiển như sau:
Ghi chú: Phụ lục A ở cuối hướng dẫn này có tóm tắt về khả năng I/O và phương pháp ghép nối để tham khảo. Phụ lục B tóm tắt các chế độ bảo mật Bluetooth.
Cấu hình quản lý bảo mật
Trình quản lý bảo mật là một phần của ngăn xếp Bluetooth xác định các tính năng bảo mật nào được sử dụng. Các tính năng này bao gồm bảo vệ man-in-the-middle (MITM), kết nối LE Secure (hay còn gọi là ECDH), yêu cầu xác nhận để liên kết, v.v. Trình quản lý bảo mật cũng xử lý các khả năng I/O được sử dụng để xác định phương pháp nào được sử dụng để ghép nối/liên kết (xem Phụ lục A để biết tóm tắt). Trong phần này, bạn sẽ thấy một thiết lập đơn giản.
- Thiết lập SM với cấu hình mong muốn. Phần cứng cho phòng thí nghiệm này giúp dễ dàng hiển thị passkey trên bảng điều khiển. Mục nhập passkey là yêu cầu để bật bảo vệ MITM. Thêm mã sau vào trình xử lý sự kiện sl_bt_system_boot_id của bạn. Điều này cho phép man-in-the-middle và thông báo cho thiết bị từ xa rằng chúng ta có khả năng hiển thị passkey, nhưng thế là hết.
- Để hiển thị mật khẩu trên bảng điều khiển, cần có trình xử lý sự kiện như hiển thị bên dưới:
- Thiết lập chế độ liên kết, số lượng liên kết tối đa, v.v. Sử dụng mã sau để bắt đầu:
Những thiết lập này có thể được sử dụng để hạn chế khả năng liên kết của kẻ tấn công với thiết bị của bạn. Nếu sản phẩm của bạn chỉ cần có một người dùng, thì bạn có thể giới hạn số liên kết tối đa là 1. Một nơi tốt để thêm các lệnh gọi này là trong trình xử lý sự kiện sl_bt_system_boot_id. Chúng tôi sẽ không bật liên kết tại thời điểm này để phần còn lại của phòng thí nghiệm diễn ra suôn sẻ hơn nhưng chúng tôi đặt chính sách liên kết để chỉ cho phép một liên kết. Để tham khảo, tài liệu cho các API này có tại đây và tại đây .
- Thêm trình xử lý sự kiện cho sl_bt_evt_sm_bonded_id và sl_bt_evt_sm_bonding_failed_id. Mục đích sử dụng chính của các sự kiện này hiện tại là cung cấp thông tin nhưng sau này trong phòng thí nghiệm, bạn sẽ thêm chức năng.
- Xây dựng và flash vào bảng mục tiêu. Kết nối với EFRConnect và đọc đặc điểm được bảo vệ như trước. Lần này, bạn sẽ thấy một passkey được hiển thị trên bảng điều khiển. Nhập passkey này trên điện thoại di động của bạn khi được nhắc.
- Hãy thử xác nhận liên kết. Tính năng này cung cấp cho người dùng khả năng yêu cầu xác nhận yêu cầu liên kết. Làm như vậy sẽ cung cấp cho ứng dụng quyền kiểm soát đối với các thiết bị ngang hàng mà nó liên kết. Một khả năng là yêu cầu người dùng nhấn nút trước khi cho phép liên kết.
- Mở cài đặt Bluetooth trong điện thoại di động của bạn và xóa liên kết với thiết bị EFR32. Việc triển khai điện thoại di động khác nhau nên bước này có thể không cần thiết. Nếu bạn không thấy thiết bị 'Đào tạo' trong cài đặt Bluetooth của mình, chỉ cần tiến hành bước tiếp theo.
- Trong các thành phần phần mềm, hãy cài đặt một phiên bản của trình xử lý nút đơn giản.
- Bao gồm tiêu đề file sl_simple_button_instances.h trong ứng dụng.c
- Thêm trình xử lý cho sự kiện sl_bt_evt_sm_bonding_confirm_id. Nhiệm vụ chính của trình xử lý sự kiện này là thông báo cho người dùng rằng thiết bị từ xa đang yêu cầu liên kết mới.
- Thêm một hàm gọi lại cho trình xử lý nút đơn giản để gửi tín hiệu đến ngăn xếp Bluetooth cho biết nút đã được nhấn. Điều này ghi đè hàm gọi lại mặc định chỉ trả về.
- Thêm trình xử lý sự kiện tín hiệu bên ngoài. Sự kiện này được đưa ra để phản hồi khi nhận được tín hiệu, chẳng hạn như trong bước trước. Sự kiện tín hiệu bên ngoài sẽ được sử dụng để xác nhận liên kết.
- Thay đổi lệnh gọi đến sl_bt_sm_configure để yêu cầu xác nhận liên kết như
- Xây dựng lại và flash.
- Kết nối với EFRConnect và đọc đặc điểm được bảo vệ như trước. Bây giờ bạn sẽ thấy một thông báo trên bảng điều khiển như sau:
Nhấn PB0 để xác nhận liên kết. Bây giờ bảng điều khiển sẽ hiển thị mật khẩu để nhập vào điện thoại di động để liên kết. Nhập mật khẩu để hoàn tất quá trình liên kết.
Mẹo: Sử dụng trường hợp mặc định trong trình xử lý sự kiện để in ra thông báo khi ngăn xếp gửi sự kiện không được xử lý. Ngăn xếp có thể đang cố gắng cho bạn biết điều gì đó quan trọng.
Vượt ra ngoài những điều cơ bản
Đến thời điểm này, bạn đã có sự tiến bộtage của các tính năng bảo mật mà ngăn xếp của chúng tôi cung cấp. Bây giờ hãy cải thiện việc triển khai thông qua việc sử dụng khôn ngoan các tính năng theo ý của chúng tôi. Các bước sau đây là tùy chọn và độc lập với nhau, bạn có thể xây dựng và flash sau mỗi bước để xem hành vi hoặc thử tất cả cùng nhau.
- Ngắt kết nối khi liên kết không thành công. Đây là nơi tốt để phát hiện các mối đe dọa. Nếu thiết bị từ xa không hỗ trợ mã hóa/xác thực hoặc không có khóa chính xác, thì có thể là tin tặc. Vì vậy, hãy ngắt kết nối. Hãy thử thêm lệnh gọi đến sl_bt_connection_close() trong sự kiện sl_bt_sm_bonding_failed_id. API được ghi lại tại đây.
Bạn có thể kiểm tra tính năng này bằng cách nhập sai mật khẩu.
- Chỉ cho phép liên kết tại một số thời điểm nhất định. Điều này giới hạn thời gian mà kẻ tấn công phải tạo liên kết và giúp có thể sử dụng tính năng 'chỉ cho phép kết nối liên kết'. Nhà thiết kế có thể chọn cách bật hoặc tắt chế độ liên kết. Để trình diễn ở đây, chúng tôi sẽ bật 'chế độ thiết lập' với PB1 và sử dụng bộ hẹn giờ để tắt sau 30 giây.
- Cài đặt phiên bản thứ hai của giao diện nút đơn giản. Điều này sẽ cho phép sử dụng PB1.
- Sửa đổi lệnh gọi lại để gửi một tín hiệu khác đến ngăn xếp để bật/tắt liên kết. Kết quả sẽ trông giống như thế này:
- Sửa đổi trình xử lý sự kiện tín hiệu bên ngoài để nó xử lý tín hiệu mới này. Kết quả sẽ như thế này:
- Thêm trình xử lý sự kiện cho sự kiện sl_bt_evt_system_soft_timer_id. Điều này sẽ được sử dụng để vô hiệu hóa chế độ thiết lập.
- Có thể sử dụng đoạn mã sau để bật chế độ liên kết và cho phép tất cả các kết nối hoặc tắt chế độ liên kết và chỉ cho phép kết nối từ các thiết bị liên kết:
- Thêm lệnh gọi sau vào trình xử lý sự kiện sl_bt_system_boot_id
- Xây dựng dự án và flash nó vào thiết bị.
- Hãy thử kết nối với thiết bị bằng EFRConnect. Kết nối sẽ không thành công.
- Bây giờ hãy thử nhấn PB1 trước khi kết nối với EFRConnect. Lần này kết nối sẽ thành công. Sau 30 giây, bạn sẽ thấy thông báo trên bảng điều khiển cho biết thiết bị đang thoát khỏi chế độ thiết lập. Điều này có nghĩa là chế độ liên kết hiện đã bị vô hiệu hóa.
- Tăng cường bảo mật khi tạo kết nối. Vì bảo mật là tùy chọn, chúng ta nên yêu cầu kết nối được mã hóa càng sớm càng tốt thay vì dựa vào các đặc điểm của GATT. API được ghi lại tại đây. Một nơi tốt để gọi API này là trong sự kiện sl_bt_evt_connection_opened_id. Xử lý kết nối có sẵn trong biến kết nối.
Bảo mật danh tính
Bây giờ chúng ta đã có một thiết bị Bluetooth an toàn hơn, hãy cải thiện bước xác thực. Bạn đã thấy cách xác minh danh tính an toàn của các thiết bị vault bằng dòng lệnh trong các phòng thí nghiệm đào tạo trước đó. Trong phần này, chúng ta sẽ xem cách một thiết bị BLE có thể xác minh danh tính của một thiết bị BLE khác bằng cách yêu cầu chuỗi chứng chỉ của nó và gửi một thử thách. Tất cả các bộ phận vault an toàn đều giữ chứng chỉ thiết bị và chứng chỉ lô của riêng chúng. Chứng chỉ gốc và chứng chỉ gốc được mã hóa cứng vào ứng dụng máy khách để cho phép xác minh toàn bộ chuỗi chứng chỉ. Tham khảo AN1268 để biết thêm chi tiết về danh tính an toàn.
- Xác định bộ đệm toàn cục để lưu trữ chữ ký xác thực thiết bị như sau:
- Đặt cấu hình trình quản lý bảo mật để sử dụng ghép nối JustWorks. Điều này được thực hiện để kết nối được mã hóa. Trong thực tế, nên sử dụng bảo vệ MITM nhưng để giữ cho phòng thí nghiệm đơn giản, chúng tôi sẽ sử dụng JustWorks. Thay đổi lệnh gọi sl_bt_sm_configure trở lại như sau:
Ngoài ra, hãy chú thích lệnh gọi setup_mode(true) trong trình xử lý sự kiện system_boot.
- Mở helpers.c từ các tài liệu được cung cấp và sao chép nội dung vào app.c. Các hàm gọi lại này thực hiện các tác vụ như phân đoạn chứng chỉ để có thể gửi qua BLE, xác minh chuỗi chứng chỉ và tạo/xác minh thử thách.
- Cần phải xác định kích thước đơn vị truyền tải tối đa (MTU) để có thể phân đoạn và lắp ráp lại chứng chỉ. Xác định một biến toàn cục để lưu MTU như được hiển thị ở đây:
Sau đó thêm trình xử lý sự kiện cho sự kiện trao đổi MTU GATT như hiển thị bên dưới:
- Có ba đặc điểm dữ liệu người dùng có thể được đọc. Các đặc điểm này được sử dụng để truyền đạt chứng chỉ thiết bị, chứng chỉ lô và thử thách. Một hàm gọi lại được sử dụng để xử lý các yêu cầu đọc của người dùng này. Thêm một trình xử lý để gọi hàm này như được hiển thị bên dưới:
Callback sử dụng MTU từ bước #2 để phân đoạn và gửi chứng chỉ khi cần. Nó cũng xử lý việc gửi thử thách đã ký.
- Máy khách gửi một thử thách, một số ngẫu nhiên để máy chủ ký, bằng cách viết một trong các đặc điểm của GATT. Vì lý do này, ứng dụng cần có trình xử lý cho sự kiện yêu cầu ghi của người dùng như sau:
- Thêm hỗ trợ danh tính an toàn files cho dự án:
- app_se_manager_macro.h, app_se_manager_secure_identity.c và app_se_secure_identity.h từ các tài liệu được cung cấp cho dự án. Những filechứa một số hàm trợ giúp cho các tác vụ như lấy kích thước của chứng chỉ, lấy khóa công khai của thiết bị và ký thử thách.
- Bao gồm app_se_manager_secure_identity.h trong app.c.
- Nhập gatt_configuration-attest.btconf được cung cấp từ các tài liệu được cung cấp. Cơ sở dữ liệu GATT này được gọi là chứng thực an toàn bao gồm bốn đặc điểm sẽ được sử dụng để xác minh danh tính thiết bị của chúng tôi. Chúng bao gồm chứng chỉ thiết bị, chứng chỉ lô, thách thức và phản hồi.
- Máy khách, được sử dụng để mô phỏng một thiết bị như cổng, được cung cấp như một dự án hoàn chỉnh vì nó phức tạp hơn để xây dựng. Nhìn chung, hoạt động của máy khách như sau:
- Quét các thiết bị quảng cáo dịch vụ chứng thực an toàn và kết nối với chúng.
- Khám phá các dịch vụ và đặc điểm của cơ sở dữ liệu GATT.
- Đọc chứng chỉ thiết bị và chứng chỉ hàng loạt và xác minh chuỗi chứng chỉ bằng chứng chỉ gốc và chứng chỉ gốc được lưu trữ trong flash.
- Gửi một thử thách ngẫu nhiên tới máy chủ.
- Cố gắng xác minh phản ứng trước thử thách.
- Đóng kết nối nếu một trong hai xác minh không thành công.
- Xây dựng và flash dự án máy chủ vào máy chủ WSTK /radioboard của bạn.
- Nhập dự án máy khách từ thư mục máy khách trong tài liệu được cung cấp. Xây dựng và flash dự án máy khách vào máy khách WSTK/radioboard của bạn.
- Nhấn nút reset trên máy khách WSTK và mở bảng điều khiển nối tiếp. Máy khách bắt đầu quét các thiết bị quảng cáo dịch vụ nhận dạng an toàn của chúng tôi và sẽ kết nối khi tìm thấy.
- Máy khách sẽ hiển thị một số thông báo để cho biết đã tìm thấy máy chủ có dịch vụ mong muốn và thông báo trạng thái về việc xác minh chuỗi chứng chỉ.
- Nếu xác minh thành công, máy khách sẽ tạo một số ngẫu nhiên, được gọi là thử thách, và gửi đến máy chủ. Máy chủ sẽ ký thử thách bằng khóa thiết bị riêng được lưu giữ an toàn và chữ ký gửi lại cho máy khách, đây được gọi là phản hồi thử thách. Sau đó, máy khách sử dụng khóa công khai trong chứng chỉ thiết bị đã nhận trước đó để xác minh chữ ký. Điều này được thực hiện để xác nhận rằng máy chủ thực sự có khóa riêng mà nó tuyên bố có. Nếu thử thách được xác minh chính xác, một thông báo sẽ được hiển thị về hiệu ứng đó; nếu không, kết nối sẽ bị đóng và một thông báo sẽ được hiển thị giải thích lý do tại sao.
- Bây giờ hãy gửi một chứng chỉ không hợp lệ để xác nhận rằng quá trình xác minh thực sự hoạt động. Bạn có thể sửa đổi user_read_request_cb() để làm hỏng dữ liệu chứng chỉ hoặc phản hồi thử thách.
Phụ lục A – Khả năng I/O và Phương pháp ghép nối 
Phụ lục B – Các chế độ và mức độ bảo mật
Chế độ bảo mật 1 là chế độ duy nhất được hỗ trợ cho Bluetooth Low Energy trong ngăn xếp của Silicon Labs. Các cấp độ như sau:
- Cấp độ 1 không có bảo mật
- Ghép nối không xác thực cấp độ 2 với mã hóa
- Ghép nối xác thực cấp độ 3 với mã hóa
- Kết nối an toàn được xác thực cấp độ 4 với mã hóa mạnh (trao đổi khóa ECDH)
Tài liệu / Tài nguyên
![]() |
silabs 21Q2 thiết bị BLE an toàn Phòng thí nghiệm bảo mật [tập tin pdf] Hướng dẫn sử dụng 21Q2 thiết bị BLE an toàn Phòng thí nghiệm bảo mật, thiết bị BLE an toàn Phòng thí nghiệm bảo mật, Phòng thí nghiệm bảo mật |