Тип поля 7 в ответном сообщении аутентификации протокола Google Cast v2 - PullRequest
0 голосов
/ 08 апреля 2019

Протокол Google Cast v2 широко переработан и поэтому уже хорошо известен. Хорошим примером этого является репозиторий библиотеки Cast v2 Node на GitHub , который включает подробное описание протокола cast v2.

Однако, когда я писал собственную реализацию протокола на Java с использованием Netty, я понял, что ответное сообщение аутентификации намного сложнее, чем описано в связанном репозитории.

Согласно хранилищу сообщение должно выглядеть так:

message AuthResponse {
  required bytes signature = 1;
  required bytes client_auth_certificate = 2;
  repeated bytes client_ca = 3;
}

Однако клиент отправляет еще 3 поля. У них есть индексы 4, 6 и 7.

Поле 4 относится к проводному типу VARINT и, насколько мне известно, обозначает алгоритм Signature для устройства с поддержкой Cast (Chromecast Gen2 и Chromecast Audio).

Поле 6 также имеет тип VARINT, но я понятия не имею, что оно означает. Во время тестирования оно всегда имело значение 0. (Может быть, оно обозначает сертификат client_ca, используемый для подписи client_auth_certificate?)

Поле 7 имеет тип провода LENGTH_DELIMITED. Это определенно не строка в кодировке UTF-8, поскольку ее распечатка приводит к нечитаемому беспорядку Однако распечатанная последовательность содержит полный адрес, который также использовался в client_ca и client_auth_certificate, поэтому я считаю, что это как-то связано с этим. Я уже проверял, может ли это быть сертификат или ключ RSA, но оба теста были отрицательными. Файл, содержащий необработанную последовательность байтов, можно найти здесь .

Это подводит меня, наконец, к моему вопросу:

Знаете ли вы, что означают поля 6 и 7? Предположения, основанные на структуре файла, также высоко ценятся.

1 Ответ

0 голосов
/ 09 апреля 2019

Как я выяснил, протокол практически с открытым исходным кодом, поскольку проект Chromium включает в себя соответствующие .proto-файлы для поддержки потоковой передачи на устройствах с поддержкой Cast.

Полный протокол можно найти здесь: https://github.com/chromium/chromium/blob/master/components/cast_channel/proto/cast_channel.proto

Следовательно, структура сообщения AuthResponse:


message AuthResponse {
  required bytes signature = 1;
  required bytes client_auth_certificate = 2;
  repeated bytes intermediate_certificate = 3;
  optional SignatureAlgorithm signature_algorithm = 4
      [default = RSASSA_PKCS1v15];
  optional bytes sender_nonce = 5;
  optional HashAlgorithm hash_algorithm = 6 [default = SHA1];
  optional bytes crl = 7;
}
...