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 đó

  1. K được tạo bằng concat(khoá tài khoản, 48 byte bằng các chữ số không).
  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 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.
  4. 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.
  5. 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 đó:

  1. 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.
  2. 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.