Comments 17
Не надо разрабатывать собственный алгоритм шифрования.
"Никогда не пишите свою собственную криптографию" -- говорили они. Но сейчас любой школьник с удовольствием перетасует байты зашифрованного файла -- и вот вам "новый алгоритм"!
Сколько честных криптостойких алгоритмов могли использовать простые люди? Пять? Десять?? А сейчас их появятся ТЫСЯЧИ!
https://ders.by/crypt/derscrypt2/derscrypt2.html
Почему? Это хороший обзор для новичка. Автор в конце примечает, что создание собственных алгоритмов - это прежде всего учебные практики
Создание своих алгоритмов шифрования слегка так ограничено. А еще статья слегка отдает нейронкой.
Не все живут в стране где ограничено, и вроде бы для себя - можно, но все равно не нужно.
Можно и не для себя, просто это будет называться не "шифрование", а "кодирование". И не будет юридически-значимым (не всегда это нужно).
А вот использовать собственный криптоалгоритм без достаточных проверок на слабые места - рискованно.
Интересно, а можете пояснить разницу между этими понятиями?
Разница только в определениях всяких нормативных бумажек. В РФ шифрованием ведает ФСБ (см. множество приказов). На данный вид деятельности ФСБ же выдаёт лицензию (разработка, производство, эксплуатация, обслуживание...). Всё остальное они относят к кодированию.
С технической точки зрения это не имеет значения, т.к. например AES - это тоже кодирование (потому что алгоритм шифрования не по ГОСТу :)
шифрование - защита данных от несанкционированного доступа
кодирование - преобразование данных из одного формата в другой
Любое (современное) шифрование это наложение гаммы (случайной последовательности) на исходный текст (сообщение). Главное знать параметры при которой раскручавается случайная последовательность (ключ, алгоритм, точка отсчёта, пересинхронизация).
Самое элементарное и надёжное для низких скоростей использовать заранее сренерированную гамму (шифр Вернама), и обмениваться гаммой при личной встрече с Юстасом.
Для создание своего алгоритма шифрования (формирования гаммы) нужны расчёты свормированной гаммы на статистику (на множество параметров: зеркалирование повторяемость и т. д.) этих расчётов нет. Сам шифратор сделать это пол дела, а вот если этот шифратор(информационная система) имеет задний чёрный вход и через него ходи кто хочешь, то смысла от такого шифратора нет.
Если мы говорим для себя что-то сделать, то там и простая циклическая алгоритмическая маска вполне подойдёт (какая-нибудь реккурента).
Вы опасно некомпетентны в криптографии.
А как же симметричные блочные шифры (AES), асимметричные криптосистемы (RSA, ECC), хэш-функции, цифровые подписи и многое другое? Шифр Вернама является идеально секретным только при соблюдении условий: длина ключа должна быть равна длине сообщения, ключ должен использоваться всего один раз, и он должен быть полностью случайным (использовать аппаратные датчики не везде возможно).
А какая криптостойкость алгоритма? Если хэшированный ключ будет по типу abcd|abcd (маловероятно) или одна часть будет частично накладываться на другую, то в одной итерации будет "шифруем | расшифровываем" ?
Разбиение ключа. Для повышения стойкости алгоритма входной симметричный ключ длиной 256 бит делится на две части по 128 бит. Каждая часть используется для последовательного шифрования каждого блока.
Вот здесь абсолютно не интуитивно. Пришлось код смотреть, ну и вроде бы энтропию ключа он не теряет, но все же, есть и другие более признанные методы выборки 128 бит из 256 с сохранением энтропии. Заодно ключ можно сделать и строкой без ограничения разрядности.
Мне эта const delta вообще не нравится. Сначала думал, что она как-то итерируется, а нет. Конечно энтропия теряется, а если её обнулить вообще ерунда выйдет. Понимаю, что алгоритм быстрый, на 4 байтные целые завязан, но к его стойкости больше вопросов, чем ответов. Почитал референсную имплементацию, да, все как у вас. Атаки документированы, вероятно после 2009 года алгоритм перестал быть интересен.
Мне почудилось или статья про XTEA «как есть»? Модификацию при первом прочтении не разглядел. XTEA двукратно применяется с двумя различными ключами. Получается, что это XTEA(XTEA(data, k1), k2). Пардон, если недооценил замысел. Буду признателен, если поступят пояснения.
А если изменить один бит, то расшифровать текст можно?
Как создать свой алгоритм шифрования: от идеи до готового CLI-приложения