Quy trình ghép nối nhanh
Cách thực hiện
Thay vì gọi ngay bất kỳ quy trình liên kết BR/EDR hoặc BLE thông thường nào, trước tiên, Trình tìm kiếm sẽ bật Thông báo về đặc điểm Ghép nối dựa trên khoá, sau đó ghi dữ liệu vào Bảng 1.1 vào đó.
Khi xử lý yêu cầu ghi từ Trình tìm kiếm ghép nối nhanh, Trình cung cấp ghép nối nhanh sẽ thực hiện những việc sau:
- Nếu trường Khoá công khai (không bắt buộc) có:
- Nếu thiết bị không ở chế độ ghép nối, hãy bỏ qua thao tác ghi và thoát.
- Nếu không thì:
- Sử dụng Khoá công khai đã nhận (điểm 64 byte trên đường cong elip secp256r1), Khoá riêng tư chống lừa đảo cài đặt sẵn – cũng như secp256r1 và thuật toán Elliptic-Curve Diffie-Hellman để tạo khoá AES 256 bit.
- Sử dụng SHA-256 để băm khoá AES 256 bit.
- Lấy 128 bit đầu tiên của kết quả. Đây là Khoá AES chống giả mạo, được dùng trong bước tiếp theo.
Hãy thử giải mã giá trị bằng AES-128. Vì giá trị là một khối AES 16 byte, nên không cần chế độ mật mã IV hoặc nhiều khối.
- Nên sử dụng phím nào:
- Nếu Khoá AES chống giả mạo đã được tạo ở bước 1, hãy dùng khoá đó.
- Nếu không, hãy thử từng khoá trong Danh sách khoá tài khoản đã tồn tại.
- Nếu một khoá giải mã thành công giá trị, hãy giải mã và tiếp tục chuyển sang bước tiếp theo.
Giá trị được giải mã thành công nếu đầu ra khớp với định dạng trong Bảng 1.2.1 hoặc Bảng 1.2.2 – (nghĩa là nếu dữ liệu chứa địa chỉ BLE hiện tại của Nhà cung cấp ghép nối nhanh hoặc địa chỉ công khai của Nhà cung cấp ghép nối nhanh).
LƯU Ý: Có đính kèm muối ở cuối gói. Khi có thể, bạn nên theo dõi các dữ liệu ngẫu nhiên này. Nếu Nhà cung cấp nhận được yêu cầu chứa dữ liệu ngẫu nhiên đã sử dụng, thì yêu cầu đó sẽ bị bỏ qua để ngăn các cuộc tấn công phát lại.
Thay vì theo dõi dữ liệu ngẫu nhiên, nếu lượt ghi bao gồm địa chỉ riêng tư của Nhà cung cấp, thì có một cách khác để ngăn các cuộc tấn công phát lại là chuyển tiếp thời gian của lượt xoay địa chỉ riêng tư có thể giải quyết tiếp theo để quá trình xoay xảy ra trước khi lượt ghi Ghép nối dựa trên khoá tiếp theo được chấp nhận.
- Nên sử dụng phím nào:
Nếu không có khoá nào có thể giải mã thành công giá trị, hãy bỏ qua thao tác ghi và thoát.
- Tính toán các lỗi này. Khi số lượng lỗi đạt đến 10, không thực hiện được tất cả các yêu cầu mới ngay lập tức. Đặt lại số lỗi sau 5 phút, sau khi bật nguồn hoặc sau khi thành công.
Nếu không, hãy lưu khoá thành công dưới dạng K. Hãy đánh dấu K này là có thể sử dụng để giải mã các lượt ghi Khoá truy cập và Tên được cá nhân hoá nhận được trên đường liên kết LE này, nhưng không thể sử dụng cho các lượt ghi khác cũng như các lượt ghi trên bất kỳ đường liên kết nào khác. Bắt đầu bộ tính giờ để loại bỏ K sau 10 giây nếu chưa bắt đầu quá trình ghép nối. Đồng thời huỷ K nếu đường liên kết LE này ngắt kết nối.
Tạo Phản hồi thô 16 byte như trong Bảng 1.3, bằng cách nối loại và địa chỉ BR/EDR của Nhà cung cấp, sau đó điền phần còn lại của gói bằng một khối byte ngẫu nhiên (tức là dữ liệu ngẫu nhiên).
Mã hoá Phản hồi thô bằng K để tạo Phản hồi đã mã hoá 16 byte được minh hoạ trong Bảng 1.4. Gửi nội dung này thông qua thông báo về đặc điểm Ghép nối dựa trên khoá.
Đọc cờ yêu cầu:
- Nếu byte Yêu cầu gắn cờ có bit 2 được đặt thành 1, hãy thông báo cho đặc điểm Dữ liệu bổ sung kèm theo tên được cá nhân hoá.
- Nếu byte Yêu cầu cờ có bit 1 được đặt thành 1:
- Điều này cho biết Trình tìm kiếm đang yêu cầu Nhà cung cấp bắt đầu liên kết với địa chỉ BR/EDR của Trình tìm kiếm, hiện ở dạng byte 8-13.
- Gửi yêu cầu ghép nối đến địa chỉ ở Brazil/EDR của Người tìm kiếm. Yêu cầu ghép nối phải như mô tả dưới đây (bước "Trong quá trình ghép nối").
- Lý do cần thiết: Yêu cầu Nhà cung cấp bắt đầu khắc phục một sự cố trên một số thiết bị.
- Nếu byte Yêu cầu cờ có bit 1 được đặt thành 0:
- Chờ tối đa 10 giây để nhận yêu cầu ghép nối. Nếu không nhận được mã, hãy thoát.
- Xin lưu ý rằng đây có thể là yêu cầu ở Brazil/EDR từ một địa chỉ khác (địa chỉ công khai của Người tìm kiếm, thay vì địa chỉ riêng tư có thể phân giải được). Trong quá trình ghép nối, chúng tôi sẽ xác minh lại để đảm bảo rằng thiết bị yêu cầu thuộc K.
Trong khi ghép nối:
- Khi nhận được gói yêu cầu ghép nối/gói phản hồi từ Trình tìm kiếm: Nếu Khả năng của thiết bị trong yêu cầu là NoInput/NoOutput, hãy kết thúc quá trình ghép nối để tránh sử dụng phương thức ghép nối Just Works.
- Đối với gói phản hồi/yêu cầu ghép nối do Nhà cung cấp gửi: Đặt trường Khả năng của thiết bị thành Display/YesNo và đặt Yêu cầu xác thực thành Yêu cầu bảo vệ MITM (Yêu cầu bảo vệ MITM). Thao tác này sẽ kích hoạt phương thức ghép nối So sánh số (còn gọi là Xác nhận khoá truy cập trên Android). Chúng tôi dựa vào điều này để xác nhận rằng thiết bị yêu cầu thực tế là Trình tìm kiếm ghép nối nhanh và không có sự trung gian. Hãy xem ví dụ.
- Lý do cần thiết: Phương thức ghép nối Ngoài băng tần sẽ phù hợp hơn, nhưng nền tảng này không hiển thị phương thức này trên mọi phiên bản Android mong muốn.
Khi cần xác nhận khoá truy cập, hãy chờ tối đa 10 giây để ghi vào đặc điểm Khoá truy cập.
- Thông thường, với phương pháp ghép nối này, người dùng sẽ xác nhận rằng các khoá truy cập hiển thị trên màn hình của mỗi thiết bị là giống nhau. Thay vào đó, chỉ trong quá trình ghép nối này, chúng tôi sẽ chuyển các dữ liệu đó qua BLE và được mã hoá bằng khoá được chia sẻ trước đáng tin cậy.
- Lưu ý rằng bạn không nên áp dụng phương pháp này cho các thiết bị có màn hình hoặc bàn phím, vì phương pháp này sẽ ảnh hưởng đôi chút đến khả năng bảo vệ MITM. Tính năng Ghép nối nhanh hiện chưa hỗ trợ các loại thiết bị đó vì lý do này.
- Nếu bộ tính giờ 10 giây hết hạn mà không ghi khoá truy cập, hãy huỷ K.
Khi một giá trị được ghi vào đặc điểm Khoá truy cập, đó là Khối khoá truy cập đã mã hoá. Giải mã tệp đó bằng K để tạo ra một Khối khoá truy cập thô, có định dạng hiển thị trong Characteristic: Passkey > Bảng 2.2 – (loại = Khoá truy cập của người tìm kiếm).
Nếu giải mã không thành công, hãy bỏ qua yêu cầu ghi và loại bỏ K.
Nếu không, Khoá truy cập thô chứa một khoá truy cập gồm 6 chữ số PSeeker. Đây là khoá truy cập mà Trình tìm kiếm dự kiến.
So sánh PSeeker với khoá truy cập mà chúng ta dự kiến, PProvider.
- Nếu các giá trị bằng nhau, hãy trả lời "có" cho phần xác nhận.
- Nếu không, hãy trả lời "không" cho thông báo xác nhận, khiến quá trình ghép nối không thành công.
Bất kể việc ghép nối không thành công, hãy tạo một Khối khoá truy cập thô khác, có định dạng hiển thị trong Characteristic: Passkey > Bảng 2.2, chứa khoá truy cập dự kiến của chúng ta, PProvider.
- Đảm bảo khối có đúng loại (Khoá truy cập của nhà cung cấp; xem bảng). LƯU Ý: Không sử dụng lại dữ liệu ngẫu nhiên từ Khối khoá truy cập nhận được từ Trình tìm kiếm. Tạo một giá trị ngẫu nhiên mới.
Hãy mã hoá Khối khoá truy cập thô bằng K, rồi gửi kết quả Khối khoá truy cập đã mã hoá thông qua thông báo về đặc tính Khoá truy cập.
Nếu Trình tìm kiếm nhận được và giải mã đúng khoá truy cập P, thì Trình tìm kiếm cũng sẽ trả lời "có" cho xác nhận và quá trình ghép nối sẽ thành công.
- Nếu việc ghép nối thành công, hãy đánh dấu K là có thể sử dụng để giải mã Khoá tài khoản được ghi trên đường liên kết LE này, nhưng không được áp dụng cho mọi lượt ghi Khoá truy cập tiếp theo cũng như mọi lượt ghi trên bất kỳ đường liên kết nào khác. Bắt đầu bộ tính giờ để loại bỏ K sau 10 giây. Ngoài ra, hãy loại bỏ K sau mọi nỗ lực ghi Khoá tài khoản và theo bước 4, nếu đường liên kết LE ngắt kết nối.
- Nếu quá trình ghép nối không thành công, hãy loại bỏ K.
Chuyển trường chức năng của thiết bị về chức năng I/O mặc định và Yêu cầu xác thực thành mặc định để các ghép nối mới tiếp tục như dự kiến.
Lưu ý rằng đối với những Nhà cung cấp không yêu cầu liên kết, Trình tìm kiếm sẽ không gửi yêu cầu ghép nối đến Nhà cung cấp, tức là bước 8 – bước 17 sẽ bị bỏ qua. Ngoài ra, "K" được dùng trong Đặc điểm chính của tài khoản.