Bonding (ghép nối) trong Bluetooth Low Energy là quá trình tạo kết nối bảo mật vĩnh viễn giữa hai thiết bị bằng cách lưu trữ khóa mật mã trong bộ nhớ không bay hơi. Sau khi bonding, các thiết bị có thể tự động khôi phục kết nối đã mã hóa khi kết nối lại mà không cần nhập lại PIN hoặc xác nhận của người dùng. Theo Bluetooth SIG Core Specification v5.4 (2025), cơ chế bonding là bắt buộc đối với các thiết bị yêu cầu tự động kết nối lại — tai nghe, trình theo dõi thể dục, cảm biến y tế và phụ kiện IoT.
Điểm chính
Bonding là phần mở rộng của quá trình pairing trong Bluetooth Low Energy, nơi các thiết bị lưu trữ khóa mã hóa cho các kết nối sau này. Tiêu chuẩn BLE định nghĩa ba chế độ bảo mật: Security Mode 1 (mã hóa không xác thực), Security Mode 2 (ký dữ liệu không mã hóa) và Security Mode 3 (mã hóa có xác thực). Bonding phù hợp với các chế độ mã hóa khi cần kết nối lặp lại mà không tái tạo khóa.
Mục đích chính của bonding là tự động khôi phục các kết nối đã mã hóa khi các thiết bị kết nối lại. Khi người dùng lấy tai nghe ra khỏi hộp và đeo vào, bonding đảm bảo kết nối tức thời với điện thoại thông minh mà không cần chọn lại thiết bị trong menu Bluetooth. Theo Apple Bluetooth Design Guidelines (2025), các thiết bị đã liên kết phải kết nối trong vòng không quá 2 giây kể từ khi phát hiện.
Trong quá trình bonding, mỗi thiết bị lưu trữ một tập vật liệu mật mã: Long Term Key (LTK) để mã hóa kết nối, Identity Resolving Key (IRK) để giải quyết địa chỉ ngẫu nhiên và Connection Signature Resolving Key (CSRK) để xác minh chữ ký dữ liệu. LTK là khóa chính 128 bit được tạo trong quá trình pairing và được sử dụng cho tất cả các phiên mã hóa sau đó.
| Khóa | Độ dài | Mục đích |
|---|---|---|
| LTK | 128 bit | Mã hóa dữ liệu sau khi kết nối lại |
| IRK | 128 bit | Giải quyết địa chỉ riêng ngẫu nhiên (RPA) |
| CSRK | 128 bit | Ký và xác minh tính xác thực dữ liệu |
Pairing là việc thương lượng tạm thời các khóa để mã hóa phiên giao tiếp hiện tại. Khi kết nối kết thúc, các khóa mã hóa bị xóa và kết nối tiếp theo yêu cầu một quá trình pairing đầy đủ mới. Bonding bao gồm tất cả các giai đoạn pairing nhưng bổ sung lưu trữ khóa cho các phiên trong tương lai. Hầu như tất cả các thiết bị Bluetooth tiêu dùng (tai nghe, loa, đồng hồ) đều sử dụng bonding vì nếu không, mỗi kết nối sẽ yêu cầu nhập lại PIN.
Quá trình pairing theo đặc tả BLE bao gồm ba giai đoạn. Giai đoạn 1 — trao đổi khả năng thiết bị (khả năng IO, hỗ trợ xác thực). Giai đoạn 2 — tạo và trao đổi Short Term Key (STK) hoặc LTK, tùy theo phương thức ghép nối. Giai đoạn 3 — vận chuyển khóa: trao đổi LTK, IRK, CSRK giữa các thiết bị. Nếu các thiết bị đã lưu khóa sau Giai đoạn 3 — đây là bonding. Nếu không — đó chỉ là pairing.
| Tham số | Pairing | Bonding |
|---|---|---|
| Lưu trữ khóa | Không lưu | Lưu trong NVRAM |
| Tự động kết nối lại | Không | Có |
| Nhập lại PIN | Yêu cầu | Không yêu cầu |
| Sử dụng | Kết nối không thường xuyên | Thiết bị thường trực |
Quá trình bonding được bắt đầu sau khi hoàn thành pairing thành công, khi một thiết bị gửi yêu cầu lưu trữ khóa. Trong BLE, Central (thường là điện thoại thông minh) và Peripheral (thiết bị đeo) trao đổi khóa qua kênh bảo mật được thiết lập ở Giai đoạn 2. Sau khi trao đổi khóa thành công, mỗi thiết bị lưu chúng trong bộ nhớ không bay hơi cùng với địa chỉ MAC hoặc Identity Address của đối tác.
ở phía Central (iOS/Android), các khóa được lưu trong bộ nhớ Bluetooth hệ thống. iOS sử dụng ngăn xếp hệ thống Core Bluetooth với quản lý bonding tự động: khi ghép nối lần đầu, các khóa được lưu trong NVRAM của thiết bị và các kết nối sau đó với cùng Peripheral diễn ra tự động. Nhà phát triển không quản lý trực tiếp khóa — ngăn xếp hệ thống Core Bluetooth xử lý bonding tự động khi kết nối với thiết bị hỗ trợ lưu trữ khóa.
Khi kết nối lại, Peripheral gửi các gói quảng cáo chứa địa chỉ công khai hoặc Resolvable Private Address (RPA). Central nhận gói tin, so khớp địa chỉ với các thiết bị đã liên kết được lưu và nếu tìm thấy sự trùng khớp, sẽ bắt đầu khôi phục phiên bằng LTK đã lưu. Nếu LTK trùng khớp, kết nối đã mã hóa được thiết lập mà không cần pairing lại.
Đặc tả BLE định nghĩa một số phương thức xác thực ảnh hưởng đến mức độ bảo mật của bonding. Việc lựa chọn phương thức phụ thuộc vào khả năng IO của thiết bị — có màn hình, bàn phím hay khả năng xác nhận so sánh số. Bonding an toàn yêu cầu sử dụng ít nhất Just Works cho các ứng dụng không quan trọng và Numeric Comparison hoặc Passkey Entry cho các tác vụ cần bảo vệ khỏi các cuộc tấn công Man-in-the-Middle.
Just Works là phương thức không xác thực được sử dụng khi một trong các thiết bị không có màn hình hoặc bàn phím. Các khóa mã hóa được truyền mà không xác minh danh tính của thiết bị thứ hai — cảm biến nhiệt độ, máy theo dõi nhịp tim. Just Works dễ bị tấn công MITM, do đó chỉ được sử dụng cho các thiết bị mà việc xâm phạm dữ liệu không gây ra mối đe dọa.
Numeric Comparison là phương thức xác thực trong đó cả hai thiết bị hiển thị một số có sáu chữ số và người dùng phải xác nhận sự trùng khớp. Phương thức này cung cấp khả năng bảo vệ khỏi các cuộc tấn công MITM và được khuyến nghị cho các thiết bị có màn hình — đồng hồ thông minh, trình theo dõi thể dục, điều khiển từ xa. Sau khi xác nhận, bonding được lưu với mức tin cậy tối đa.
Passkey Entry yêu cầu nhập PIN gồm sáu chữ số trên một trong các thiết bị. Thông thường, mã được tạo bởi một thiết bị và hiển thị trên đó, trong khi người dùng nhập mã trên thiết bị thứ hai. Phương thức này được sử dụng cho các thiết bị y tế và khóa IoT khi cần mức bảo mật cao nhưng một trong các thiết bị không có màn hình cho Numeric Comparison.
Quản lý bonding là quá trình xem, xóa và bảo trì các khóa đã lưu của các thiết bị đã ghép nối. Trong phát triển di động, điều quan trọng là phải xử lý chính xác trạng thái của các thiết bị đã liên kết, đặc biệt khi thiết bị ngoại vi bị đặt lại hoặc thay thế phần mềm cơ sở. Khi khóa bonding trên Peripheral thay đổi, các khóa cũ trên Central phải được xóa và thực hiện ghép nối mới.
iOS tự động quản lý các thiết bị đã liên kết thông qua ngăn xếp hệ thống Core Bluetooth. Nhà phát triển không có API trực tiếp để xem hoặc xóa từng thiết bị đã liên kết — việc quản lý được thực hiện thông qua cài đặt hệ thống (Settings > Bluetooth > thiết bị > Forget). Nếu cần xóa bonding theo chương trình, ứng dụng có thể chuyển hướng người dùng đến cài đặt Bluetooth hệ thống bằng UIApplication.openSettingsURLString.
Android cung cấp API trực tiếp để làm việc với các thiết bị đã liên kết thông qua lớp BluetoothAdapter. Phương thức getBondedDevices() trả về Set<BluetoothDevice> của tất cả các thiết bị đã ghép nối. Để xóa bonding, phương thức removeBond() được sử dụng thông qua phản xạ hoặc trên Android 12+ sử dụng API chính thức BluetoothDevice.removeBond().
val adapter = BluetoothAdapter.getDefaultAdapter()
val bondedDevices: Set<BluetoothDevice> = adapter.getBondedDevices()
bondedDevices.forEach { device ->
Log.d("Bonding", "Bonded device: ${device.name}, ${device.address}")
}
Triển khai bonding trên Android yêu cầu xử lý chính xác BroadcastReceiver cho các sự kiện BluetoothDevice.ACTION_BOND_STATE_CHANGED. Khi kết nối lần đầu với một thiết bị, hệ thống Android tự động bắt đầu bonding nếu thiết bị hỗ trợ khả năng này. Nhà phát triển phải xử lý ba trạng thái: BOND_NONE (chưa ghép nối), BOND_BONDING (đang ghép nối), BOND_BONDED (đã ghép nối).
val bondReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE)
val bondState = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, -1)
when (bondState) {
BluetoothDevice.BOND_BONDED -> Log.d("Bonding", "Bonded: ${device.name}")
BluetoothDevice.BOND_NONE -> Log.d("Bonding", "Đã xóa liên kết")
}
}
}
Để bắt đầu bonding trên Android, phương thức createBond() phải được gọi trên đối tượng BluetoothDevice. Phương thức trả về giá trị boolean — true nếu quá trình ghép nối được bắt đầu thành công. Bắt đầu từ Android 12, createBond() yêu cầu quyền BLUETOOTH_CONNECT và có thể bị hệ thống từ chối nếu ứng dụng không có quyền truy cập Bluetooth nền.
fun initiateBonding(device: BluetoothDevice) {
if (device.bondState == BluetoothDevice.BOND_NONE) {
val success = device.createBond()
if (success) {
Toast.makeText(context, "Bonding đã bắt đầu", Toast.LENGTH_SHORT)
}
}
}
Các nhà phát triển ứng dụng di động thường gặp phải các lỗi phổ biến khi làm việc với bonding thiết bị BLE. Xử lý không đúng các trạng thái bonding có thể dẫn đến lỗi kết nối, không thể ghép nối lại hoặc mất dữ liệu. Hãy xem xét các vấn đề phổ biến nhất và cách giải quyết chúng.
Sau khi cập nhật phần mềm cơ sở của thiết bị BLE, các khóa bonding có thể bị đặt lại, nhưng điện thoại thông minh vẫn tiếp tục lưu trữ các khóa cũ (stale bonding). Khi cố gắng kết nối, Central cố gắng khôi phục phiên với LTK cũ, Peripheral từ chối khóa và kết nối thất bại. Giải pháp là xóa bonding trên điện thoại thông minh qua Settings > Bluetooth > Forget Device và thực hiện ghép nối mới.
Các chip BLE có giới hạn về số lượng bản ghi bonding được lưu trữ. Đối với các chip Nordic nRF5x phổ biến, giới hạn là 8-20 bản ghi tùy theo cấu hình. Khi vượt quá giới hạn, thiết bị ngừng chấp nhận ghép nối mới. Giải pháp là xóa các bản ghi bonding không sử dụng hoặc sử dụng vòng khóa ưu tiên có dọn dẹp.
Khi sử dụng Tính năng Riêng tư (địa chỉ MAC ngẫu nhiên), thiết bị định kỳ thay đổi địa chỉ của nó. Nếu Central không lưu IRK, nó không thể khớp địa chỉ ngẫu nhiên mới với một thiết bị đã biết. Giải pháp là triển khai đúng cách lưu trữ IRK và sử dụng nó để giải quyết RPA mỗi khi phát hiện thiết bị.
Câu hỏi thường gặp
Bonding trong Bluetooth Low Energy là quá trình lưu trữ các khóa mã hóa (LTK, IRK, CSRK) sau khi kết thúc phiên pairing, để tự động khôi phục kết nối bảo mật khi kết nối lại sau đó mà không cần nhập lại PIN hoặc xác nhận.
Pairing là việc thương lượng tạm thời các khóa cho phiên hiện tại, sẽ bị xóa khi ngắt kết nối. Bonding bao gồm toàn bộ quá trình pairing cộng với lưu trữ khóa cho các kết nối trong tương lai. Bonding cần thiết cho các thiết bị tự động kết nối lại — tai nghe, đồng hồ, trình theo dõi thể dục.
Trên iPhone, việc xóa bonding được thực hiện qua cài đặt hệ thống: Settings > Bluetooth > nhấn vào biểu tượng thông tin (i) bên cạnh thiết bị > chọn Forget This Device. Sau đó, các khóa mã hóa sẽ bị xóa và lần kết nối tiếp theo sẽ yêu cầu ghép nối mới.
Số lượng thiết bị đã liên kết phụ thuộc vào dung lượng bộ nhớ không bay hơi của chip BLE. Điện thoại thông minh có thể lưu trữ hàng trăm bản ghi, trong khi các thiết bị ngoại vi BLE giá rẻ bị giới hạn ở 8-20 bản ghi. Khi vượt quá giới hạn, các bản ghi cũ sẽ bị ghi đè hoặc thiết bị ngừng chấp nhận ghép nối mới.
Stale bonding là tình huống khóa mã hóa trên một thiết bị (thường là Peripheral) đã bị đặt lại (ví dụ, sau khi cập nhật phần mềm cơ sở), nhưng Central vẫn giữ các khóa cũ. Kết quả là kết nối không thể được thiết lập cho đến khi người dùng xóa stale bonding qua cài đặt Bluetooth và thực hiện ghép nối mới.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm