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, hãy xem bài viết Thông báo chuyển đổi âm thanh. Đối với các cấu hình quan trọng này, Nhà cung cấp cần đảm bảo rằng thông báo được gửi bằng GMSCore (mô-đun Ghép nối nhanh) chứ không phải bất kỳ ứng dụng nào khác trên Trình tìm kiếm.

Tạo MAC (mã xác thực tin nhắn)

FP Seeker thêm mã xác thực thông báo cho 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 đó

  1. K do concat(khoá tài khoản, số ZERO8 48 byte tạo).
  2. tin nhắn là dữ liệu bổ sung của Luồng tin nhắn.
  3. số chỉ dùng một lần được tạo bởi concat(session_nonce, nhắn_nonce); số chỉ dùng một lần và số chỉ dùng một lần thông báo được xác định trong phần sau.
  4. opad là 64 byte thuộc khoảng đệm ngoài, bao gồm các byte lặp lại có giá trị 0x5C.
  5. ipad là 64 byte của 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 thông báo

Để ngăn chặn cuộc tấn công phát lại, Trì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á đồng hồ hoặc bộ đếm trên cả Nhà cung cấp và Trình tìm kiếm không đơn giản, nên Nhà cung cấp tạo số chỉ dùng một lần của phiên (trên mỗi kết nối) được chia sẻ với mọi thông báo trong quá trình kết nối, trong khi Trình tìm kiếm tạo số chỉ dùng một lần thông báo (trên mỗi thông báo), được tạo ngẫu nhiên cho mỗi thông báo. 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 thông báo, tức là concat(session_nonce, nhắn_nonce).

Chúng ta thêm một số chỉ dùng một lầ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ã thông báo Giá trị
Số chỉ dùng một lần của phiên 0x0A

Số chỉ dùng một lần phiên sẽ được tạo và gửi đến Người tìm kiếm khi RFCOMM kết nối:

Hình bát giác Loại dữ liệu Nội dung 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ông cố định

Để gửi thông báo khi cần có MAC, Trình tìm kiếm sẽ gửi một số chỉ dùng một lần thông báo và MAC cùng với thông báo.

Hình bát giác Loại dữ liệu Nội dung mô tả Giá trị
0 uint8 Nhóm tin nhắn không cố định
1 uint8 Mã thông báo không cố định
2 – 3 uint16 Độ dài dữ liệu bổ sung(độ dài dữ liệu bổ sung + 16) không cố định
4 – n Dữ liệu bổ sung không cố định
n + 1 - n + 8 Số chỉ dùng một lần tin nhắn không cố định
n + 9 - n + 16 Mã xác thực thư không cố định

Xác minh MAC (mã xác thực tin nhắn)

Khi nhận được một thông báo có mã xác thực thông báo, Nhà cung cấp sẽ xác minh thông báo đó bằng cách sử dụng hàm tương tự như hàm tạo. Nghĩa 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 đó:

  1. K do concat(account key, 48-byte ZEROs) tạo và Nhà cung cấp sẽ truyền tải mọi khoá tài khoản đã lưu trữ để xác minh MAC.
  2. thông báo là dữ liệu bổ sung (không bao gồm số chỉ dùng một lần của thông báo và MAC) của Luồng thông báo.

Nếu MAC là chính xác thì Nhà cung cấp sẽ tuân theo hướng dẫn của thông báo. Nếu không, Nhà cung cấp sẽ gửi NAK với lý do lỗi, 0x3 – không được phép do mã xác thực thông báo không chính xác.