Пользователь
0,0
рейтинг
16 января 2010 в 22:37

Разработка → ГОСТ 28147-89 (Часть 1. Введение и общие принципы)

Очень часто на Хабре встречаются статьи о сути, программных реализациях, вскрытиях шифров. Но непонятно одно: почему среди них нет наших, отечественных алгоритмов шифрования?

Я решил исправить это, написав повесть статью, разбитую на 5 частей для лучшего восприятия о стандарте ГОСТ 28147-89. Каждая часть, кроме первой (описывает схему алгоритма и общие принципы), повествует о каждом из четырех возможных режимах работы стандарта с приложением к ним кода на C++.

Описание алгоритма



ГОСТ 28147-89 является отечественным блочным шифром. То есть открытый текст разбивается на блоки (в данном случае 64 бита), и каждый блок преобразовывается отдельно.

В основу алгоритма положена сеть Фейстеля, представленная на рисунке ниже.



Поясню работу данной схемы.


  1. Каждый блок разбивается на два «подблока» (левый и правый, соотвественно).
  2. Исходное заполнение правого блока записывается в левый блок на выходе.
  3. Над правым блоком производится криптографическое преобразование с применением ключевых данных.
  4. Левый (исходный) и правый (преобразованный) блоки складываются по модулю 2 в сумматоре по модулю 2.
  5. Так повторяется несколько раз.

Структурная схема алгоритма





Данная схема содержит:


  • Четыре накопителя по 32 бита: N1, N2, N3, N4.
  • Два 32-разрядных накопителя: N5 и N6, — с записанными в них постоянными заполнениями C2 и C1 соответственно.
  • Ключевое запоминающее устройство (КЗУ) на 256 бит. КЗУ состоит из восьми накопителей по 32 разряда каждый: X0, X1, X2, X3, X4, X5, X6, X7.
  • 32-разрядный сумматор по модулю 2: СМ2.
  • Еще один сумматор по модулю 2, который не имеет ограничения на разрядность (но используется 64 бита): СМ5.
  • Два сумматора по модулю 232 разрядности 32 бита: СМ1, СМ3.
  • Сумматор по модулю (232-1): СМ4.
  • Блок подстановки К: восемь узлов замены K1, K2, K3, K4, K5, K6, K7, K8, каждый с памятью на 64 бита.
  • Регистр циклического сдвига влево на 11 бит R.

Ключи


В КЗУ



КЗУ отведено 256 бит, в ГОСТ 28147-89 используется ключ длиной 256 бит. Ключ разбивается на восемь блоков по 32 бита, и каждый бит каждого блока последовательно вводится в накопитель X соответствующего порядка.

То есть, 1-й бит ключа вводится в 1-й разряд накопителя X0, 2-й — во 2-й разряд накопителя X0, 33-й — в 1-й разряд накопителя X1, 65-й — в 1-й разряд накопителя X2, и так далее, 224-й бит ключа вводится в 1-й разряд накопителя X7, 256-й бит ключа вводится в 32-й разряд накопителя X7.

Считывается же ключ в соответствии с выбранным режимом работы алгоритма, но в следующих частях статьи.

В блоке подстановки K



Блок подстановки содержит в себе таблицу замены размерностью 16x8, которая является долговременным ключом.

Строки таблицы определяют, грубо говоря, что требуется заменить (число от 0 до 15 в шестнадцатиричной системе счисления). Столбцы же указывают, на что заменять. При этом поступающий 32-битовый в блок вектор разбивается на восемь 4-х битовых, каждый из которых и преобразуется в соответствии с таблицой замены.

Ключи как в КЗУ, так и в блоке К, являются секретными, и требуются меры по недопущению их компрометации.

Режимы работы


Напоследок хочется отметить, что ГОСТ 28147-89 работает в 4-х режимах, каждый из которых будет рассмотрен в последующих 4-х статьях (с кодом на C++):
  • Режим простой замены.
  • Режим гаммирования.
  • Режим гаммирования с обратной связью.
  • Режим выработки имитовставки.

Да данный момент все, господа хабражители, в следующий раз рассмотрим режим простой замены, являющийся базовым для всех остальных режимов.

UPD: Следующая часть статьи «Режим простой замены» доступен по ссылке.
Варрелл @FTM
карма
63,7
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (96)

  • +1
    Было бы интересно узнать плюсы этого алгоритма. А так не ясно чем он лучше широко известных.
    • +3
      Все плюсы-минусы будут в заключении, а оно только в 5-й статье.
    • НЛО прилетело и опубликовало эту надпись здесь
    • +2
      Можно отметить, что в России этот шифр единственный, допустимый для защиты информации, содержащей государственную тайну.
      • +3
        это неверно. Это единственный известный широкой публике шифр, используемый для защиты информации имеющей грифы секретности.
        • +2
          а какие еще есть?
          • +3
            это гос. тайна :)
        • 0
          какой смысл засекречивать шифры?
          • –1
            Если они используются для защиты гос.тайны, смысл есть, поверьте.
    • 0
      Этот алгоритм много быстрее DES-подобных (при равной криптостойкости) из-за отсутствия неэффективных на обычной архитектуре операций перестановки битов. Кстати, пост здорово напоминает статью из журнала Монитор бородатых годов.
  • +2
    основные достоинства:
    -бесперспективность силовой атаки (XSL-атаки в учёт не в счёт, ибо их эффективность на данный момент полностью не доказана);
    -эффективность реализации и соответственно высокое быстродействие на современных компьютерах;
    -наличие защиты от навязывания ложных данных (выработка имитовставки) и одинаковый цикл шифрования во всех четырех алгоритмах ГОСТа.
    • 0
      А что, другими блочными шифрами имитовставку не вычислить?
      Это же совершенно не связанный с обеспечением основной задачи (конфиденциальности) алгоритм.
      • 0
        Обеспечение целостности — тоже основная задача.
    • +1
      вы впрямь считаете, что большое количество битовых операций позволяет получить высокое быстродействие на современных компьютерах?

      учтите, что битслайсинга для ГОСТа нет.

      в реальности, его производительность на системах общего назначения ниже, чем у AES.
      • НЛО прилетело и опубликовало эту надпись здесь
        • +2
          вообще-то, там вверху написано «на современных компьютерах» а не «на специально придуманных ASIC-ах».

          Про достижение гигабита на ГОСТе я отлично в курсе (вот пресс-релиз одного из партнеров www.s-terra.com/CSP/RU/products/performance_Sun_Fire_4150.htm двухлетней давности), но только вы забываете, что AES сейчас делают на десятигигабитных скоростях и с задержкой в один пакет. Еще раз внимательно прочитайте, что я написал — производительность ГОСТа ниже, чем у AES. Именно за счет большого количества битовых операций. Но, конечно, если 16-процессорный сервер взять, и шифровать в несколько потоков, можно рассказывать про «быстрый ГОСТ». :))
          • НЛО прилетело и опубликовало эту надпись здесь
            • +1
              Еще раз.

              Исходный тезис был

              эффективность реализации и соответственно высокое быстродействие на современных компьютерах


              Я против этого тезиса возражаю, тем, что

              — эффективность реализации с учетом большого количества битовых операций на современных компьютерах общего назначения сомнительна;
              — бислайсинга для ГОСТа нет (или мне неизвестен, но тогда покажите мне пример);
              — «быстро» само по себе смысла не имеет, потому, что сейчас компьютеры быстрые. имеет смысл только в сравнении с чем-то другим. в сравнении с современным AES'ом ГОСТ медленнее.

              Вы начинаете писать «нет, он быстрый, вот же — гигабит» (а потом «нет, никто не говорит, что он быстрый»).

              Учитывайте то что заказчики у этой технологии несколько специфичные.


              заказчики у этой технологии самые обычные. например, коммерческие и государственные банки на территории России.

              Одна-две-три железных реализаций ГОСТ существуют, но из тех, которые я видел

              — ни одна не быстрее тех, что делаются на современных компьютерах общего назначения;
              — ни одна не дешевле их же.

              С удовольствием увижу контрпример. Честно, тега irony тут нет.
              • 0
                >в сравнении с современным AES'ом ГОСТ медленнее.

                голословное утверждение: в ГОСТе на каждом цикле выполняется подстановка, сдвиг, и сложение с ключом по мод 2^32.

                В AES — подстановка, циклический сдвиг, умножение на матрицу, поразрядное сложение с ключом по мод 2.

                ГОСТ как минимум не медленнее AES.
                • 0
                  Если даже оставить в стороне ключевое расписание, в AES раундовые операции байтовые, а в ГОСТ — битовые. Поэтому на процессорах общего назначения оверхед у ГОСТа больше.

                  Кроме того, у ГОСТа 32 раунда, а у AES на ключе 256 бит — 14. Наконец, за один раунд AES шифрует 128 бит, а ГОСТ — 64.

                  Насколько мне известно, на современных архитектурах ГОСТ делает один блок примерно за 200 тактов (если у вас есть цифры лучше, с удовольствием услышу), AES — около 150.

                  Так что, увы, медленнее.
                  • 0
                    зато в AES для подстановки требуется искать обратный элемент в поле F256 и выполнять умножение на матрицу. А потом еще на матрицу умножать для перемешивания столбцов и строк. Цикл ключей там готовится сложнее чем в ГОСТе. Вообще я сегодня специально спросил у человека, имеющего докторскую в этой области и огромный опыт за плечами. Он мне сказал именно то, что ГОСТ не хуже AES по времени работы. Я честно вообще не понимаю откуда вы берете цифру 200. Давайте считать по максимуму. Вот у нас есть открытый текст, лежащий в памяти и занимающий 8 байтов. Кладем в регистры ключ и последние 4 байта и суммируем их. Это три такта. Далее работаем с однобайтовыми регистрами в каждом из них выделяем по старшей и младшей части и применяем перестановку это 3*8 = 24 итерации. Выполняем сдвиг — еще одна итерация. Далее меняем местами блоки это еще парочка. получилось около 30. Откуда взялось 200??? На аппаратной реализации ГОСТа за один такт шифруется один цикл.
                    • 0
                      1) давайте всё таки примем, что ни в AES ни в ГОСТ никто не собирается умножать на матрицы или подставлять 4х4 — в случае реализации на современной технике все операции кешируются в подстановки 8х8, а в случае AES есть и еще более быстрый вариант — 8х32, так что считаем, что битовых операций нет ни в том ни в другом

                      2) скорость реализации циклического сдвига на 11 зависит исключительно от особенностей процессора — на младших 80х86 такой сдвиг занимал тактов пропорционально величине сдвига, сейчас к счастью это не так

                      3) количество действий, размером в машинное слово, выполняемых в AES — 8 операций в раунде х 14 раундов = 112, у ГОСТ — 7 операций в раунде х 32 раунда = 224, это объективно

                      4) аппаратная реализация ГОСТ и AES — один раунд на такт, в AES — 14 раундов, в ГОСТ — 32, это тоже объективно

                      На мой взгляд разность в скорости в 2-2.5 раза совершенно некритично при условии, что со стойкостью у шифра всё в порядке. В «морально устаревшие по скорости» уходят шифры, отстающие от современных в десятки и более раз, да и то не всегда.
                      • 0
                        интересно, а как это умножение на матрицу можно превратить в подстановку? подстановка, я напомню, выполняется за O(1). Т.е. нам нужно перечислить все варианты перехода 256 бит во что-то, то есть надо будет закэшировать 2^256.

                        Откуда у AES 8 операций? там при алгоритм Евклида надо применять в поле F256 для нахождения обратного элемента. И еще я не представляю, как это можно за один такт реализовать.
                        • 0
                          Вы читали авторский документ по Rijndael, который был подан на конкурс AES в 1998 году?
                          Например, вот здесь — home.arcor.de/arne.schlosser/dls/Rijndael.pdf
                          На странице 15 третья формула сверху это то, о чем Вы говорите, что это невозможно. Размер кэша, требуемый для реализации формулы — 4 килобайта.

                          Пожалуй, немного исправлю свои оценки (забыл про индекс у e[j]):
                          AES — 32 операций в раунде х 14 раундов = 448
                          ГОСТ — 10 операций в раунде х 32 раунда = 320

                          Всё равно получаем величины одного порядка. Более детальные модели скорости обработки уже должны будут учитывать кол-во тактов на ту или иную операцию на разных процессорах и скорость доступа к кэшу табличных подстановок.
                          • 0
                            Так откуда там 4 Кб-то? S(а) — это 4 байта. Соответственно возможных вариантов S(a) — 2^32. Учитывая, что T всего 4 штуки и занимают они по 16 байт это 2^40. то есть где-то гиг памяти.

                            Ну вот вы оптимизировали операцию премешивания, использовав до фига памяти, но с S-box на AES такая же штука не прокатит — там матрица не 4 на 4 байта а 8 на 8. И к тому же еще обратный элемент надо искать.
                            • 0
                              Про 4 килобайта написал не я, а авторы Rijndael-а. Вы и им не доверяете в расчетах?
                              • 0
                                что значит я не доверяю, я просто привык не просто читать какие-то выводы, а понимать как они получаются. В общем я понял свою ошибку — я считал что под S-box подразумевается замена сразу 4 байтов, а оказывается только одного. В любом случае, такая же оптимизация не пройдет для формирования таблицы замен. Там действительно придется перемножать матрицу на вектор и еще вдобавок считать обратное число (вы это прибавили к количеству итераций?). Перемножение циркулярной матрцы с 5 единицами в каждой строке на вектор и сложение результата с вектором это 8 * 5 итераций, не учитывая вычисление мультипликативно обратного числа.
                          • 0
                            прошу прощения не гиг, а терабайт
    • 0
      имитовставка — это режим работы алгоритма, она возможна с большинством блочных шифров
    • +1
      недостатки:
      -нельзя определить криптостойкость алгоритма, не зная заранее таблицы замен;
      -реализации алгоритма от различных производителей могут использовать разные таблицы замен и могут быть несовместимы между собой;
      -возможность преднамеренного предоставления слабых таблиц замен лицензирующими органами РФ;
      -потенциальная возможность (отсутствие запрета в стандарте) использования таблиц замены, в которых узлы не являются перестановками, что может привести к чрезвычайному снижению стойкости шифра.
  • +2
    Масленников в своей книге «Криптография и свобода» отзывался не очень лестно об этой системе шифрования.
    • 0
      хм, какие же были его аргументы?
      • +1
        Переделанный американский DES под старую элементную базу.
        • 0
          Говорить, что этот алгоритм, который пока еще не взломали, это переделанный дырявый DES, это по меньшей мере не разумно. Вот подпись наша действительно переделанная американская, вкратце — плюс на минус заменили
          • 0
            «Мопед не мой»

            Книга, кстати, не сколько про криптографию, сколько про советских (и российских) криптографов.
        • 0
          основные отличия от DES: увеличенное количество циклов преобразования (32 против 16), бОльшая длина ключа (256 бит против 56) и более высокая скорость работы (на порядок?)
        • 0
          Никто DES не переделывал. Его взяли за основу и модернизировали с расчетом на будущее.
    • 0
      Нечто похожее говорил и Ruptor (Marcus) — специалист по криптографии из разряда «толковые» (в науке [любой] всегда есть мафия, лупни и толковые. мафия — кто сдерживает движение, но ни хрена не понимает, лупни — кто саппортит мафию и тоже ни хрена не понимает и толковые — кто понимает чуток совсем, но пытается двигаться).

      Достаточно наглядно, там рядом будут методики анализа и прочие радости.

      Сильно переживал и болел за его EnRUPT, но он не прошел SHA Competition, был скомпрометирован русским товарищем ;)
      • 0
        В Вашей «схеме науки» отсутствуют люди, понимающие предмет «средне» и «хорошо». Нужно улучшать модель…
        • +1
          Схема не моя, просто вспомнилось и то не дословно. Не скажу, что целиком и полностью с ней согласен, но криптография наука молодая и, возможно, сей тезис к ней наиболее применим.

          Мне бы не хотелось кого либо обидеть, упаси, но на моей памяти эта схема практически везде успешно существовала и продолжает существовать, к сожалению. Воспринимайте ее чуть более «относительно», возможно и знакомый вам уклад в нее уложится.
          • +2
            ну да, молодая, всего пара-тройка тысяч лет
  • 0
    К оригинальному звучанию на немецком всё-таки ближе «Файштель»
    • 0
      Ну да.

      Альберт Эйнстайн тоже от неправильных переводов страдает.
  • 0
    Хорошо бы ещё ссылки на источники давать.
    • 0
      На ГОСТ что-ли? Тут без К.О. и не обойдёшься.
      • +2
        • 0
          За основу взят конспект с лекциями по криптографии. Может быть, лекция бралась с этого ресурса.
          • +1
            В таком случае, честнее будет «откомпилировал лекцию/статью/гост», а не «написал статью».
  • +2
    тут все зависет от того какую таблицу замены выбрать, официально рекомендуемых нет, есть только те что когда то сбербанк использовал) поэтому тут палка на двух концах, шифр хорош, но мир не пытался его взломать, поэтому так такового криптоанализа нет
    • 0
      это откуда у вас такие данные, что мир не пытался его взломать? публикаций по этому поводу достаточно много, не так много как по DES, но DES и более распространен. Факт в том, что это шифр стойкость которого падает очень медленно.
      • 0
        публикации друг у друга копируют все))) если нет то киньте мне 5 разных статей криптоанализа ГОСТА
        • +1
          кидать не буду — вбейте в гугле 28147-89 cryptoanalysis там на первой странице беглым взглядом видно 3, на сверху еще одна. Плюс судя по вики в россии тоже занимались этой проблемой. Еще я уверен были работы например, по линейному криптоанализу.
    • +1
      Есть еще узлы замен в ГОСТ 34.11-1994
      • 0
        Так ведь он использует режим простой замены ГОСТа 28147-89, конечно же есть.
  • +5
    Позвольте добавить схематичное изображение описанного Вами материала в зарубежной нотации. Я очень уважаю отечественных математиков-криптографов, но для понимания графические схемы, используемые за рубежом, всё таки удобнее:



    Материал ключа используется в следующей очередности
    k[0]… k[31] = { K[0], K[1], ..., K[7], K[0], K[1], ..., K[7], K[0], K[1], ..., K[7], K[7], K[6], ..., K[0] }
    т.е., последние 8 раундов ключ подается в обратном порядке,
    K (большое) — 32-разрядные элементы исходного 256-битного ключа.

    Функция F(k[i]) имеет вид:



    Для впервые встречающихся с нотацией: плюс в кружке — это XOR, плюс в квадрате — сложение, три угловые скобки — циклический сдвиг влево, квадрат с буквой S — табличная подстановка (S-Box), косая черта уточняет разрядность потока данных в битах
  • 0
    Отсутствие бэкдоров доказано?
    • 0
      Их наличие/отсутствие зависит исключительно от стойкости узлов замен (S-Box-ов), а они не опубликованы, и более того выдаются для разных случаев разные.

      Возьмите в качестве узлов замен S[i]=i и этот шифр будет взламываем на персоналке.

      Так что и да и нет…
      • 0
        Против узлов замен для ГОСТ 28147-89, опубликованных в ГОСТ 34.11-94, пока что в мире успешных атак не создано. Это многого стоит.
        • 0
          Я вот к чему. Насколько мне известно, для создания криптосистем в этой стране необходима лицензия. Есть предположение, что необходимым условием получения такой лицензии является создание уязвимостей и открытие из определённым структурам (но не опубликование информации о них). Аналогия — для получения лицензии на услуги связи надо согласовать вопрос с СОРМ. Было бы странным, если бы ГОСТ на шифрование не имел таких бэкдоров.
          • +1
            странное предположение, вот допустим я создал криптосистему, работающую по какому-то алгоритму. по-моему все что мне нужно — это сертифицировать ее на предмет соответствия этому алгоритму, еще каких-то заявленных требований и на отсутствие скрытых возможностей.
            • +1
              Не совсем так. Как я понимаю, система сертификации «добровльно-принудительная». То есть, вы можете просто изобрести шифр и все — ничего больше не делать. (можно ли им пользоваться для себя — отдельный вопрос и регулируется отдельно). Вы даже можете его продавать для использования хоть в соседний ларек, хоть в ФСБ.

              Вы можете (если хотите!) получить сертификат на соответствие, на отсутствие бэкдоров, да хоть даже на экологическую безопасность по выхлопам CO2. Это добровольно.

              Но вот лицо, принимающее решение о закупке имеет свои должностные и законные требования. Например, для использования вашего алгоритма для охраны гостайны нужны какие-нибудь сертификаты/лицензии (на алгоритмы, конкретные программно-аппаратный продукт и даже на свою компанию) A,B и С, а для использования в банковской сфере — A, D и E. При этом сертификат B например может быть сертификат о соответствии гостовскому алгоритму шифрования, который в случае вашего собственного алгоритма явно не может быть соблюден, так как у вас другой алгоритм. Так что иметь на складе коробки с вашим шифровальным ПО вы можете, и продавать можете, но покупать их у вас и внедрять их уже не могут :-))
              • 0
                Ох, вы с госорганами не работали.

                Есть такой указ № 351 document.kremlin.ru/doc.asp?ID=044662

                И всё. Кроме систем, сертифицированных ФСТЕКом — ничего нельзя. И рад бы я OpenVPN использовать, но есть только дерьмовипнет, жутко неудобный в использовании, имеющий вопросы с безопасностью, сделанный для распила бабла…
                • 0
                  про то и говорю — если вы купите любой VPN, который не подходит под эти требования, продавцу ничего не будет — он имеет право продавать. Будет тому, кто купил и внедрил то, что ему не разрешено использовать.
                • 0
                  Программный комплекс LIRVPN – это реализация комплекса OpenVPN с использованием российской криптографии и со встроенным межсетевым экраном.
                • 0
          • 0
            В случае с ГОСТ-ом Вы как разработчик криптосистемы, если соберетесь пойти по правильному пути, должны будете получить в ФАПСИ/ФСБ узлы замен. А уж от того, какие Вам узлы замен выдадут, может зависеть ответ на Ваш вопрос.
            Это в теории.
            А на практике — я лично не верю, что соответствующему ведомству есть смысл выдавать узлы замен, заведомо ослабленные по какому-то известному только им принципу.

            Явных бэкдоров, аналогичных СОРМ-у, или более близкая аналогия — SkipJack/Clipper-у — в ГОСТе нет. Если уж есть какая-то серьезная необходимость, по-моему проще обязать клиентов депонировать ключи после создания организационными мерами.
            • 0
              Не ФАПСИ, а ФСО, но эта структура таблицы замен не выдает. Ключами занимается ФСБ и ФСТЭК.
              • +1
                Криптография в нашей стране на гос.уровне контролировалась ФАПСИ, функции которого в области шифрования после расформирования были переданы соответствующему Управлению ФСБ, что я и написал выше.

                Откуда взялись в Вашем посте ФСО и ФСТЭК мне неясно.
                • 0
                  ТЬфу, про ФСТЭК беру слова обратно. Это я затупил.

                  А про ФАПСИ я сказал, что упразднили эту структуру. Вместо нее сейчас ФСО.
            • +1
              А вы про trapdoor functions в S-боксах никогда не читали? :) Есть опубликованная статья о trapdoor'ах в сжимающих S-боксах (как в DES), там показано, что автор S-боксов, всегда может создать их таким образом, что сможет относительно просто вскрывать зашифрованные данные, причем пользователь этого S-бокса, доказать этого не может.

              В ГОСТ'е S-боксы несжимающие, один-к-одному, поэтому конкретно эта статья неприменима. Но вообще вопросы создания нелинейности в шифре непростые. Мне кажется, там можно очень много наворотить интересного.
              я лично не верю

              к сожалению, в этой области математики это не является достаточным аргументом.
              • 0
                я уже упоминал выше, что существуют критерии для проверки подстановки на уязвимости к дифференциальному и линейному криптоанализу. Поэтому данные нам S-boxы мы всегда можем оценить.
                • 0
                  критерии для проверки подстановки на уязвимости к дифференциальному и линейному криптоанализу
                  Покажите, пожалуйста критерии. То есть условия, необходимые и достаточные для противодействия линейному и дифференциальному криптоанализу.
                  • 0
                    строим таблицу дифференциалов, вероятности дифференциалов должны быть не больше чем 1/2^(n-2), где n — разрядность подстановки. Для дифференциалов веса 2 1/2^(n-3). Для линейного к/а линейное преобладание должны быть не больше 1/2^(n-2), а линейные суммы веса 2 должны иметь преобладание не больше чем 1/2^(n-3).
                    Эти критерии создают условия, делающие дифференциальный и линейный к/а хуже перебора.
              • +1
                Читал про trapdoor в S-Box, абсолютно согласен с Вашим мнением про «верю/не верю».

                И всё таки, отталкиваюсь от того, что утечка информации о самой возможности генерировать дефектные S-Box-ы для ГОСТ-а стоит в денежном эквиваленте очень и очень дорого. Не вижу смысла именно рисковать такими вещами для какой-то коммерческой организации.

                Как говорил мой учитель, даже если Вы знаете как взломать CAST/RC5/BlowFish/Rijndael, это можно будет сделать только один раз, а, значит, тратить знание на какую-то небольшую коммерческую сделку будет жалко, а крупная рыба может не прийти никогда.
        • +1
          Ну, не совсем из-за S-боксов (точнее, не только из-за них), но вот, пожалуйста — коллизия в ГОСТ 34.11-94 за 2105 операций.
          • 0
            • 0
              P.S. Там кстати, по SHA-1 уже нужно информацию обновлять — быстро криптоанализ вперед движется.
      • 0
        есть вроде рекомендации, которые делают почти невозможным линейный и дифференциальный к/а.
  • +1
    Хотелось бы узнать о скорости шифрования по сравнению с другими алгоритмами при аппаратной и программной реализации.
  • +3
    Вообще-то, по современным критериям, крупным недостатком ГОСТа является маленький размер блока — всего 64 бита. Исходя из проблемы «дня рождения», в выходном потоке шифра два блока будут совпадать с вероятностью 1/2 примерно на 232 блоков — около 5.1*109.

    Теперь давайте узнаем, на какой объем трафика будет приходиться такая коллизия:
    5.1*10^9*64/8/1024/1024/1024
    37.99796104431152343750

    37 гигабайт.

    Тут выше рассуждалось про гигабитные шифрваторы на ГОСТе, как это выглядит для них (это, разумеется, оценка без накладных расходов, с учетом постоянной скорости шифрования в один гигабит и прочее, но понять проблему можно):

    5.1*10^9*64/1024/1024/1024/60
    5.06639480590820312500

    итого, за пять минут работы гигабитного шифратора мы в выходе с вероятностью 1/2 получим два совпадающих блока. Что это означает? Рассмотрим использование самого распространенного режима шифрования — CBC. Обозначим за Ci — i-тые блоки шифртекста, а Pi — i-тые блоки открытого текста. Ниже "+" означает сложение по модулю 2 или XOR.

    Если блок Cx = Cy, тогда, по определению CBC, Cx-1 + P x = Cy-1 + Py. Перегруппируем, получим

    Cx-1 + Cy-1 = Px + P y

    Таким образом, когда у нас два блока совпали, мы можем вычислить разницу между двумя другими блоками. В реальной жизни, когда у нас есть разница между открытыми текстами, зачастую можно догадаться, что за тексты используются. Например, в случае сетевого трафика атакующий может попытаться поискать заголовки IP пакетов в этих блоках и используя, например, диагональную атаку, восстановить их содержимое. Тут, разумеется, точной оценки вероятности успеха нет, но я бы на это не полагался.

    Итак, за 5 минут наблюдения работы гигабитного шифратора на ГОСТе атакующий может получить достаточно информации для восстановления 16 байт открытого текста. Дальнейшие успехи атакующего, если не поленюсь, могу написать отдельным постом.

    Ах, да! Про рекеинг, конечно, я знаю. :) Но, во-первых, про него знают не все разработчики продаваемых на отечественном рынке шифраторов, а во-вторых, некоторые из тех, которые знают, реализовали его так, что трафик на момент рекеинга практически перестает ходить. Извините, я не буду упоминать названий компаний, что б меня не обвинили в раскрытии великих секретов и тайн отечественной криптоиндустрии. А то будут «скандалы-интриги-расследования». :)
    • 0
      вот уж скандалов интриг и расследований нам точно не надо. 16 байт из 37 гигабайт, тем более их сумма это вообще ни что. И ни чего из этих 16 байт восстановлено не будет, я могу вам чисто для примера дать сумму каких-то блоков по 8 байт из каких нибудь двух пакетов — вы из них ничего не вытянете. Никто не мешает менять ключ, тем более 37 гигабайт это все-таки большая выборка. Во-вторых у госта нет CBC если уж на то пошло, вы наверное перепутали с гаммированием и каждый сам может выбирать режим гаммирования, например с обратной связью взять.
      • 0
        И ни чего из этих 16 байт восстановлено не будет, я могу вам чисто для примера дать сумму каких-то блоков по 8 байт из каких нибудь двух пакетов
        ну, вы же понимаете, может — не будет, а может — будет. Например, с учетом положения блока в пакете можно догадаться, что в этом блоке искать. На этом, к сожалению, нельзя защиту строить.

        Конечно, ключевая информация и данные об открытом тексте _всегда_ утекают при использовании шифра, но тут как-то слишком быстро, на мой взгляд. По одному биту на 2^23 бит шифра, если я правильно посчитал.

        При гаммировании, разумеется, такой фокус, как с CBC не пройдет, вы правы.
        • 0
          увы, но статистический к.а. к такой выборке почти неприменим, а следовательно маловероятно вы из него что-то вытянете. Я бы еще посмотрел, как вы будете сортировать 37 гигабайт данных, для поиска одинаковых блоков. И еще раз — вы путаете определения. Те формулы, которые вы описали — это не CBC (режим сцепления блоков), а гаммирование простое. В CBC Сi = E(C(i-1)+Pi,K).
  • 0
    Реализовывал этот алгоритм (в режиме выработки имитовставки) в коде в рамках курса «Методы и средства защиты информации» в этом семестре.

    Кстати, вот в этой статье описано всё более чем понятно: www.enlight.ru/crypto/articles/vinokurov/gost_i.htm
    Возможно кому-то пригодится.
    • +1
      Проверяли по тестовым векторам из ГОСТ 34.11-94? Сходится?
      • 0
        Не проверял, не знаю.
  • 0
    Это не им часом шифруют данные банки при работе банк-клиентов? InterPRO, например? Может, найдутся на Хабре добрые люди, которые реализуют алгоритм под Linux?
    • 0
      Да он уже сто лет как реализован, и под линукс тоже. Только вот не сертифицирован.

      Интересная тема про это на нашем ЛУГе: lug.bryansk.ru/forum/viewtopic.php?f=12&t=1188
      • 0
        Почитал. ФСПУ-IP — дурацкая незащищённая штуковина. Работали, знаем. Ставить аппаратные средства шифрования — крайний вариант. Я имею в виду скорее даже не реализованный на любом ЯП алгоритм шифрования, а его продвижение в банковский сектор.
        • 0
          Опять же, без сертификатов решения использовать никто не разрешит.
          Натыкаемся не на технические, а на административно-законодательные ограничения.
    • +2
      Он в девелоперской ванильной OpenSSL есть: openssl.org/news/changelog.html (поищите там по ключу GOST)
  • –1
    скажите, зачем вы это пишите? это изучают на третьем курсе любого вуза.
    этих статей полно по инету.
    • 0
      затем, чтобы поведать общественности, которая с этим незнакома (поверьте, изучают это далеко не все). к тому же я предлагаю программную реализацию.
      • 0
        narod.ru/disk/16992573000/%D0%93%D0%9E%D0%A1%D0%A2%2028147-89.zip.html
        вот вам реализация
        у нас этих реализаций десять штук было на потоке
        • 0
          Не нравится — не читайте.
        • 0
          Кстати, спасибо за реализацию, но у меня своя.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.