SmartQuery /ВОПРОС → ПРИМЕР → ПОНЯТНЫЙ ОТВЕТ
Базы данных

BER-TLV: тег, длина и границы значения

BER — правила кодирования ASN.1, определённые X.690. TLV описывает структуру identifier/tag, length, contents. При разборе всегда важно знать применяемый профиль: ограничения конкретного протокола могут быть строже общих BER.

Пример

04 03 41 42 43
│  │  └────── значение: 3 байта ASCII ABC
│  └───────── длина значения: 3
└──────────── OCTET STRING в этом простом ASN.1 примере

Поле длины считает байты значения, а не весь пакет. Идентификатор может включать класс, признак primitive/constructed и многобайтовый номер тега. Constructed-значение содержит вложенные закодированные элементы, а не произвольный текст.

Длина и ошибки разбора

Короткая форма задаёт небольшую длину прямо в одном байте. Длинная форма сначала сообщает число последующих байтов длины. В BER есть и indefinite form для допустимых случаев; профиль может запрещать её. Поэтому правило «второй байт всегда и есть длина» не работает для общего декодера.

  • Проверьте, что все байты тега и длины доступны до чтения.
  • Проверьте переполнение при вычислении длины и конец текущего контейнера.
  • Ограничьте вложенность и размер значения до выделения памяти.
  • Отклоняйте усечённый элемент, а не дочитывайте за границей буфера.

Где используется

ASN.1-кодирования встречаются в сетевых и криптографических форматах. В сертификатах, например, важны отличия BER и более строгого DER. Сам TLV не шифрует данные, не подтверждает отправителя и не обеспечивает безопасную передачу платёжных реквизитов.

Документация