Додавання на еліптичних кривих
Відмова від відповідальності: це не справляє справедливості щодо багатої еліптичної кривої. Це багато спрощено. Оскільки еліптичні криві останнім часом отримали багато уваги засобів масової інформації в контексті шифрування, я хотів дати невелике розуміння того, як "обчислення" на еліптичній кривій насправді працює.
Вступ
Еліптичні криві - це сукупності точок (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
дуже ефективно. Це можна використати, наприклад, для обміну ключами Diffie Hellman . Модульну арифметику можна замінити додаванням на підгрупах кручення, це лише точки на кривій, які мають кінцевий порядок. (Це означає, що mP = 0
для деяких m
, що в основному є просто розрахунковим mod m
).
y^2 = x^3 + x
це дійсна еліптична крива і(0,0) ≠ 0
є крапкою на кривій!)