Стойкость самопального шифра

Тема в разделе "WASM.CRYPTO", создана пользователем ava, 22 фев 2006.

Статус темы:
Закрыта.
  1. ava

    ava New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2003
    Сообщения:
    169
    Хочу поделиться идеей самодельного симметричного шифра. Алгоритм простой, довольно быстрый, ему не требуется лишняя память для всяких таблиц. Но есть сомнения в его стойкости. Сам я оценить качество шифра не могу, поскольку в криптологии я дилетант. Может, знатоки помогут?



    Алгоритм такой:



    Сообщение разбивается на блоки по B бит. Каждый блок xor-ится с B сгенерированными псевдослучайными битами.

    Генератор использует ключ длиной L бит. На каждом шаге ключ суммируется с константой C. Затем результат циклически сдвигается влево на n бит, где n состоит из S младших бит ключа (после суммирования). В качестве псевдослучайных используются B старших бит полученного ключа. Или:



    Key := Key + C

    n := Key and (1 shl S - 1)

    Key := Key rol n

    Message := Message xor (Key shr (L - B))



    Для избавления от слабых ключей перед шифрованием используются W холостых циклов.



    Я использую параметры B = 8, L = 128, C = 1, S = 7, W = 256. В аттаче - пример реализации (встроенный ассемблер в Delphi).



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



    Каким образом можно взломать такой шифр? И как его можно усилить?



    P. S. И не изобрел ли я велосипед?
     
  2. ava

    ava New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2003
    Сообщения:
    169
  3. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"


    Не имея звания кандидата математических наук (это минимум) даже не стоит пытаться изобрести криптостойкий шифр. Да и зачем изобретать, раз имеется столько провереных временем шифров? Имхо там где нужна криптостойкость лучше не изобретать велосипед, а взять одну из реализаций AES, Blowfish или IDEA.



    А нестойкость этого шифра видна сразу. Слабость этого шифра в том, что байт с которым ксориться текст однозначно определен позицией этого байта в сообщении. Тоесть для каждого байта в последовательности, имея открытый текст можно вычислать значение (Key shr (L - B)), а так как номер байта известен, и известны L B и C, то ключ вычислить будет просто элементарно. Конечно сначала надо знать число n которое вычисляется из ключа, но оно может быть только в диапазоне от 0 до 31 (любые другие числа заменяются числом из этого диапазона), естественно это нетрудно перебрать.

    А усилять ничего не стоит, лучше возьми готовый шифр.
     
  4. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
  5. drmad

    drmad New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    332
    Адрес:
    Russia
    Ms Rem



    Не имея звания кандидата математических наук (это минимум) даже не стоит пытаться изобрести криптостойкий шифр.

    В дополнение. Вот здесь http://old.computerra.ru/news/2000/10/3/1553/ живет интересная статья про международный конкурс на новый стандарт шифрования США, который завершился несколько лет назад. Обращаю внимание: изобретали эти шифры далеко не в одиночку, далеко не дети в математике и далеко не за один день. :) Тем не менее, часть этих шифров была опровергнута и скомпроментирована другими авторами буквально на лету, во время конференции, на которой все они хвалились друг перед другом.



    взять одну из реализаций AES, Blowfish или IDEA.



    В уточнение. Это все блочные шифры, а ava специально отметил, что его интересуют потоковые. Поэтому лучше предложить ему что-нибудь вроде RC4 или WAKE.



    В развитие темы. Впрочем, судя по фразе "ему не требуется лишняя память для всяких таблиц" (с) ava, он знаком по крайней мере с одним из них, т.к. идея подобных шифров - выборка случайной гаммы из таблиц по случайному индексу, и она его не вдохновила. В этом случае можно порекомендовать ему посмотреть в сторону менее ресурсоемких датчиков псевдослучайных чисел, например, Фибоначчиевых. (Линейные конгруэнтные в криптографии не катят, т.к. у них разные группы битов по разному случайны. Хотя, например, в некоторых нематематических книжках они для этой цели допускаются). Выбрав такой датчик, придется самостоятельно доказывать, что 1) он дает равномерное распределение значений для любых затравок и параметров; 2) он дает равномерное распределение битов для любых затроавок и параметров; 3) количество всевозможных затравок и параметров настолько велико, что их всех невозможно перебрать; 4) для любых затравки и параметров по двум последовательным значениям невозможно вычислить эти затравку и параметры.



    Мое имхо (кандидата не совсем математических наук :) ), что все эти возможности криптографами-математиками давным-давно изучены и отвергнуты, не случайно же все они, как один и в RC4, и в WAKE, и в SEAL, юзают именно табличный способ генерации случайной гаммы.
     
  6. drmad

    drmad New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    332
    Адрес:
    Russia
    Сорри, обознатушки. :dntknw: Вот здесь byrd.narod.ru/aes/aes1.htm гораздо более интереная статья того же автора про конкурс шифров.
     
  7. ava

    ava New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2003
    Сообщения:
    169
    лучше не изобретать велосипед, а взять одну из реализаций AES, Blowfish или IDEA

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



    Но сейчас мне интересно как можно взломать данный шифр (с данными константами). Пусть, например, известна последовательность сгенерированных байтов:

    52 7B 78 29 87 A4 C4 3B E4 B9 D8 11 44 B0 73 65

    Может ли кто-нибудь "на пальцах" разъяснить, какую именно информацию о ключе можно выудить, и как именно это можно сделать?
     
  8. Solo

    Solo New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2003
    Сообщения:
    131
    стандартный (например Дельфийный) датчик псевдослучайных чисел и то более стойким будет :)



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



    А в наше время не нужно быть кандидатом криптографических наук, чтобы изобретать шифры - уже много книг выпущенно с достаточно объемными рекомендациями и примерами. Совсем другой вопрос, зачем их изобретать?
     
  9. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    ava



    Код, который в твоем аттаче - он более сильный чем ты описал в топике. Возможжно, поэтому такая реакция :) Сорри.



    Итак, я не кандидат. Имхо шифр что-то может, совсем в лоб его взломать не удастся. Однако (я не анализировал детально, на это нужно несколько дней) ощущение, что он не очень сильный. Основная причина - слабое перемешивание и взаимное влияние битов "ключа" (128 бит в регистрах ebp-esi-edi-edx). Перестановка 3-2-1-0 не очень, вращение нормально, но вот команда add Key,1 - явно слабая, какая вероятность что произойдет перенос ? Только если младшие 32 бита ключа равны 0xFFFFFFFF. Почему не использовать другую константу или вообще 4 подряд добавления ?



    По предварительной моей оценке он тянет на 0,2-0,5 от хардварных алгоритмов ключей защиты (секретных функций). Оценка ОЧЕНЬ приблизительная, поэтому чур без обид.
     
  10. ava

    ava New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2003
    Сообщения:
    169
    2 Chingachguk:



    Код, который в твоем аттаче - он более сильный чем ты описал в топике



    Странно... Если бы ты сказал, что реализация ослабила алгоритм, я бы не удивился. А так... Небывалый случай, прямо... :)

    Перечитываю первый пост - вроде бы, все правильно описал. Перечитываю исходник - вроде бы, полное соответствие описанию.



    Перестановка 3-2-1-0 не очень, вращение нормально



    Э-э-э... Перестановка - это как раз часть вращения.



    но вот команда add Key,1 - явно слабая



    Согласен. Лучше использовать другую константу (возможно, 128-битную). Вот только какую константу выбрать - вопрос.



    какая вероятность что произойдет перенос ? Только если младшие 32 бита ключа равны 0xFFFFFFFF



    Перенос произойдет с вероятностью около 0.5. Правда, это будет перенос в соседний бит, а не двойное слово - но ведь и сдвиги побитовые :)



    P. S. Может, для анализа больше подойдет более простой вариант - B = 1, L = 32, S = 5 ?



    P. P. S. Насчет реакции. Я совершенно спокоен. Просто у меня нет никаких идей о том, как можно взломать такой шифр - я ничего не смыслю в криптоанализе, модулярной арифметике и многих других областях математики.
     
  11. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    Перечитываю исходник - вроде бы, полное соответствие описанию.



    Покажи, где у тебя написаны перестановки 3-2-1-0 ;)
     
  12. ava

    ava New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2003
    Сообщения:
    169
    Покажи, где у тебя написаны перестановки 3-2-1-0 ;)



    ???



    Цифрами 0 - 3 я обозначил, где какие части итогового ключа находятся, чтобы не запутаться. 0 означает младшее двойное слово, 3 - старшее. Запись 3210 означает, что все части ключа находятся на своих местах (EBP:ESI:EDI:EDX), и перестановка не требуется.
     
  13. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    ???



    Нет, покажи где ты это написал в ТОПИКЕ ;)



    В исходнике вижу.
     
  14. ava

    ava New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2003
    Сообщения:
    169
    Счетчик сдвига ключа - семибитный (а не пятибитный). Младшие пять бит используются для обычных сдвигов (на 0 - 31 бит), старшие два бита - для перестановки регистров, что заменяет сдвиги на 0, 32, 64 или 96 бит.
     
  15. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    Я, наверное, торможу - но вот в твоем первом сообщении я этих слов не нахожу:



    Алгоритм такой:



    Сообщение разбивается на блоки по B бит. Каждый блок xor-ится с B сгенерированными псевдослучайными битами.

    Генератор использует ключ длиной L бит. На каждом шаге ключ суммируется с константой C. Затем результат циклически сдвигается влево на n бит, где n состоит из S младших бит ключа (после суммирования). В качестве псевдослучайных используются B старших бит полученного ключа. Или:



    Key := Key + C

    n := Key and (1 shl S - 1)

    Key := Key rol n

    Message := Message xor (Key shr (L - B))



    Для избавления от слабых ключей перед шифрованием используются W холостых циклов.



    Я использую параметры B = 8, L = 128, C = 1, S = 7, W = 256. В аттаче - пример реализации (встроенный ассемблер в Delphi).
     
  16. ava

    ava New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2003
    Сообщения:
    169
    Chingachguk, подумай сам, как можно циклически сдвинуть 128-битное число на любое количество бит, используя 32-битные операции.
     
  17. RElf

    RElf New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2004
    Сообщения:
    159
    Шифр не стоек к known plaintext атакам.

    Зная L/B последовательных пар (plaintext, ciphertext) можно вычислить ключ.
     
  18. ava

    ava New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2003
    Сообщения:
    169
    RElf, мог бы просто сказать: "взломать можно - зуб даю". Объем мессаги был бы меньше, а количество информации - то же.



    Похоже, я обратился не по адресу. Тема закрыта.
     
Статус темы:
Закрыта.