Русская Википедия:Криптосистема Нидеррайтера

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Криптосистема Нидеррайтера — криптосистема с открытыми ключами, основанная на теории алгебраического кодирования, разработанная в 1986 году Харальдом НидеррайтеромШаблон:Source-ref. В отличие от криптосистемы McEliece, в криптосистеме Нидеррайтера используется проверочная матрица кода. Криптосистема Нидеррайтера позволяет создавать цифровые подписи и является кандидатом для постквантовой криптографии, поскольку устойчива к атаке с использованием алгоритма Шора.

Используемый в криптосистеме Нидеррайтера алгоритм основан на сложности декодирования полных линейных кодов.

Несмотря на то, что данная криптосистема была взломана, некоторые её модификации остаются криптостойкимиШаблон:Source-ref

Алгоритм работы

Генерация ключа

  1. Алиса выбирает <math>(n,k)</math> код <math>C</math> над полем Галуа <math>GF(q)</math>, исправляющий <math>t</math> ошибок. Этот код должен обладать эффективным алгоритмом декодированияШаблон:Source-ref.
  2. Алиса генерирует <math>(n-k) \times n</math> проверочную матрицу <math>H</math> кода <math>C</math>.
  3. Алиса выбирает случайную <math>(n-k) \times (n-k)</math> невырожденную матрицу <math>S</math> над полем <math>GF(q)</math> и некоторую <math>n \times n</math> матрицу перестановки <math>P</math>Шаблон:Source-ref.
  4. Алиса вычисляет <math>(n-k) \times n</math> матрицу <math>H_{pub}=SHP</math>
  5. Открытым ключом Алисы является пара <math>(H_{pub},t)</math>. Закрытым ключом является набор <math>(S^{-1},H,P^{-1})</math>.

Шифрование сообщения

В данном случае сообщения — это все <math>n-</math>векторы с координатами из поля <math>GF(q)</math> с весом, не превосходящим <math>t</math>. Таким образом, сообщениями являются все возможные ошибки, которые выбранный код в состоянии исправитьШаблон:Source-ref.
Предположим, что Боб хочет отправить сообщение Алисе, чей открытый ключ <math>(H_{pub},t)</math>.

  1. Боб представляет своё сообщение в виде двоичной последовательности <math>m</math> длины <math>n</math>, имеющей вес, не превосходящий <math>t</math>.
  2. Боб вычисляет шифротекст по формуле: <math>c = mH_{pub}^T</math>. Таким образом, шифротекстом в криптосистеме Нидеррайтера является зашумленный синдром шифруемого вектора ошибкиШаблон:Source-ref.

Расшифровывание сообщения

После получения сообщения <math>c</math>, Алиса выполняет следующие действия:

  1. Алиса вычисляет <math>s = c{(S^T)}^{-1} = mP^TH^TS^T(S^T)^{-1} = (mP^T)H^T = \hat mH^T</math>. Заметим, что, так как <math>P</math> — матрица перестановки, вес <math>\hat m = (mP^T)</math> совпадает с весом <math>m</math> и не превосходит <math>t</math>, и потому алгоритм декодирования для <math>C</math> может найти вектор ошибки, соответствующий синдрому <math>s</math>Шаблон:Source-ref.
  2. Алиса использует алгоритм быстрого декодирования для кода <math>C</math>, чтобы найти <math>\hat m</math>Шаблон:Source-ref.
  3. Алиса вычисляет сообщение <math>\hat mP^{-1} = mPP^{-1} = m</math>.

Оригинальная криптосистема и её модификации

В оригинальной криптосистеме Нидеррайтер предлагал использовать коды Рида-Соломона и не использовал матрицу перестановки <math>P</math>. Однако такая система оказалась нестойкой и была взломана Сидельниковым и Шестаковым в 1992 годуШаблон:Source-ref. Авторы показали, что возможно угадать структуру закрытого ключа по открытому и подобрать такие матрицы <math>{\hat H}</math> и <math>{\hat S}</math>, что <math>H_{pub} = {\hat S}{\hat H}</math>. После этого для повышения криптостойкости системы было предложено использовать матрицу перестановки <math>P</math>. Кроме того, появились различные модификации системы, например:

Преимущества и недостатки системы

Преимущества

  • В отличие от McEliece, в криптосистеме Нидеррайтера не используются случайные параметры. Таким образом, результат шифрования одного и того же текста будет одинаковым. Этот факт позволяет использовать именно систему Нидеррайтера, а не McEliece, для создания электронно-цифровой подписи.
  • Размер открытого ключа в криптосистеме Нидеррайтера в <math>\frac {n} {n - k}</math> раз меньше, чем в McElieceШаблон:Source-ref.
  • По сравнению с RSA, скорость шифрования выше приблизительно в 50 раз, а дешифрования — в 100 разШаблон:Source-ref.

Недостатки

  • Для шифрования произвольного сообщения необходим алгоритм перевода в <math>q</math>-арный вектор длиной <math>n</math> веса не более <math>t</math>.
  • Размер ключей больше, чем в классических криптосистемах с открытым ключом (RSA, Схема Эль-Гамаля, ГОСТ Р 34.10-2012).
  • Размер шифротекста намного больше, чем размер шифруемого сообщения (если сообщение размера <math>t</math> переводится в вектор длиной <math>n</math> и шифруется, то получается шифротекст размером <math>n-k</math>, что не менее, чем в 2 раза превосходит <math>t</math>).

Ниже в таблице приведены различные параметры для криптосистем McEliece, Нидеррайтера и RSA, наглядно показывающие их преимущества и недостаткиШаблон:Source-ref.

McEliece
n=1024, k=524, t=101
бинарный код
Криптосистема Нидеррайтера
n=1024, k=524, t=101
бинарный код
RSA
1024-битные модули
e=17
Размер открытого ключа
в байтах
67072 32750 256
Количество бит
полезной информации
512 276 1024
Число бинарных операций
для шифрования
514 50 2402
Число бинарных операций
для расшифровывания
5140 7863 738112

Эквивалентность криптостойкости системы Нидеррайтера и системы McEliece

Как показано в оригинальной статье о системе СидельниковаШаблон:Source-ref, атака на систему Нидеррайтера может быть полиномиально сведена к атаке на систему McEliece и обратно.

Пусть известен синдром <math>c = eD</math>. Тогда можно вычислить вектор <math>b = aE + e</math> с некоторым <math>a</math> таким, что <math>c = bD</math>. Вектор <math>b</math> будет рассматриваться как шифротекст в системе McEliece. Если найдена криптографическая атака со сложностью <math>T</math> для системы McEliece, то есть известен алгоритм вычисления вектора <math>a</math>, который является секретной информацией в этой системе, то вектор <math>e</math>, являющийся секретом для системы Нидеррайтера, можно представить в виде <math>e = aE + b</math>. Таким образом, сложность определения <math>e</math> совпадает со сложностью определения <math>a</math>.

Если же известна криптоатака со сложностью <math>T</math> для системы Нидеррайтера, то возможно, используя в качестве шифротекста вектор <math>(aE + e)D^T = eD^T</math>, вычислить векторы <math>e</math> и <math>a</math>.

Построение цифровой подписи

В 2001 году Николя Куртуа, Мэттью Финиаз и Николя Сандриер показалиШаблон:Source-ref, что криптосистема Нидеррайтера может быть использована для создания электронной подписи.

Подпись сообщения

Пусть <math>H_{pub}</math> — открытый ключ криптосистемы Нидеррайтера, использующей <math>(n,k,d)</math>-линейный код. Для подписи документа <math>D</math> необходимо:

  1. Выбрать хеш-функцию <math>h()</math>, дающей <math>n-k</math> символов на выходе. Таким образом, результат данной хеш-функции можно представить в виде синдрома и попытаться декодировать;
  2. Вычислить хеш <math>s = h(D)</math>;
  3. Для каждого <math>i = 0,1,2,...</math> вычислить <math>s_i = h(s|i)</math>;
  4. Найти наименьший номер <math>i_{min}</math> такой, что синдром <math>s_{i_{min}}</math> будет возможно декодировать. Пусть <math>z</math> — результат декодирования синдрома <math>s_{i_{min}}</math>;
  5. Подписью документа <math>D</math> является пара <math>(z,i_{min})</math>.

Проверка подписи

  1. Вычислить <math>s_1 = zH_{pub}^T</math>;
  2. Вычислить <math>s_2 = h(h(D)|i_{min})</math>;
  3. Сравнить <math>s_1</math> и <math>s_2</math>: если они совпадают — подпись верна.

Пример работы системы

Пусть для кодирования был выбран <math>(7,3)</math> код Рида-Соломона над полем Галуа <math>GF(2^3)</math>, построенным по модулю неприводимого многочлена <math>x^3+x+1</math>, с порождающим многочленом <math>g(x)=(x-1)(x-{\alpha})(x-{\alpha}^2)(x-{\alpha}^3)=(x-1)(x-2)(x-4)(x-3)=x^4+4x^3+7x^2+7x+5.</math>

Тогда, порождающая матрица кода: <math>G= \begin{pmatrix} 1 & 4 & 7 & 7 & 5 & 0 & 0 \\ 0 & 1 & 4 & 7 & 7 & 5 & 0 \\ 0 & 0 & 1 & 4 & 7 & 7 & 5 \end{pmatrix} </math>

Проверочная матрица кода: <math>H= \begin{pmatrix} 1 & 1 & 1 & 1 & 1 & 1 & 1 \\ 1 & 2 & 4 & 3 & 6 & 7 & 5 \\ 1 & 4 & 6 & 5 & 2 & 3 & 7 \\ 1 & 3 & 5 & 4 & 7 & 2 & 6 \end{pmatrix} </math>

Заметим, что расстояние данного кода <math>d=n-k+1=5</math>, то есть число исправляемых ошибок <math>t=(d-1)/2=2</math>.

Генерация ключей

Пусть выбрана матрица <math>S= \begin{pmatrix} 4 & 1 & 3 & 5 \\ 7 & 1 & 5 & 2 \\ 2 & 6 & 5 & 4 \\ 1 & 7 & 2 & 1 \end{pmatrix} </math> . Тогда обратная к ней матрица <math>S^{-1}= \begin{pmatrix} 1 & 5 & 2 & 7 \\ 7 & 5 & 0 & 7 \\ 4 & 4 & 1 & 5 \\ 1 & 0 & 0 & 4 \end{pmatrix} </math>

Пусть выбрана матрица перестановки <math>P= \begin{pmatrix} 0 & 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 & 0 \\ 1 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 & 0 \\ \end{pmatrix} </math>

В этом случае открытым ключом системы будет матрица: <math>H_{pub}=SHP= \begin{pmatrix} 1 & 3 & 7 & 5 & 6 & 0 & 2 \\ 0 & 1 & 0 & 1 & 1 & 3 & 5 \\ 2 & 5 & 1 & 0 & 6 & 2 & 0 \\ 6 & 5 & 6 & 4 & 2 & 4 & 6 \end{pmatrix} </math>

Шифрование

Пусть выбранное сообщение было представлено в виде вектора <math>m= \begin{pmatrix} 0 & 2 & 0 & 0 & 0 & 5 & 0 \end{pmatrix} </math> веса 2.

Зашифрованное сообщение: <math>M=mH_{pub}^T= \begin{pmatrix} 7 & 2 & 7 & 7 \end{pmatrix} </math>

Расшифровывание

Принятый вектор <math>M= \begin{pmatrix} 7 & 2 & 7 & 7 \end{pmatrix} </math>

Для него вычислим декодируемый синдром <math>s=M(S^{-1})^T= \begin{pmatrix} 0 & 1 & 3 & 6 \end{pmatrix} </math>

Используя алгоритм декодирования кода Рида-Соломона, декодируем <math>s</math>.

Получится вектор <math>\hat m= \begin{pmatrix} 2 & 0 & 0 & 0 & 0 & 0 & 5 \end{pmatrix} </math>

После чего вычислим исходный вектор <math>m=~\hat mP^{-1}= \begin{pmatrix} 0 & 2 & 0 & 0 & 0 & 5 & 0 \end{pmatrix} </math>

См. также

Примечания

Шаблон:Примечания

Литература

Шаблон:Добротная статья