Обновить

Комментарии 6

Sum += BytesToBlock((uint8_t*)Data + Pos, Block); [cite: 89]

Это шутка чтоли? А если я поменяю пару битов в разных блоках, чтобы их итоговая разницы компенсировалась, то все? Контрольная сумма сойдется, вот тебе раз уязвимость.

Далее у тебя там пипец кривой паддинг, если у тебя пакет не кратен 16 байтам, то он добивается нулями, а если пакет заканчивается на 0 или пару нолей? Ты добьешь нулями до 16 байт, а как расшифровать? Ты PKCS#7 не используешь.

Это шутка чтоли?

Нет, не шутка. Просто встроенная сумма для быстрой проверки соответствия расшифровки оригинальному сообщению. Если поменять пару битов в разных блоках шифротекста, блоки расшифруются непредсказуемым образом и сумма будет другой.

Ты PKCS#7 не используешь

Я не использую. Другим не запрещаю))

а как расшифровать?

Пока не было случаев некорректной расшифровки. Только я длину последнего (неполного) блока дописываю к шифротексту и при расшифровке отбрасываю лишнее, оставляя нужное. Даже если "нужное" заканчивается нулями.

Простите, тоже увлекаюсь фантазированием на тему криптографии. Потому знаю некоторые распространенные приемы и техники.

И ваш код выглядит как попытка «security through obscurity». Минимум применения проверенных практик, максимум «операций ради операций».

Ну или вы не смогли объяснить, что как и для чего вы сделали. А без вашего объяснения трудно это понять со стороны.

Минимум применения проверенных практик

Да, "я художник, я так вижу")) А если серьёзно, то если бы мне в самом начале моего "творчества" попались проверенные практики, я бы не создавал своё, а взял бы готовую реализацию какого-нибудь известного алгоритма (например, Twofish). Если брать всё проверенное и компоновать из него что-то своё, то зачем вообще компоновать своё, а не взять уже готовое и проверенное? Но это моё личное ИМХО, как говорят)

Ну или вы не смогли объяснить, что как и для чего вы сделали. А без вашего объяснения трудно это понять со стороны.

Не спорю. Возможно, ради краткости изложения я многое упустил в описаниях и объяснениях. Если будет возможность, могу ответить на конкретные вопросы.

Ну смотрите: если бы вы взяли просто сеть Фейстеля, то вы получили бы такую же надежность, но с гораздо более простым кодом. Ибо большинство манипуляций с поворотом Mi для профессионального криптографа - пустой звук. Он видит лишь, чтобы суммировали его с функцией от M[i^1] и ключа.

(M[(i+1)&1] - это M[i^1] . Что ещё раз намекает, что вы не очень понимаете, что делаете, и разводите сложность на пустом месте).

А вот то, что вы шныряете по массиву ключа в зависимости от содержимого M[i^1] - это хороший подарок криптографу в виде side channel по таймингу. Если уж программную реализацию AES на этом смогли подловить, то с вашей поделкой совсем проблем не будет.

Ну и главное: может быть я не внимательно прочитал, но я ни где не увидел, какой Cycles вы рекомендуете? Если это те 10000, что упоминаются в примере README, то, наверное, трудно оспорить то, что оно зашифрует. Но, блин, в любой день недели я вместо выполнения 10000 циклов вашего мудреного шифра возьму 32 цикла шифра Speck, который прост, как табуретка, и тщательно проанализирован десятком криптографов. (Да, сообщество отвергло Speck, т.к. не доверяет NSA, но на мой взгляд, это случай, когда паранойя возобладала над здравым смыслом.)

если бы вы взяли просто сеть Фейстеля, то вы получили бы такую же надежность, но с гораздо более простым кодом

Не буду спорить.

Ибо большинство манипуляций с поворотом Mi для профессионального криптографа - пустой звук.

Повороты Mi мне были нужны, чтобы порядок применения восьми чисел K[Adr & 0xff] влиял на конечный результат преобразования Mi.

M[(i+1)&1] - это M[i^1]

В данном случае - да. Но лично для меня M[(i+1)&1] означает, что я обращаюсь к следующему после i-го числу, а & 1 нужен, чтобы не выйти за пределы массива и взять 0-вой. Мне так понятнее.

А вот то, что вы шныряете по массиву ключа в зависимости от содержимого M[i^1] - это хороший подарок криптографу в виде side channel по таймингу

Даже с большим количеством циклов? Но буду иметь в виду.

какой Cycles вы рекомендуете?

Я действительно не писал рекомендаций по циклам. Сам для "повседневных" нужд применяю 25-50, для "критических" - 10000 циклов. Шифрую только свои данные и в случае неверного выбора циклов ни перед кем не отвечаю.

в любой день недели я вместо выполнения 10000 циклов вашего мудреного шифра возьму 32 цикла шифра Speck, который прост, как табуретка

Хорошо, когда есть выбор (без сарказма). И разве мой шифр такой уж мудрёный? Но ладно, спорить не буду)) И да, про Speck спасибо - посмотрю на него, если будет возможность.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации