TR-069, Приложение E: формат подписанного пакета |
![]() |
Добавил(а) microsin | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
В этом приложении к протоколу CWMP [1] описывается формат подписанного пакета, который может использоваться для защищенной загрузки файлов в принимающее устройство. Этот формат позволяет инкапсулировать один или несколько файлов в один подписанный пакет. Формат пакета позволяет получателю аутентифицировать источник, и в пакете содержатся инструкции для распаковки пакета и установки его содержимого. Примечание: расшифровку незнакомых терминов и аббревиатур см. в разделе "1.6. Терминология" статьи [16], там также приведен перевод общего описания протокола CWMP/TR-069 из документации [1]. Формат подписанного пакета предназначен для использования в загрузках файлов с сервера по протоколам HTTP, HTTPS или FTP, или другими способами передачи файла из удаленного или локального источника. [E.2. Структура Signed Package Format] Базовый формат файла подписанного пакета показан на рис. 8. Рис. 8. Signed Package Format. Общее описание каждого из компонентов подписанного пакета приведено в таблице 65. Таблица 65. Краткое описание составляющих компонентов подписанного пакета.
E.2.1. Соглашения по кодированию. В этом документе используются следующие соглашения кодирования, если специально не указано нечто иное: • Multi-octet (многобайтные) числовые значения кодируются в сетевом порядке байт (network byte order, big endian format). [E.3. Формат заголовка] Заголовок подписанного пакета составляет структуру размером в 24 октета (байта). Формат заголовка определен в таблице 66. Таблица 66. Signed package header format.
[E.4. Формат списка команд] Каждая команда в списке имеет формат, показанный в таблице 67. Таблица 67. Command format.
Если получатель этого формата файла находит неизвестное ему значение Type, он ДОЛЖЕН игнорировать команду и продолжить анализ оставшейся части пакета, используя значение Length, чтобы перейти к следующей команде, если таковая имеется. E.4.1. Типы команд. Список команд содержит команды двух типов: параметры пакета и предпринимаемые действия. Примеры параметров пакета включают software version содержащегося ПО, или таймаут для остальной части загрузки. Примеры действий: добавление (add), удаление (delete) и перемещение (move). Действия, предпринимаемые совместно в порядке, указанном списком команд, определяют последовательность изменений файловой системы, необходимых для распаковки и установки содержащихся в полезной нагрузке файлов. У связанных с файлами команд есть 2 варианта: один работает с явными файлами, и другой, который работает с файлами определенных версий (versioned file). Имя versioned-файла фиксировано "базой" длиной до 8 символов, и "расширением" из 3 символов. Каждый раз, когда содержимое versioned-файла обновляется, его расширение меняется на новое значение, показывающее версию файла. Поэтому, если при апгрейде нужно заменить versioned-файл, необходимо удалить любой существующий файлом с тем же базовым именем, но другим расширением. Специальные команды, определенные этой спецификацией, перечислены в таблице 68. Таблица 68. Общая информация по типам команд.
E.4.2. Команда End. Эта команда обозначает конец списка команд. Она необязательно должна присутствовать в списке команд, однако если она встретилась, то получатель ДОЛЖЕН прекратить парсинг остальной части списка команд в пакете. Параметр Length для этой команды ДОЛЖЕН быть 0 (ноль), показывая тем самым, что дальше нет поля Value. E.4.3. Команды Extract и Add. Команды распаковки (extract) и добавления (add) включают Extract File, Extract Versioned File, Add File и Add Versioned File. Команды extract инструктируют получателя пакета удалить любые существующие файлы с таким же именем, и заменить его на файл, указанный в полезной нагрузке. Команды add инструктируют получателя сначала проверить существующий файл с таким же именем, и установить новый файл только тогда, когда не найден существующий файл с таким же именем. Для вариантов этих команд, относящихся к versioned-файлу, перечисленные выше операции вышеуказанные операции рассматривают существующий файл как любой файл с тем же базовым именем, что и указанный файл. Т. е. команда Extract Versioned File удалит все существующие файлы с таким же базовым именем и любым расширением перед тем, как установит новый файл. Подобным образом команда Add Versioned File проверит существование любого файла с таким же базовым именем, как у указанного файла, независимо от расширения, и устанавливает файл только в том случае, если такой файл не найден. Когда новый файл должен быть помещен в директорию, которая не существует, получатель ДОЛЖЕН создать требуемую директорию. Все команды extract и add содержат в команде порцию Value. Формат этой информации определен в таблице 69. Таблица 69. Формат Value для команд extract и add.
E.4.4. Команды Remove. Это команды удаления, которые включают Remove File, Remove Versioned File и Remove Sub-Tree. Команда Remove File удалит файл по указанному пути, если такой файл существует. Команда Remove Versioned File удалит все файлы с тем же базовым именем, что и указанный файл, независимо от расширения. Команда Remove Sub-Tree удалит все файлы и директории ниже и включая по указанному пути. Во всех командах remove присутствует информация в порции Value команды. Формат этой информации определен в таблице 70. Таблица 70. Формат поля Value для команд remove.
E.4.5. Команды Move. К командам переименования (move) относятся Move File и Move Versioned File. Команда Move File переименовывает файл в новое имя, указанное в этой команде. Если указанный путь назначения это другая директория, то файл перемещается в указанную директорию назначения. Команда Move Versioned File переместит файл с совпавшим базовым именем, указанным в пути источника, независимо от расширения. Если в указанной директории присутствует несколько таких файлов, то только один из файлов переименовывается, а остальные файлы удаляются. Если строка расширения versioned-файла это десятичное число, то файл с самым маленьким значением этого числа перемещается, и остальные файлы удаляются. Во всех случаях, если файл с таким же именем уже существует, которое указано как путь файла назначения, команды move перезапишут этот файл. Если указанный в команде move файл источника не существует, то никакие действия не производятся, и получатель продолжает обрабатывать остальные команды в списке команд. Все move-команды содержат в себе порцию Value. Формат этой информации определен в таблице 71. Таблица 71. Формат поля Value для команд move.
E.4.6. Команды Version и Description. Поле обоих команд версии (Version) и описания (Description) содержат одну строкуUTF-8, используемую для информации, отображения или документирования в логе. Поле Version предназначено, чтобы показать общую версию, связанную с пакетом. Например, если пакет содержит обновление программы (software upgrade, которое может включать в себя несколько отдельных файлов), то поле Version может использоваться, чтобы показать новую версию ПО, связанную с апгрейдом. E.4.7. Команды Timeout. Команды таймаута включают Initial Timeout, Initial Activity Timeout, Recoverable Timeout и Unrecoverable Timeout. Команды таймаута задают значение таймаута для продолжения загрузки файла пакета до момента, когда загрузка должна быть закончена. Эти команды предназначены для случая, когда порции команды и сигнатуры пакета загружаются и интерпретируются перед загрузкой остальной части файла пакета. Команды таймаута могут использоваться для управления параметрами таймаута, связанными с процессом загрузки этого типа. Если пакет загружен или принят целиком до интерпретации содержимого пакета, то команды таймаута могут игнорироваться. Каждая команда таймаута включает информацию в порции Value команды. Формат этой информации определен в таблице 72. Таблица 72. Формат Value для команд таймаута.
Каждая команда таймаута может указать свое отдельное значение, где поле Timeout в такой команде показывает нужное значение таймаута. Использование каждого значения таймаута основано на состоянии получателя, когда он обрабатывает команды, используя модель перехода состояний, показанную на рис. 9. На рисунке показаны переходы состояний, которые происходят при последовательной обработке каждой команды. Для каждой команды состояние остается неизменным до момента, когда происходит один из случаев, указанных стрелками перехода состояния. Рис. 9. Диаграмма состояний процесса загрузки для модели таймаута. Показанная выше диаграмма состояний используется во время загрузки, чтобы определить, какое значение таймаута использовать. Определение каждого типа таймаута, связанного с командами таймаута, показаны в таблице 73. Таблица 73. Определения Timeout-комад.
E.4.8. Команда Reboot. Эта команда показывает, что получатель перезагрузится, чтобы процесс инсталляции завершился. Если это используется, то эта команда ДОЛЖНА быть последней в списке команд (кроме End, если она присутствует). Параметр Length для этой команды ДОЛЖЕН быть установлен в 0 (ноль), показывая тем самым, что дальше не идет поле Value. E.4.9. Format File System. Эта команда показывает, что получатель переформатирует свою файловую систему как часть процесса установки. Если это используется, то подразумевается, что все существующие файлы в файловой системе (или часть файловой системы, относящаяся к процессу инсталляции) очищаются и перезаписываются новыми файлами из пакета. Параметр Length для этой команды ДОЛЖЕН быть 0 (ноль), показывая тем самым, что дальше не идет поле Value. E.4.10. Команды Minimum Version и Maximum Version. Эти команды используются для указания диапазона номеров версий ПО, для которых предназначен пакет. Когда этими командами в пакете указан минимальный и/или максимальный номер версии, получатель НЕ ДОЛЖЕН устанавливать файлы, или предпринимать какие-либо другие действия, указанные в списке команд, если версия ПО получателя выходит за пределы показанного диапазона. Эта команда может использоваться только в том случае, если формат фактической версии программного обеспечения, связанной с получателем, находится в иерархическом формате, который можно сравнить численно с помощью процедур, описанных ниже. Команды минимальной и максимальной версий включают информацию в порции Value команды. Формат этой информации показан в таблице 74. Таблица 74. Формат Value для команд минимума и максимума версий.
Для определения, попадает ли версия в указанный диапазон, используется следующая процедура. Если предоставлена команда Minimum Version, то каждый элемент в массиве Version, начиная с первого (самого старшего) элемента: 1. Если этот элемент актуальной версии получателя больше, чем соответствующий элемент в Minimum Version, то версия получателя удовлетворяет требованию, и процедура обновления выполнится. 2. Если этот элемент актуальной версии получателя меньше, чем соответствующий элемент в Minimum Version, то версия получателя не удовлетворяет требованию. В этом случае получатель НЕ ДОЛЖЕН устанавливать файлы в этом пакете или выполнять любые из оставшихся команд. 3. Иначе (значения равны): a. Если это последний элемент в массиве, то версия получателя удовлетворяет требованиям, и процедура установки завершится. Если предоставлена команда Maximum Version, то каждый элемент в массиве Version, начиная с первого (самого старшего) элемента: 1. Если этот элемент актуальной версии получателя меньше, чем соответствующий элемент Maximum Version, то версия ПО получателя удовлетворяет требованию, и процедура обновления выполнится. 2. Если этот элемент актуальной версии получателя больше, чем соответствующий элемент в Maximum Version, то версия получателя не удовлетворяет требованию. В этом случае получатель НЕ ДОЛЖЕН устанавливать файлы в этом пакете или выполнять любые из оставшихся команд. 3. Иначе (значения равны): a. Если это последний элемент в массиве, то версия получателя удовлетворяет требованиям, и процедура установки завершится. E.4.11. Команда Role. Команда роли используется, чтобы показать целевое приложение или назначение пакета. Он предназначен для указания любых побочных эффектов или постобработки, которые могут потребоваться для конкретного пакета. Команда роли включает информацию в порцию Value команды. Формат этой информации определен в таблице 75. Таблица 75. Формат Value для команды роли.
E.4.12. Команды Minimum Storage. Эти команды включают Minimum Volatile Storage Size и Minimum Non-Volatile Storage Size. Команды минимума хранилища показывают минимальное требование для устройства получателя, чтобы оно могло установить файлы, содержащиеся в пакете. Если эти команды присутствуют, то они показывают минимальное требование для типа хранилища, задаваемое именем команды. Если устройство получателя не удовлетворяет требованию указанного минимума хранилища, то получатель ДОЛЖЕН не устанавливать любые файлы в пакете, и НЕ ДОЛЖЕН продолжать выполнение команд. Команды минимума хранилища включают информацию в порции Value команды. Формат этой информации показан в таблице 76. Таблица 76. Формат Value format для команд minimum storage.
E.4.13. Команда Required Attributes. Эта команда используется, чтобы указать дополнительные атрибуты устройства получателя, которые требуются, чтобы можно было считать пакет допустимым для установки. В одном пакете может быть одна или несколько команд Required Attributes, каждая из которых показывает отдельный класс требуемых атрибутов. Команда Required Attribute включает информацию в порции Value команды. Формат этой информации определен в таблице 77. Таблица 77. Формат Value для команды требуемых атрибутов.
[E.5. Signatures] Секция сигнатур следует в файле пакета непосредственно за секцией списка команд. Здесь содержится блок цифровой подписи, использующий синтаксис сигнатуры PKCS #7 [14]. В частности, блок сигнатур включает ровно один объект SignedData PKCS # 7, который содержит ноль или более сигнатур со следующими ограничениями: • Сигнатуры являются "external signatures" (внешние сигнатуры). Это означает, что подписанное сообщение не инкапсулируется в объекте SignedData. Вместо этого подписанные данные сообщения состоят из строки байт, сформированной компонентами заголовка и списка команд пакета. Если блок сигнатур содержит больше одной подписи, то как минимум одна из сигнатур должна быть успешно проверена для получателя, чтобы пакет можно было считать доверенным. Если получатель пакета ожидает одну или несколько сигнатур, то получатель ДОЛЖЕН проверить сигнатуру или сигнатуры до обработки команд, содержащихся в списке команд. Если ни одна из включенных подписей не прошла проверку, то получатель НЕ ДОЛЖЕН обрабатывать никакие команды в списке команд, или устанавливать любые файлы, содержащиеся в пакете. Если реализация получателя устроена таким образом, что проверка и обработка списка команд должны выполняться без загрузки всего файла пакета из его источника, то получатель МОЖЕТ предположить, что комбинированная длина заголовка, списка команд и блока сигнатур не больше 150 килобайт. Обратите внимание, что хотя подписанные данные сообщения включают только заголовок пакета и список команд, подпись гарантирует целостность всего пакета, поскольку все команды, которые ссылаются на файлы полезной нагрузки, включают хеш содержимого файла. Также имейте в виду, что могут быть добавлены дополнительные сигнатуры в существующий подписанный файл пакета без модификации любой части файла пакета, кроме самого блока сигнатур. Формат пакета структурирован таким образом, чтобы другое содержимое (заголовок, список команд и полезная нагрузка) файла пакета не менялось, если меняется длина блока сигнатур. [Ссылки] 1. TR-069: CPE WAN Management Protocol https://www.broadband-forum.org/pdfs/tr-069-1-1-0.pdf. |