Дополнение по эллиптическим кривым
Отказ от ответственности: это не делает никакой справедливости по богатой теме эллиптических кривых. Это сильно упрощено. Поскольку в последнее время эллиптические кривые привлекли большое внимание средств массовой информации в контексте шифрования, я хотел дать небольшое представление о том, как на самом деле работает «расчет» по эллиптической кривой.
Введение
Эллиптические кривые - это множества точек (x,y)
на плоскости формы y^2 = x^3+Ax+B
. (Кроме того, 4A^3+27B^2 ≠ 0
чтобы избежать неприятных особенностей.) Вы можете рассмотреть эти кривые в любой области. Если вы используете поле действительных чисел, кривые можно визуализировать, и они выглядят так:
Особенностью этих кривых является то, что они имеют встроенную арифметическую операцию, которая является аналогом сложения. Вы можете добавлять и вычитать точки, и эта операция является ассоциативной и коммутативной (абелева группа).
Как работает сложение?
Примечание: добавление точек на эллиптических кривых не является интуитивно понятным. Такое дополнение определяется так, как оно есть, потому что оно обладает определенными хорошими свойствами. Это странно, но это работает.
Поскольку эллиптические кривые образуют группу, существует аддитивная идентичность, которая эквивалентна 0. То есть добавление 0
к любой точке не изменит результат. Эта аддитивная идентичность является «точкой» на бесконечности. Все линии на плоскости включают эту точку на бесконечности, поэтому ее добавление не имеет значения.
Скажем, любая заданная линия пересекает кривую в трех точках, которые могут быть 0
, и что сумма этих трех точек равна 0
. Имея это в виду, взгляните на это изображение.
Естественный вопрос: что это P+Q
? Хорошо, если P+Q+R = 0
, тогда P+Q = -R
(альтернативно написано как R'
). Где -R
? Именно здесь R + (-R) = 0
, который находится на другой стороне оси х от R
так, чтобы линия , проходящая через них в вертикальном положении , пересекающихся только R
, -R
и 0
. Вы можете увидеть это в первой части этого изображения:
Другая вещь, которую вы можете видеть на этих изображениях, это то, что сумма точки с самим собой означает, что линия касается кривой.
Как найти пересечения прямых и эллиптических кривых
В случае двух разных точек
Обычно проходит ровно одна линия через две точки P=(x0,y0), Q=(x1,y1)
. Предполагая, что он не вертикальный и две точки различны, мы можем записать это как y = m*x+q
. Когда мы хотим найти точки пересечения с эллиптической кривой, мы можем просто написать
0 = x^3+Ax+B-y^2 = x^3+Ax+B-(m*x+q)^2
который является полиномом третьей степени. Как правило, их не так просто решить, но мы уже знаем два нуля этого многочлена: две x
координаты x0, x1
двух точек, которые мы хотим добавить!
Таким образом, мы вычленяем линейные множители (x-x0)
и получаем (x-x1)
третий линейный множитель, корнем которого является x
-координата точки R
. ( -R
тоже из-за симметрии. Обратите внимание, что если R = (x2,y2)
тогда -R = (x2,-y2)
. Это -
из группы; это не векторный минус.)
В случае добавления одной точки P
к себе
В этом случае мы должны вычислить тангенс кривой в P=(x0,y0)
. Мы можем напрямую написать m
и q
с точки зрения A,B,x0,y0
:
3*x0^2 + A
m = ------------
2*y0
-x0^3 + A*x0 + 2*B
q = --------------------
2*y0
Мы получаем уравнение y = m*x+q
и можем действовать так же, как в предыдущем абзаце.
Полное дерево дел
Вот полный список того, как обращаться со всеми этими случаями:
Позвольте P,Q
быть точки на эллиптической кривой (включая точку "бесконечности" 0
)
- Если
P = 0
илиQ = 0
, тоP+Q = Q
илиP+Q = P
, соответственно - Остальное
P ≠ 0
аQ ≠ 0
, так пустьP = (x0,y0)
иQ = (x1,y1)
:- Если
P = -Q
(это означаетx0 = x1
иy0 = -y1
), тоP+Q = 0
- еще
P ≠ -Q
- Если
x0 = x1
тогда у нас естьP=Q
и мы вычисляем касательную (см. Раздел выше), чтобы получитьR
. затемP+Q = P+P = 2P = -R
- Иначе: мы можем построить линию формы
y = m*x+y
через эти две точки (см. Раздел выше) для расчетаR
. затемP+Q=-R
- Если
- Если
Конечные поля
Для этой задачи мы будем рассматривать только поля размера, p
где p
простое число (и из-за некоторых деталей p ≠ 2, p ≠ 3
). Это имеет то преимущество, что вы можете просто рассчитать mod p
. Арифметика в других областях намного сложнее.
Это в этом примере мы устанавливаем p = 5
и все равенства здесь являются конгруэнциями mod 5
.
2+4 ≡ 6 ≡ 1
2-4 ≡ -2 ≡ 3
2*4 ≡ 8 ≡ 3
2/4 ≡ 2*4 ≡ 3 because 4*4 ≡ 16 ≡ 1, therefore 1/4 ≡ 4
Вызов
Учитывая параметры A,B
эллиптической кривой, характеристику простого поля p
и две точки P,Q
на эллиптической кривой, вернуть их сумму.
- Вы можете предположить, что параметры
A,B
действительно описывают эллиптическую кривую, это означает, что4A^3+27B^2 ≠ 0
. - Вы можете предположить, что
P,Q
на самом деле это точки на эллиптической кривой или0
-точке. - Вы можете предположить, что
p ≠ 2,3
это главное.
Тестовые случаи
Я сделал (не очень элегантную) реализацию в MATLAB / Octave, которую вы можете использовать для своих собственных тестов: ideone.com Я надеюсь, что это правильно. По крайней мере, он воспроизвел несколько расчетов, которые я сделал вручную.
Обратите внимание на тривиальные тестовые случаи, которые работают для всех кривых, которые мы здесь рассматриваем:
Добавление нуля: P+0 = P
добавление обратного:(x,y) + (x,-y) = 0
Для p = 7, A = 0, B = 5
двух точек P = (3,2)
и Q = (6,2)
находятся на эллиптической кривой. Тогда имеет место следующее:
2*Q = Q+Q = P
2*P = P+P = (5,2)
3*P = P+P+P = (5,2)+P = (6,5)
4*P = P+P+P+P = (5,2)+(5,2) = (6,5)+(5,2) = Q
Все точки на эллиптической кривой (3,2),(5,2),(6,2),(3,5),(5,5),(6,5),0
Ибо p = 13, A = 3, B = 8
мы получаем
(1,8)+(9,7) = (2,10)
(2,3)+(12,11) = (9,7)
2*(9,6) = (9,7)
3*(9,6) = 0
Для p = 17, A = 2, B = 2
и P=(5,1)
мы получаем
2*P = (6,3)
3*P = (10,6)
4*P = (3,1)
5*P = (9,16)
6*P = (16,13)
7*P = (0,6)
8*P = (13,7)
9*P = (7,6)
10*P = (7,11)
Если вы действительно амбициозны, возьмите
p = 1550031797834347859248576414813139942411
A = 1009296542191532464076260367525816293976
x0 = 1317953763239595888465524145589872695690
y0 = 434829348619031278460656303481105428081
x1 = 1247392211317907151303247721489640699240
y1 = 207534858442090452193999571026315995117
и попытаться найти натуральное число n
такое, что n*(x0,y0) = (x1,y1)
. Дополнительная информация здесь.
аппендикс
Прежде всего, большое СПАСИБО @ El'endiaStarman за просмотр и редактирование моего черновика!
Почему эллиптические кривые?
Ну, это может выглядеть как какое-то произвольное уравнение, но это не так, оно довольно общее: обычно мы рассматриваем эти геометрические «фигуры» в проективной плоскости ( именно отсюда исходит «бесконечность». Там мы считаем все однородным полиномы третьей степени. (Те, которые имеют более низкую или более высокую степень, будут слишком сложными или просто тривиальными для изучения.) После применения некоторых ограничений для получения нужных нам свойств и после дегомогенизации этих полиномов (проецирование в одну из трех аффинных плоскостей ) мы в конечном итоге с уравнениями, такими какy^2+a*x*y+b*y = x^3+c*x^2+d*x+e
Это эллиптическая кривая в длинной форме Вейерштрасса. Это в основном те же кривые, которые мы рассматривали, но только несколько искаженные. С помощью линейного преобразования координат вы можете легко сделать из этого короткое уравнение Вейерштраса. пример , в котором до сих пор хранятся все интересные свойства.
Почему мы исключили p=2,3
?
Это связано с тем, что для короткой формы Вейерштрасса нам нужно ограничение 4A^3+27B^2 ≠ 0
, чтобы избежать сингулярностей (подробнее об этом ниже). В поле характеристики 2, которое мы имеем, 4 = 0
и в поле характеристики 3, которое мы имеем 27 = 0
, это делает невозможным получение кривых в короткой форме Вейерштрасса для этих типов полей.
Каковы особенности?
Если уравнение 4A^3+27B^2=0
выполнено, у нас есть особенности типа следующего: как вы видите в этих точках, вы не можете найти производную и, следовательно, не касательную, которая «убивает» операцию. Вы можете посмотреть на уравнения y^2 = x^3
илиy^2 = x^3-3*x+2
В любом случае, почему они называются эллиптическими кривыми ?
Причина в том, что уравнения этой формы всплывают в эллиптических интегралах, например, которые вы получаете, когда хотите вычислить, например, длину дуги эллипса. Краткое слайд-шоу о происхождении названия.
Какое отношение они имеют к криптографии?
Есть способы вычислить nP = P+P+...+P
очень эффективно. Это можно использовать, например, при обмене ключами Диффи-Хеллмана . Модульная арифметика может быть заменена сложением на торсионных подгруппах, это только точки на кривой, имеющие конечный порядок. (Это означает, что mP = 0
для некоторых m
, что в основном просто расчет mod m
).
y^2 = x^3 + x
это действительная эллиптическая кривая и(0,0) ≠ 0
является точкой на кривой!)B = 0
и думал, как0
это сработает ... а потом я забыл об этом Я думаю, я предположил, чтоB
не может быть 0 в какой-то момент поздно вечером. Есть ли у вас какие-либо предложения о том, что вклад должен для этого? Возможно, еслиB = 0
, тогда определите0 = (-1, -1)
? Я рад скорректировать свой код для его обработки, я просто думаю, что было бы неплохо, если бы он был стандартизирован и для других представлений ...[0]
(только одна координата) является точкой бесконечности, или что-то подобное!nP
? Не могли бы вы указать мне какие-либо ресурсы на эту тему, чтобы мысли текли? Я с трудом нахожу что-нибудь вокруг Google. Благодарность!Python 3,
193191 байтРешение, основанное на ответе Pyth от Rhyzomatic и их логике Python. Особенно. Мне понравилось, как они нашли третий корень монического кубического полинома,
x^3 + bx^2 + cx + d
когда у вас есть два корня,x_1
иx_2
, отметив это,b == x_1 + x_2 + x_3
вычитая соответственно. Я планирую добавить объяснение, сыграть в гольф и, возможно, перенести его в Ruby, если Ruby окажется короче.Ungolfing:
источник