Mã xác thực thư
Luồng tin nhắn được dùng để định cấu hình tính năng Chuyển đổi âm thanh, xem Thông báo chuyển đổi âm thanh. Đối với những cấu hình quan trọng này, Nhà cung cấp cần nhằm đảm bảo thông báo được gửi bởi GMSCore (mô-đun Ghép nối nhanh) chứ không phải bất kỳ ứng dụng khác trên Seeker.
Tạo MAC (mã xác thực thư)
FP Seeker thêm một mã xác thực tin nhắn cho các thông báo cấu hình thiết bị bằng HMAC-SHA256. MAC của thông báo bao gồm 8 byte đầu tiên của:
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, message)))))
trong đó
- K được tạo bằng concat(khoá tài khoản, 48 byte bằng các chữ số không).
- tin nhắn là dữ liệu bổ sung của Luồng tin nhắn.
- số chỉ dùng một lần do concat(session_nonce, message_nonce); phiên Số chỉ dùng một lần và số chỉ dùng một lần thông báo được định nghĩa trong phần sau.
- opad là 64 byte khoảng đệm bên ngoài, bao gồm các byte lặp lại có giá trị
0x5C
. - ipad là 64 byte khoảng đệm bên trong, bao gồm các byte lặp lại có giá trị
0x36
.
Số chỉ dùng một lần của phiên và số chỉ dùng một lần theo tin nhắn
Để ngăn chặn một cuộc tấn công phát lại, Nhà cung cấp cần đảm bảo rằng số chỉ dùng một lần không lặp lại. Vì việc duy trì đồng bộ hoá bộ đếm hoặc đồng hồ trên cả hai Nhà cung cấp và Trình tìm kiếm không đơn giản, Nhà cung cấp sẽ tạo số chỉ dùng một lần của phiên (cho mỗi kết nối), được chia sẻ với tất cả tin nhắn trong quá trình kết nối, còn Trình tìm kiếm tạo số chỉ dùng một lần thông báo (mỗi thư), được lấy ngẫu nhiên được tạo cho mỗi tin nhắn. Số chỉ dùng một lần để tạo MAC của mỗi thông báo là tổ hợp số chỉ dùng một lần của phiên và số chỉ dùng một lần của thông báo, tức là concat(session_nonce; message_nonce).
Chúng ta thêm một số chỉ dùng một lần theo phiên vào nhóm sự kiện Thông tin thiết bị:
Tên nhóm tin nhắn | Giá trị |
---|---|
Sự kiện thông tin thiết bị | 0x03 |
Tên mã tin nhắn | Giá trị |
---|---|
Số chỉ dùng một lần của phiên | 0x0A |
Số chỉ dùng một lần của phiên phải được tạo và gửi tới Trình tìm kiếm khi RFCOMM kết nối:
Bộ tám | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Sự kiện thông tin thiết bị | 0x03 |
1 | uint8 | Số chỉ dùng một lần của phiên | 0x0A |
2–3 | uint16 | Thời lượng dữ liệu bổ sung | 0x0008 |
4–11 | số chỉ dùng một lần của phiên | khác nhau |
Để gửi tin nhắn khi cần có MAC, người tìm kiếm sẽ gửi một số chỉ dùng một lần tin nhắn và MAC cùng với thông báo.
Bộ tám | Loại dữ liệu | Mô tả | Giá trị |
---|---|---|---|
0 | uint8 | Nhóm thư | khác nhau |
1 | uint8 | Mã tin nhắn | khác nhau |
2–3 | uint16 | Độ dài dữ liệu bổ sung(độ dài dữ liệu bổ sung + 16) | khác nhau |
4 – n | Dữ liệu bổ sung | khác nhau | |
n + 1 - n + 8 | Số chỉ dùng một lần tin nhắn | khác nhau | |
n + 9 - n + 16 | Mã xác thực thư | khác nhau |
Xác minh MAC (mã xác thực thư)
Khi nhận được một tin nhắn có mã xác thực tin nhắn, Nhà cung cấp sẽ xác minh điều này bằng cách sử dụng cùng một hàm với hàm tạo. Tức là MAC nhận được phải bằng 8 byte đầu tiên của
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(section_nonce, message_nonce, message)))))
trong đó:
- K do
concat(account key, 48-byte ZEROs)
tạo và Nhà cung cấp sẽ truyền tải tất cả các khoá tài khoản được lưu trữ để xác minh MAC. - tin nhắn là dữ liệu bổ sung (không bao gồm số chỉ dùng một lần tin nhắn và MAC) của luồng Tin nhắn.
Nếu MAC đúng thì Nhà cung cấp phải thực hiện theo hướng dẫn của . Nếu không, Nhà cung cấp sẽ gửi NAK kèm theo lý do lỗi, 0x3 – không được phép do mã xác thực tin nhắn không chính xác.