Заполнение PKCS#7 определено в rfc5652 # раздел-6.3
Некоторые алгоритмы шифрования содержимого предполагают, что входная длина
кратно k октетов, где k больше единицы. Для таких
алгоритмы, вход должен быть дополнен в конце с помощью
k-(lth mod k) октетов, все имеющие значение k-(lth mod k), где lth
длина ввода. Другими словами, ввод дополняется в
конец с одной из следующих строк:
01 -- если l-й мод k = k-1
02 02 -- если l-й мод k = k-2
.
.
.
k k ... k k -- если l-й мод k = 0
Как мы видим, байты заполнения могут содержать ряд01,02,...,
или же,16
для блочного шифра размером 16 байт. Во время чтения
Я видел, что они привели пример как;
Второй блок содержит оставшиеся 9 байтов HMAC и 7
байты заполнения 0x06
, см. рис. 1. Обратите внимание, что шифратор также может выбрать более длинное заполнение и добавить 23, 39, ... или 247 байтов заполнения (при соответствующей установке значения байтов заполнения).
Это не дополнение PKCS#7. Итак, я посмотрел на TLS 1.2 RFC 5246 и видим почти ту же картину;
Если бы длина отступа была минимально необходимой, 6, то отступ был бы равен 6.
байтов, каждый из которых содержит значение 6. Таким образом, последние 8 октетов
GenericBlockCipher до блочного шифрования будет xx 06 06 06 06 06
06 06, где xx — последний октет MAC.
Чтобы быть совместимым с дополнением PKCS # 7, вышеприведенное должно быть ( не может видеть опечатки)
Если бы длина отступа была минимально необходимой, 7, отступ был бы равен 7.
байтов, каждый из которых содержит значение 7. Таким образом, последние 8 октетов
GenericBlockCipher до блочного шифрования будет xx 07 07 07 07 07
07 07, где xx — последний октет MAC.
и в статье тоже ошибка.
Насколько я знаю, эти два ресурса неверны. Есть ли что-то, что я пропустил в различных конструкциях/использовании правил заполнения PKCS#7?