Mã xác thực gói tin

Luồng thông báo đượ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ởi 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 Thiết bị tìm kiếm.

Tạo MAC (mã xác thực gói tin)

Thiết bị tìm kiếm FP thêm mã xác thực gói tin 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 cách nối(khoá tài khoản, 48 byte ZERO).
  2. message là dữ liệu bổ sung của Luồng thông báo.
  3. nonce được tạo bằng cách nối(session_nonce, message_nonce); session nonce và message nonce được xác định trong phần sau.
  4. opad là 64 byte phần đệm bên ngoài, bao gồm các byte lặp lại có giá trị 0x5C.
  5. ipad là 64 byte phần đệm bên trong, bao gồm các byte lặp lại có giá trị 0x36.

Session nonce và message nonce

Để ngăn chặn cuộc tấn công phát lại, Nhà cung cấp cần đảm bảo rằng nonce không được 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à Thiết bị tìm kiếm không đơn giản, nên Nhà cung cấp sẽ tạo session nonce (cho mỗi kết nối), được chia sẻ với tất cả thông báo trong quá trình kết nối, trong khi Thiết bị tìm kiếm tạo message nonce (cho mỗi thông báo), được tạo ngẫu nhiên cho từng thông báo. Nonce để tạo MAC của mỗi thông báo là sự kết hợp của session nonce và message nonce, tức là nối(session_nonce, message_nonce).

Chúng tôi thêm session nonce vào nhóm sự kiện Thông tin thiết bị:

Tên nhóm thông báo Giá trị
Sự kiện thông tin thiết bị 0x03
Tên mã thông báo Giá trị
Session nonce 0x0A

Session nonce phải được tạo và gửi đến Thiết bị tìm kiếm khi Luồng thông báo kết nối:

Octet Loại dữ liệu Mô tả Giá trị
0 uint8 Sự kiện thông tin thiết bị 0x03
1 uint8 Session nonce 0x0A
2 - 3 uint16 Độ dài dữ liệu bổ sung 0x0008
4 - 11 session nonce khác nhau

Để gửi thông báo khi cần có MAC, Thiết bị tìm kiếm sẽ gửi message nonce và MAC cùng với thông báo.

Octet Loại dữ liệu Mô tả Giá trị
0 uint8 Nhóm thông báo khác nhau
1 uint8 Mã thông báo 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 Message nonce khác nhau
n + 9 - n + 16 Mã xác thực gói tin khác nhau

Xác minh MAC (mã xác thực gói tin)

Sau khi nhận được thông báo có mã xác thực gói tin, Nhà cung cấp sẽ xác minh thông báo đó 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 được tạo bằng concat(account key, 48-byte ZEROs), và Nhà cung cấp sẽ duyệt qua tất cả các khoá tài khoản đã lưu trữ để xác minh MAC.
  2. message là dữ liệu bổ sung (không bao gồm message nonce và MAC) của Luồng thông báo.

Nếu MAC chính xác, thì Nhà cung cấp sẽ làm theo hướng dẫn của thông báo. 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 gói tin không chính xác.