Атака по ошибкам вычислений на эллиптические кривые, использующие алгоритм Монтгомери

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

Атака по ошибкам вычислений на эллиптические кривые, использующие алгоритм Монтгомери — один из способов атаки по сторонним каналам[1], направленный на конкретный алгоритм скалярного умножения (алгоритм Монтгомери), использующийся в криптосистемах построенных на эллиптических кривых[2].

Краткие сведения об эллиптических кривых

Эллиптические кривые являются надёжным инструментом, при помощи которого можно построить криптосистему с открытым ключом [2].

Определение

Предполагается, что существует конечное поле нечётной характеристики p>3, обозначаемое Fp [3]. Тогда в поле Fp{O} может быть задана ЭК в форме Вейерштрасса[4]:

E(Fp)={(x,y):y2=x3+Ax+B;4A3+27B20,A,BFp}{O}

Для удобства вычислений данный вид может быть преобразован переходом к проективным координатам Якоби[5]. В таком случае эллиптическая кривая будет иметь вид:

E(Fp)={(X:Y:Z):ZY2=X3+AZ2X+Z3B;4A3+27B20,A,BFp,Z0}{O}

Сложение двух точек эллиптической кривой

Сложение двух точек P и Q на эллиптической кривой легче всего понять при помощи геометрической иллюстрации.

ECClines.svg

В простейшем случае (1), когда PQ сложение производится путём проведения прямой через суммируемые точки [6]. Данная прямая пересечёт эллиптическую кривую в третьей точке R. Тогда симметричную эй точку R и называют суммой двух точек P и Q на эллиптической кривой.

Существуют и другие ситуации" (2-4), определение сложения в которых требует особого рассмотрения:

Случай (2) отражает ситуацию, в которой прямая, проходящая через суммируемые точки оказалась касательной к эллиптической кривой. Здесь полагают, что в точке Q прямая не касается эллиптической кривой, а пересекает её в двух очень близких [7] точках так, что обе можно считать равными Q. Тогда можно сказать, что Q+Q=P, другими словами P+Q=Q

Особенность (3) в том, что получившаяся прямая параллельна оси ординат, вследствие чего третьей точки, которая бы принадлежала и прямой и эллиптической кривой не существует. Но, поскольку Q=P получается, что P+Q=O

Последний случай (4) — комбинация (2) и (3). Получаем, что P+P=O[8].


Скалярное умножение

Далее определим операцию умножения точек эллиптической кривой на число[9][10]. Пускай выбрана точка P на эллиптической кривой и целое число k длиной n бит. Затем путём k-кратного сложения точки P самой с собой получается точка kP, лежащая на той же эллиптической кривой, в силу свойств поля, в котором производится операция многократного сложения.

Пример простейшего алгоритма скалярного умножения:

Input: k, P
Output: kP

1: Q = P
2: for i = n-2 down to 0:
3:     Q = 2Q
4:     if k[i] == 1:
5:         Q = Q + P
6: return Q

Предложенная атака

В 2008 году в статье Пьера-Алана Форке [11] была обнаружена уязвимость алгоритма Монтгомери.

Авторы отметили, что недостаток алгоритма Монтгомери заключается в том, что вычисление значения точки на кривой производится лишь на последней итерации цикла, а во время промежуточных шагов принадлежность полученной точки эллиптической кривой не подтверждается [11]. Отсюда возникает возможность для атаки по ошибке вычислений[12].

В статье[11] предлагается использовать вспомогательную кривую E. Вводимая кривой является изоморфной основной кривой E в поле Fp2, но не в Fp. Таким образом [11]:

xFp:g(x)x3+ax+b0,

если g(x) является квадратичным остатком, то x будет являться абсциссой точки на E.

В противном случае существует две возможности:

  1. Рассмотреть новую группу точек на E таких что yFp2
  2. Использовать абсциссу точки на кривой E, получая то же самое значение y

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

В своем оригинальном варианте алгоритм Монтгомери не проводил проверку принадлежности результата исходной эллиптической кривой, вследствие чего злоумышленнику необходимо было вносить ошибку лишь в самом начале вычислений. Авторы статьи про атаку предложили простое решение данной проблемы, а именно проверку того, что результат принадлежит исходной кривой[11]. Таким образом алгоритм выглядит следующим образом:

Input: k, P
Output: kP

1: compute kP
2: if kP is on the curve, i.e. <math>x^3 + ax + b</math> is a square:
3:     return kP
4: else:
5:     return Error

.

Эта мера оказалась недостаточной, поскольку далее авторы приводят способ преодоления данной проверки.[13]. Идея основана на изменении результата вычислений прямо перед проведением проверки. Абсцисса x результата вычислений kP может быть изменена злоумышленником при помощи побитового сложения xϵ, обозначаемая kPϵ, с вероятностью 1/2 принадлежащая кривой. Само значение ϵ злоумышленнику неизвестно, но может быть определено из соображений, что вносимая ошибка изменяет только первые s регистров из n. За 2sn/s можно подобрать ϵ, что довольно долго для больших значений n.

Но существует гораздо быстрый способом, который и предлагают использовать авторы[13]. Злоумышленнику достаточно двух шагов атаки по ошибкам вычислений[12]. Внеся в один и тот же результат различные ошибки ϵ ϵ можно понять какие именно регистры были изменены, таким образом получив возможность обойти проверку, а далее решить задачу дискретного логарифмирования [14] для нахождения секретного ключа k.

А прямо перед окончанием вычислений вносится ещё одна ошибка, для перемещения точки обратно на основную кривую[13].

Учитывая особенности алгоритма Монтгомери такой перенос будет незаметным с точки зрения вычислений. Дополнительно будет пройдена одна из самых часто встречающихся проверок: принадлежность итоговой точки исходной кривой[15].

Способы отражения атаки

Простейшей идеей является проверка промежуточных значений Q0[13]. Но поскольку все операции производятся в проективных координатах, непосредственное нахождение значения в точке на каждой итерации цикла будет вычислительно сложной задачей, что значительно снизит эффективность алгоритма, полученную за счёт отказа от y-координаты. Поэтому необходимы другие способы отражения атаки [10].

Защита Эбейд-Ламберта

Для избавления от дорогостоящих вычислений, предлагается[16] оценивать значение точки Q0=(x0,y0)=(X0:Y0:Z0) в проективных координатах, а именно Y0. После этого с помощью всего одной операции инверсии получится нужное для проверки y0. Для начала, формулу для вычисления значения y0 приводится к следующему виду[17], путём подстановки проективных координат точек Q0=(X0:.:Z0) и Q1=(X1:.:Z1):

y0=2B+(A+xX0Z0)(x+X0Z0)X1Z1(xX0Z0)22y, где (x,y) — координаты точки (Q1Q0)
y0=2BZ1Z02+Z1(AZ0+xX0)(xZ0+X0)X1(xZ0X0)22yZ1Z02=Y0Z0

Далее с помощью одной операции инверсии получается искомое проверочное значение для y0.

Дополнительно можно вычислить, X0=2yX0Z1Z0 и произвести подстановку в уравнение кривой, получив проверочное соотношение:

Z(Y'2BZ'2)=X(X'2+AZ)

Алгоритм LOEDAR

Более эффективным способом отражения описанной выше атаки является алгоритм LOEDAR[18]. Авторы заявляют, что простейшей идеей являлась бы проверка того, что на каждом шаге выполнено равенство Q0+PQ1. Однако проведение такой проверки в исходных координатах затруднительно, поскольку требует непосредственного вычисления y-координат всех трёх точек. В проективных координатах необходимо знать Q1P=(XQ1P:.:ZQ1P), что также требует дополнительных вычислений

Предлагается использовать[18] «верификационную точку» Qv. Особенность заключается в том, что все вычисления и проверки будут по-прежнему осуществляться в проективных координатах (X:.:Z), поскольку на любом шаге алгоритма выполняется соотношение Q1+Qv=2Q0. Таким образом алгоритм будет выглядеть следующим образом:

Input: k, P
Output: kP
Commentary: Q[2] := Q_v

1: Q[0] = P, Q[1] = 2P, Q[2] = 0
2: for i = k-2 down to 0:
3:     Q[1 - k[i]] = Q[0] + Q[1]
4:     Q[k[i]] = 2Q[k[i]]
5:     Q[2] = Q[2] + Q[k[i]]
6:     # verification part
7:     (Q[2] + Q[1] == 2Q[0]) ? continue : break     
8: return Q[0]

Примечания

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