Основы


Файлом называется последовательность байтов конечной длины. Байт — это 8 бит информации в числовом диапазоне значений от 0 (включая) до 256 (исключая). Стандарт OpenPGP оперирует словом "октет" вместо "байт". Биты могут принимать значения 0 и 1. Первый бит байта, бит с порядковым номером 0, — наиболее значащий (старший) бит; последний бит 7 — наименее значащий (младший) бит. Стандартная кодировка в OpenPGP — Big-Endian. Это означает, что если число закодировано с помощью нескольких байтов, первый байт будет наиболее значащим. 1

Значения байтов приводятся как десятичные числа, если только они не сгруппировано в пары символов: в этом случае это шестнадцатеричные числа. К примеру, 70 само по себе неоднозначно, 00 70 — шестнадцатеричное, 3 — десятичное, 03 — шестнадцатеричное. Кое-где я буду предварять шестнадцатеричные числа префиксом 0x, дабы особо подчеркнуть, что они шестнадцатеричные.

Фраза "старый формат" (old format), часто встречающаяся по тексту стандарта, относится к элементам OpenPGP, оставленным в целях совместимости с версиями PGP до 5.0 (которые имели свой собственный RFC [2][link1]). Тот формат также называют версией 3 (v3) из-за того, что пакеты старого формата обозначаются байтом 03; такое обозначение не имеет ничего общего с нумерацией официальных версий PGP. Новый формат называют версией 4 (v4). Все версии PGP от 5.0 и выше могут работать с обеими версиями формата. Новую версию рекомендуют за её большую безопасность, но старая версия имеет большую совместимость.

Большие числа кодируются в файлах следующим образом: первые два байта несут длину числа в битах, далее следует само число в Big-Endian-формате. Если длина не кратна 8, третий байт [непосредственно перед числом] будет начинаться с нескольких нулевых битов.

Поля времени имеют длину 4 байта и содержат число секунд, прошедших с 1 января 1970 года.

Диапазоны a-b означают: больше или равно a и меньше, чем b.

Назад[link2] | Дальше[link3]


1 Можно сказать, что в кодировке Big-Endian новые байты дописываются в конец строки (слева направо), а не в начало, — прим. пер.

Ссылки
[link1] https://www.pgpru.com/biblioteka/statji/analiznadezhnostipgp/bibliografija#b2

[link2] https://www.pgpru.com/biblioteka/statji/analiznadezhnostipgp/formatfajjlovpgp

[link3] https://www.pgpru.com/biblioteka/statji/analiznadezhnostipgp/formatfajjlovpgp/pakety