Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 9 января 2021 года; проверки требуют 6 правок.
Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 9 января 2021 года; проверки требуют 6 правок.
Для описания закрытого ключа выбран код исправляющий ошибки, для которого известен эффективный алгоритм декодирования и который может исправить ошибок. Алгоритм использует двоичные коды Гоппа, которые легко декодируются благодаря алгоритму Петерсона. Открытый ключ получается при помощи маскировки выбранного кода как полного линейного. Для этого порождающая матрица сначала умножается справа на матрицу перестановок, а затем на невырожденную матрицу слева (см. алгоритм работы).
Существует несколько вариантов криптосистемы, использующих различные типы кодов. Большинство из них оказываются менее защищенными. Отдельного рассмотрения заслуживает вопрос выбора параметров криптосистемы[4].
До сих пор McElice с кодами Гоппы не поддается криптоанализу[5]. Наиболее известные атаки используют алгоритм декодирования множества данныx. Последние работы описывают как атаки на систему, так и её защиту[6]. В других работах показано, что для квантовых вычислений размер ключа должен быть увеличен на четыре порядка из-за усовершенствования декодирования множества данных[2].
Криптосистема имеет несколько преимуществ, например, над RSA. Шифрование и дешифрование проходит быстрее и с ростом длины ключа степень защиты данных растет гораздо быстрее. Долгое время считалось, что McEliece не может быть использована для ЭЦП. Однако оказалось возможным построить схему для ЭЦП на основе криптосистемы Нидеррайтера (модификация МcEliece). Поскольку в зависимости от используемых кодов, эти две криптосистемы выражают одну и ту же кодовую задачу, на сегодняшний день, можно утверждать, что McEliece применим в задачах аутентификации.
Из-за недостатков McEliece используется редко. Одно из исключений — использование McElice для шифрования в Freenet-подобной сети ENTROPY.
Гоппа полином задается как полином над полем вида , где , а . Также зададим -размерное подмножество над расширением поля : , для которого верно при любых . Далее, для кодового слова над полем определяется функция .
Код Гоппы состоит из всех кодовых слов , удовлетворяющих . Это означает, что полином делит .
Размерность кода Гоппы длины больше или равна , а минимальное расстояние кода больше или равно .
Проверочная матрица имеет следующий вид:
.
Если Гоппа полином представляет из себя неприводимый полином над полем , тогда минимальное расстояние такого кода больше или равно . В дальнейшем предполагается, что .
В криптологических приложениях используется неприводимый, бинарный код Гоппы с параметрами .
Существует несколько причин для применения кодов Гоппы в криптосистеме МcEliece. Во-первых, существует несколько быстрых алгоритмов декодирования за полиномиальное время[7]. Во-вторых, любой неприводимый многочлен над полем подойдет для того, чтобы задать код Гоппы, порождающая матрица кода является почти случайной. Следовательно, коды Гоппы очень легко задать, но, в то же время, сложно распознать. Для фиксированной длины кодового слова существует множество кодов. Например, для кода длины , способного исправлять до ошибок, существует около различных Гоппа кодов. Их количество растет экспоненциально в зависимости от длины слова и степени порождающего полинома.
Пусть, используется неприводимый, бинарный код Гоппы c параметрами , где — неприводимый полином степени над полем , причем .
Алиса случайным образом генерирует порождающую матрицу такого кода
,
выбирает матрицу
и матрицу перестановки
,
Тогда
.
В качестве открытого ключа предоставляется эта матрица и . Если Боб хочет послать сообщение Алисе, то он сначала генерирует вектор с весом , например, .
Вычисляет шифротекст
и посылает его Алисе.
После получения сообщения Алиса сначала вычисляет
.
Из-за перестановок ошибки переместились в первый и шестой символы. Алиса, используя быстрый алгоритм декодирования, находит
Первоначально были предложены параметры: , в результате размер публичного ключа составлял 524*(1024—524) = 262,000 бит. В недавно проведенном анализе были предложены следующие параметры: для 80 бит безопасности при использовании обычного алгебраического декодирования, или при использовании декодировочной таблицы для кода Гоппы. При этом публичный ключ увеличивается до 520,047 и 460,647 бит соответственно. Для устойчивости против квантового компьютера параметры параметры следует увеличить до , а размер публичного ключа до 8,373,911 бит[1][6].
Криптографическая стойкость системы основана на двух сложных вычислительных задачах: исчерпывающего поиска по ключевому пространству и декодирования по максимуму правдоподобия. В литературе описано достаточно большое количество атак на McEliece[8]. Некоторые атаки, называемые структурными атаками, основаны на попытке построить/реконструировать декодер для кода, сгенерированного открытым ключом . Если такая попытка окажется успешной, то закрытый ключ будет раскрыт, а криптосистема полностью взломана. Код , порожденный матрицей и код , порожденный матрицей , принадлежат одному эквивалентному классу. Злоумышленник должен сравнить представителя кода из каждого класса в для того, чтобы определить эквивалентный код. Поскольку эквивалентные классы имеют очень малую мощность, этот процесс выходит за рамки возможностей даже самых мощных компьютеров. Для оригинальных параметров данная структурная атака требует для изучения более кодов[5].
Другие атаки направлены на получения исходного текста сообщения из шифрованного сообщения. Большинство из них основаны на декодировании множества данных (ISD (англ.)) или на парадоксе дней рождения[9], их обобщениях и улучшениях. Существуют такие атаки, как, например, итерационное декодирование[3] и статическое декодирование, но они не являются успешными. Атака ISD оказалась наименее сложной. В последние годы было описано несколько алгоритмов и их улучшения. Наиболее важные перечислены в таблице вместе с их двоичным показателем затрат для декодирования кода Гоппы. Для этих алгоритмов известны их предельные показатели[10].
Пусть — это код длины над полем , а -мерный вектор имеет расстояние от кодового слова , тогда — это элемент с расстоянием от . И обратное, если — это код длины над полем с минимальным расстоянием меньше , тогда элемент веса не может быть в , он должен быть в . Или иначе, — элемент с расстоянием от .
Шифротекст криптосистемы McEliece имеет расстояние от уникального ближайшего кодового слова кода , который имеет расстояние как минимум . Атакующий знает порождающую матрицу кода и может легко добавить для образования порождающей матрицы для . Единственное кодовое слово веса в — это . Найдя это кодовое слово, атакующий находит и легко получает искомый текст. Стоит учесть, что декодирование дает незначительное упрощение:
если имеет размерность , то имеет размерность . Алгоритм Штерна позволяет найти кодовое слово наименьшего веса.
На вход алгоритма поступает число и проверочная матрица размера для кода над полем . С помощью методов линейной алгебры всегда можно получить из порождающей матрицы проверочную.
Случайным образом выбирается из столбцов матрицы . Затем случайным образом выбирается -размерное подпространство , которое разделяет оставшиеся на два подмножества и . Для кодового слова имеющего ровно не нулевых бит в , ровно не нулевых бит в , не нулевых бит в и ровно не нулевых бит в других столбцах.
Поиск состоит из трех шагов. На первом шаге применяя простейшие операции к получаем из выбранных столбцов единичную матрицу. Этого сделать не получиться, если оригинальная подматрица не является обратимой, тогда алгоритм запускается заново. Потери на перезапусках избегаются благодаря адаптивному выбору каждого столбца.
На втором шаге подматрица есть единичная матрица, множество из столбцов соответствует строчкам. Для каждого размерного подмножества множества вычисляется сумма столбцов в для каждой из этих строчек. В результате получается -битный вектор . Аналогично для каждого размерного подмножества множества .
На третьем шаге для каждой коллизии считается сумма столбцов в . Эта сумма будет являться -битным вектором. Если сумма имеет вес , то получается путем добавления соответствующих столбцов в подматрицу. Эти столбцов вместе с и формируют искомое кодовое слово веса .
Размер открытого ключа слишком большой. При использовании кодов Гоппы с параметрами, предложенными Мак-Элисом, открытый ключ составляет бит, что вызывает сложности в реализации;
Зашифрованное сообщение гораздо длиннее исходного;
На данный момент алгоритмы, использующие данную криптосистему в задачах аутентификации не нашли широкого распространения.
Шнайер Б. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си = Applied Cryptography. Protocols, Algorithms and Source Code in C. — М.: Триумф, 2002. — 816 с. — 3000 экз. — ISBN 5-89392-055-4.