Для симметричных блочных шифров обычно используют стандарт PKCS#7: добавляют до конца блока n байтов со значением n, а если сообщение выровнено, добавляют целый блок по этому же правилу для однозначности расшифровки.
По поводу части c умножением полиномов над полем Галуа. В поле у операции сложения есть обратная - вычитание, но у них совпадают таблицы и они обе для битов реализуются исключающим ИЛИ (xor). Из-за того, что вы упустили этот момент начинается путаница, когда вы объясняете реализцию GF_mul. GF_mul у вас на каждом шаге домножает полином a на и его степень сравнивается с 8. Если у получившегося полинома степень 8 (а больше быть не может, т.к. умножение на увеличивает степень ровно на 1), то он берётся по модулю используемого неприводимого полинома p = 0x01C3. Но из того, что степень a равна 8 следует, что в делении будет ровно один шаг, т.е. a = p + (a mod p) и для того, чтобы найти модуль ваш код вычитает p из a: (a mod p) = a - p. Таким образом получаем оптимизацию производительности: долгая операция деления полиномов с остатком свелась к быстрой операции вычитания. Для машины это будет побитовый xor. К возвращению в поле это отношения не имеет, да и выйти из него в рамках однобайтовой переменной невозможно. Ну и наверное стоит упомянуть, что верхние байты в записях p и a не хранятся, а только подразумеваются. P.S.: Есть какая-то конкретная причина, по которой вы решили не пользоваться встроенным хабровским редактором и вставить формулы рисунками?
У вас тут очень какое-то непонятное место в статье:
Если мы посмотрим на следующую анимацию, где показано излучение/приём радиоволны антенной, называющейся «полуволновой диполь», то мы увидим, что каждый из усиков антенны, должен быть такого размера, чтобы в его размеры укладывалась соответствующего размера амплитуда принимаемой/излучаемой полуволны:
Размеры "усиков" измеряются в метрах, амплитуда поля в В/м, эти величины нельзя сравнивать напрямую. Пусть амплитуда 1 В/м, размер "усиков" 10 м, тогда "укладывается" 10 м / (1 В/м) = 10 Вольт?
В свою очередь, амплитуда зависит от частоты, а частота зависит от длины волны.
Вообще говоря, амплитуда от частоты не зависит. На примере звуковых колебаний: нота может быть тихой или громкой, при этом частота её не меняется. На примере света: бывает яркий синий, бывает тусклый, но синим он быть от этого не перестаёт.
Для симметричных блочных шифров обычно используют стандарт PKCS#7: добавляют до конца блока
nбайтов со значениемn, а если сообщение выровнено, добавляют целый блок по этому же правилу для однозначности расшифровки.Вообще есть много вариантов.
По поводу части c умножением полиномов над полем Галуа.
у операции сложения есть обратная - вычитание, но у них совпадают таблицы и они обе для битов реализуются исключающим ИЛИ (xor). Из-за того, что вы упустили этот момент начинается путаница, когда вы объясняете реализцию
и его степень сравнивается с 8. Если у получившегося полинома степень 8 (а больше быть не может, т.к. умножение на
увеличивает степень ровно на 1), то он берётся по модулю используемого неприводимого полинома
это отношения не имеет, да и выйти из него в рамках однобайтовой переменной невозможно.
и вставить формулы рисунками?
В поле
GF_mul.GF_mulу вас на каждом шаге домножает полиномaнаp = 0x01C3. Но из того, что степеньaравна 8 следует, что в делении будет ровно один шаг, т.е.a = p + (a mod p)и для того, чтобы найти модуль ваш код вычитаетpизa:(a mod p) = a - p.Таким образом получаем оптимизацию производительности: долгая операция деления полиномов с остатком свелась к быстрой операции вычитания. Для машины это будет побитовый xor. К возвращению в поле
Ну и наверное стоит упомянуть, что верхние байты в записях
pиaне хранятся, а только подразумеваются.P.S.: Есть какая-то конкретная причина, по которой вы решили не пользоваться встроенным хабровским редактором
У вас тут очень какое-то непонятное место в статье:
Размеры "усиков" измеряются в метрах, амплитуда поля в В/м, эти величины нельзя сравнивать напрямую. Пусть амплитуда 1 В/м, размер "усиков" 10 м, тогда "укладывается" 10 м / (1 В/м) = 10 Вольт?
Вообще говоря, амплитуда от частоты не зависит. На примере звуковых колебаний: нота может быть тихой или громкой, при этом частота её не меняется. На примере света: бывает яркий синий, бывает тусклый, но синим он быть от этого не перестаёт.