Comments 27
Шифр Вижинера ;) В Википедии более подробно ;)
если ты знаешь как можно уничтожить этот метод шифрования, то я куплю тебе кофе с булочкой.
На подбор ключа из 1024 чисел, в диапазоне например до 100 миллиардов, будет крайне долгим занятием. Это примерно random(0,100000000000)^random(0,100000000000) и всё это повторяется 1024 раза.
Берем текст, получаем закодированный результат, отнимаем от каждого числа в массиве ord из оригинального текста, получаем код. При необходимости удлиняем текст, пока не выберем весь "шифроблокнот". Занимает не 100500 миллионов лет, а ~пару миллисекунд
Шифр неуловимого Джо.
Одноразовые (или сеансовые) ключи в помощь ;)
Да, но это при условии что нам известен оригинал.
Представьте, что этот шифр as is внедрила Германия во время ВМВ. Союзники записывают все сообщения, но расшифровать не могут. И тут славные разведчики похищают ровно 1 нешифрованное сообщение. С этого момента союзники могут расшифровать все сообщения, и старые, и новые. Конец.
Шифрование абсолютно стойкое, если текст не длиннее ключа и ключ используется один раз. В остальных случаях применим частотный анализ и все такое.
Не совсем. Разницы как таковой нет. Ты не знаешь, какой символ спрятан за рандомным значением именно этого ключа. Например ключ на 100. При шифровке 101 символа 1 ключом мы X+random. Даже если ты попробуешь сверить его с первым числом, который был зашифрован с тем же 1 ключом, то это не даст ничего. И так далее к остальным ключам.
Ты не знаешь, какой символ спрятан за рандомным значением именно этого ключа
Допустим, шифруются файлы html. Спорим на булочку, я угадаю первые 6 букв с одного раза? :D
Возьмём http запрос на html файл: первые символы фиксированны, где-то в теле должно быть <!DOCTYPE html/>, <body> И пару других заранее известных строк. Если файл (точнее ответ с статусом, заголовками, кукакими и контентом) будет больше чем ключ в виде N случайных чисел - перебор до смешного прост.
Дальше, передать ключ из 2048 * 4 байт та ещё задача, ещё большей задачей является генерация этих чисел, все ГПСЧ обладают предсказуемостью и уже исходя из небольшого количества первых заранее известных строк уже вскрывается весь ключ. Даже если вы солите каждый раунд случайного числа, статистически все еще есть 0.001 вероятность выпадения числа А, когда у других - 0.0000001. Но, допустим, у вас совсем совсем крипкостойкий случайный алгоритм.
Определить длину ключа по известному файлу тоже не сложно. Благо, плюс, в отличие от степени, вычисляется очень быстро, перебирать на той же видеокарте просто. (Это к тому зачем степень нужна). Мы опираемся на факт что узнав одно число, мы вскрываем его сразу для всех букв по индексу [k*N], где N - длина ключа. А вот mod не позволяет узнать оригинальное число, ой… вот он зачем?
К слову, он не только затем чтобы было сложнее получить оригинальное число всего по одному совпадению, но ещё чтобы перекрыть вот такую странную вещь:
Вы написали
В диапазоне миллиарда
Мне не нужно проверять миллиард. Я знаю что английские буквы поместятся в 7 бит, так что мне достаточно проверить 128 чисел от s до s+128, где s - зашифрованное число. В итоге у нас уже нужно перебрать просто смешное количество вариантов, каждый из которых - сумма. Хуже того, это мгновенно открывает длину ключа, потому что я могу сделать s mod 128 и получить порядок чисел дальше просто посмотреть когда он начинает повторяться. Да мне даже http / html знать не нужно, да даже не только английский, а все языки на все, это все равно 16 бит на символ, это уже не миллиарды опций на перебор, в всего 64 тысячи.
Но да, если текст передан только один раз и он короче ключа - это сработает, но тогда проще сразу текст передать, чем сам ключ.
PS я абсолютно ничего не понимаю в криптографии, но уже способен сказать что ваш шифр ещё хуже чем шифр Виженера, представьте что профессионал сделает.
если ты знаешь как можно уничтожить этот метод шифрования, то я куплю тебе кофе с булочкой
Вы опасно некомпетентным в криптографии.
Для тех самых "это изи": [1747047, 57779079, 51040523, 80896095, 94514260, 1747046, 57779073, 51040541, 80896117, 94514270]
Ключ на 5 чисел
Шифрование и дешифрование проходят с ord() и chr()
Ответ в личку.
А этот алгоритм только с юникодом работает или как? А то может оказаться, что когда вы доберётесь в своих изысканиях до байтов, то для обеспечения даже такой же паршивой криптостойкости понадобится массив ключа уже не из 6, а 24 элементов.
Также у нас есть шифрования, где зашифрованный текст без точно такого ключа, выдаёт своеобразную "ошибку", что делает возможным подбор ключа.
Это сделано не просто так, чтобы хитрому хакеру было легче, а для проверки целостности сообщения, для защиты от подмены.
У меня, у дилетанта в области криптоанализа, уйдет пара часов на взлом этого супер шифра, но и они стоят дороже кофе с булочкой ;) А спортивного интереса нет совершенно, потому что это детская задача по сути. Старый алгоритм, которому неспроста пришли на смену уже великое множество более сложных.
Все еще пытаюсь найти в тексте намек на иронию...
Главное правило криптографии - никогда не изобретай собственных алгоритмов!
За перекрытие шифра мой преподаватель по криптографии расстреливал на месте
Вот потому и не люблю питон, питонистов уже пруд пруди и все начинают выдумывать свой велосипед с громкими заявлениями смотрите что я придумал.
Не учите питон, учите мат. часть.
Интерестна криптография, начинайте с азов, базовых алгоритмов и подходов и тогда не надо будет писать статьи на хабре и спрашивать: "Кто знает что это такое?"
В программировании есть правило: не бросаться изобретать велосипед, не разобравшись в предметной области и не изучив ассортимент уже изобретенных велосипедов.
Особенно строго этому правилу следует придерживаться в областях, имеющих отношение к криптографии.
То что вы предлагаете далеко не ново, использовалось с шифроблокнотами, к примеру в "17 мгновений весны" можно увидеть пример. Действительно, при правильном использовании (длина ключа не менее длины сообщения, ключ используется строго один раз), криптостойкость алгоритма доказана, но сложность правильного использования и послужила причиной того, что этот шифр сейчас используется ограниченно.
По сути вы подменяете задачу секурно передать условно 1 кб шифротекста на задачу секурно передать 1 кб ключа. Такое есть смысл исполнять исключительно в контексте деятельности агента из шпионского романа, когда ключ можно в блокнотике сделать заранее и обменяться в безопасном месте, а сообщение выслать уже позже.
Как вы себе представляете эту схему для вэба - с паспортом и внешним хдд идем в МФЦ и получаем сотню гигов ключей на месяц?
Плюс "ваша" схема бессильна для коммуникации одного со многими и наоборот - к примеру цифровой подписи документа приватным ключом, которая может быть проверена парным публичным, или шифрование документа публичным ключом, предназначенного для обладателя приватного ключа и только для него.
Сложение как простейшее и сложнейшее симметричное шифрование на примере Python