Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 20

Лекція 6.

БІС
Алгоритми на еліптичних кривих. Застосунки для пристроїв з суттєво
обмеженими обчислювальними ресурсами.

План.
1. Алгоритми на еліптичних кривих. Подання та опис еліптичної кривої.
Рекомендації щодо вибору параметрів еліптичної кривої. Система розподілу
криптографічних ключів на основі еліптичної кривої. Електронний цифровий
підпис на основі еліптичних кривих.
2. Застосунки для пристроїв з суттєво обмеженими обчислювальними ресурсами.
Література.
1. 1. Грайворонський М.В., Новіков О.М. Безпека інформаційно-комунікаційних систем.- К. BHV, 2009.-608
c. http://is.ipt.kpi.ua/wp-content/uploads/sites/4/2015/03/Graivorovskyi_Novikov.pdf
2. Тарнавський Ю.А. Технології захисту інформації, 2018. Електронне мережне навчальне видання.
Режим доступу: https://ela.kpi.ua/bitstream/123456789/23896/1/TZI_book.pdf
3. Huges M. How Elliptic Curve Cryptography Works.
https://www.allaboutcircuits.com/technical-articles/elliptic-curve-cryptography-in-embedded-systems/
4. . Mobile security testing guide. Режим доступу: https://owasp.org/www-project-mobile-security-testing-
guide/
5. OWASP top ten. Режим доступу: https://owasp.org/www-project-top-ten/

1.1 Алгоритми на еліптичних кривих. https://cryptobook.nakov.com/asymmetric-key-


ciphers/elliptic-curve-cryptography-ecc
У 1985 році Ніл Коблиць (Neal Koblitz) і (незалежно) Віктор Міллер (Victor Miller)
запропонували використовувати еліптичні криві для створення криптосистем з відкритим ключем.
Криптографія на еліптичних кривих (ЕСС)-це криптографічний підхід з відкритим ключем, заснований на
алгебраїчній структурі еліптичних кривих над скінченими полями. ECC може бути використана у
криптографічних програмах та примітивах, таких як погодження ключів, цифрові підписи та генератори
псевдовипадкових чисел. Ці криптографічні програми та примітиви можуть бути використані для таких
операцій, як шифрування, поєднання погодження ключів із симетричною схемою шифрування. Ще однією
перевагою криптосистем на еліптичних кривих є висока швидкість обробки інформації. Наприклад, рівень
стійкості, який досягається, скажімо, в RSA при використанні 1024-бітних ключів, в системах на еліптичних
кривих реалізується при тому ж параметрі довжиною 160 бітів. Отже, ECC вимагає меншого ключа порівняно з
криптографією, що не є ECC, для забезпечення еквівалентної безпеки (256-розрядна безпека ECC має
еквівалентну безпеку, досягнуту 3072-розрядною криптографією RSA). Безпека таких криптосистем заснована
на труднощі рішення задачі дискретного логарифмування в групі точок еліптичної кривої над кінцевим полем.
Цим і зумовлена їх висока криптостойкость в порівнянні з іншими алгоритмами.
Отже, основною перевагою використання криптографії на основі еліптичних кривих є зменшення
розміру ключа, а отже, збільшення швидкості. Алгоритми на основі еліптичних кривих використовують
значно менші розміри ключів, ніж їхні нееліптичні еквіваленти. Різниця в еквівалентних розмірах ключів різко
зростає зі збільшенням розмірів ключів. Приблизний еквівалент міцності безпеки для симетричних алгоритмів
у порівнянні зі стандартними асиметричними алгоритмами та алгоритмами еліптичної кривої показаний у
таблиці нижче.
Симетрична криптографія. Асиметрична криптографія. Криптографія на еліптичних
Довжина ключа Стандартна довжина ключа кривих. Довжина ключа

Як видно, щоб отримати еквівалентну силу 256 -бітному симетричному ключу, стандартний асиметричний
алгоритм мав би використовувати величезний ключ у 15360 біт. Ключі такого розміру, як правило, непрактичні

1
через необхідну обчислювальну потужність, а отже, малу швидкість виконання операцій. Однак з алгоритмами
еліптичної кривої еквівалентна довжина ключа становить 512 біт, що є цілком практичним.

Вибір безпечних кривих для криптографії з еліптичними кривими (https://safecurves.cr.yp.to/base.html) :


Крива Безпека Опис
y^2 = x^3+117050x^2+x
M-221 True✔ modulo p = 2^221 - 3

x^2+y^2 = 1+160102x^2y^2
E-222 True✔ modulo p = 2^222 - 117

x^2+y^2 = 1-1174x^2y^2
Curve1174 True✔ modulo p = 2^251 - 9

y^2 = x^3+486662x^2+x
Curve25519 True✔ modulo p = 2^255 - 19

x^2+y^2 = 1-67254x^2y^2
E-382 True✔ modulo p = 2^382 - 105

y^2 = x^3+2065150x^2+x
M-383 True✔ modulo p = 2^383 - 187

y^2 = x^3+229969x^2+x
Curve383187 True✔ modulo p = 2^383 - 187

x^2+y^2 = 1+3617x^2y^2
Curve41417 True✔ modulo p = 2^414 - 17

x^2+y^2 = 1-39081x^2y^2
Ed448-Goldilocks True ✔ modulo p = 2^448 - 2^224 - 1
y^2 = x^3+530438x^2+x
M-511 True✔ modulo p = 2^511 - 187

x^2+y^2 = 1-376014x^2y^2
E-521 True✔ modulo p = 2^521 - 1

Криптосистеми на еліптичних кривих, як і інші криптосистеми з відкритим ключем,


недоцільно застосовувати для шифрування великих обсягів даних. Але зате їх можна ефективно
використовувати для систем цифрового підпису та ключового обміну. З 1998 року
використання еліптичних кривих для вирішення криптографічних завдань, таких як цифровий
підпис, було закріплено в стандартах США ANSI X9.62 і FIPS 186-2.
Обмін ключами здійснюється за такою схемою:

2
Рис.0. Алгоритм обміну ключами Діффі-Хеллмана-це метод безпечного встановлення спільної таємниці між
двома сторонами (Аліса та Боб).
Еліптична крива Діффі – Хеллмана (ECDH) дозволяє двом сторонам, кожна з яких має пару відкрито-
приватних ключів з еліптичною кривою, встановити спільний секрет. Цей спільний секрет може бути
безпосередньо використаний як ключ або для отримання іншого ключа. Ключ або похідний ключ можна
використовувати для шифрування подальших повідомлень за допомогою шифру симетричного ключа. Це
варіант протоколу Діффі-Хеллмана з використанням криптографії з еліптичною кривою.

Для кращого розуміння криптографії еліптичної кривої дуже важливо зрозуміти основи обчислень на
еліптичних кривих. Еліптична крива - це плоска алгебраїчна крива, визначена рівнянням виду

Де "а" - коефіцієнт х, а "b" - константа рівняння


Еліптична крива повинна бути неособлива (несингулярна), тобто її графік не має точок повернення (див.
малюнок нижче) або самоперетинів. Точка повернення - це точка, в якій дві гілки кривої зустрічаються так, що
дотичні кожної гілки рівні. Наведений вище графік показує криву напівкубічної параболи x^3-y^2 = 0, яка має
точку повернення у початку координат.

3
1.2. Подання та опис еліптичної кривої
Для опису еліптичної кривої використовується алгебраїчна геометрія.
Еліптична крива (ЕК, ЕС - Elliptic Сurve) не є еліпсом і описується в загальному
випадку таким кубічним рівнянням
у2 + а  х  у + b  y = х3 + с  х2 + d  x + е, (1)
де а, b, с, d, і е є дійсними числами, що задовольняють деяким простим умовам. Такі рівняння
називаються ще рівняннями третього порядку, оскільки в них найвищий показник степеня рівний три.
З іншого боку, еліптична крива - це набір точок (x, y), що задовольняють рівняння
(1) для змінних (x, y) і констант (a, b, c, d, e), що належать множині чисел поля F.
Згадаймо деякі важливі характеристики поля.
Скінченним полем називається алгебраїчна система, яка складається зі скінченної
множини F і двох бінарних операцій (додавання і множення).
Порядком поля називається кількість елементів в полі (у множині F).
Фундаментальним є така умова: скінченне поле порядку р позначається GF (р) і
існує тоді і тільки тоді, коли р є простим. У криптографії широко застосовуються поля
GF (р), де р - просте число, і поля характеристики 2: GF (2m). Рівняння еліптичної
кривої над полем першого типу можна привести до вигляду

у2 = (х3 + a  х + b) mod p, (2)


при цьому константи повинні задовольняти умові

4  a3 + 27  b2 ≠ 0 (mod p).
Приклад 1. Розглянемо еліптичну криву, описувану рівнянням
у2 = х3 + 3  х + 2 над полем GF(5). На цій кривій, зокрема, лежить точка
(х = 1, у = 1), так як 12 = (13 + 3  1 + 2) mod 5.
Поля характеристики 2, GF (2m), називають також бінарними скінченними полями. У
еліптичних кривих над полем GF (2 m) є одна важлива перевага: елементи поля GF (2m) можуть бути
легко представлені у вигляді n-бітових кодових слів, а це дає збільшення швидкості апаратної
реалізації еліптичних алгоритмів.
Над полем GF (2m) розглядають два види еліптичних кривих:
• суперсингулярна крива:

у2+ а  y = х3 + b  x + c, (3)
• несуперсингулярна крива:

у2 + а  y  x = х3 + b  x2 + с. (4)
Визначення еліптичної кривої включає також нескінченний/невласний/ нульовий
елемент.
Отже, крім точок, що належать кривій (координати яких задовольняють

4
рівнянням (1) - (4)), вводиться точка «O», що не лежить на кривій. Це «точка на
нескінченності». Наприклад, запис Е23(1,1) означає, що ми застосовуємо рівняння кривої
виду

у2 = (х3 + х + 1) mod 23.


Еліптична крива або множина Ep (a, b) складається з усіх точок (х, у), х ˃ 0, у <р, що задовольняють рівняння
(2), і точки на нескінченності О.
Визначення 1. Порядок еліптичної кривої - це число, яке показує кількість цілих точок кривої над скінченним
полем.
Ця величина важлива для криптографічних застосувань еліптичних кривих. Щоб використовувати еліптичну
криву в криптографії, необхідно знати її порядок. Від порядку кривої залежить криптостійкість системи на
основі відповідної кривої (рівняння кривої).
Арифметичні операції в еліптичній криптографії виконуються над точками кривої.
Основною операцією є додавання. Додавання двох точок легко бачити на графіку (рис. 1).

Рис. 1. Пояснення до операції додавання двох точок еліптичної кривої у2 = х3 + 2х + 1.

Як видно з рис.1, для додавання точок P і Q необхідно провести через них пряму лінію, яка обов'язково перетне
криву в деякій третій точці (-R; іноді цю точку позначають R). Відобразимо точку -R відносно горизонтальної
осі координат і отримаємо шукану точку: P + Q – результат додавання: P + Q = R, тобто точки R і -R симетричні
відносно горизонтальної осі.
За визначенням, еліптична крива має наступну властивість: якщо три її точки лежать на одній
прямій, то їх сума дорівнює O (нескінченність).
Це властивість дозволяє описати основні правила додавання, а також множення точок еліптичної кривої:
• нехай P і Q - дві різні точки еліптичної кривої (рис. 1), Р не дорівнює Q. Проведемо через P і Q пряму.
Вона перетне еліптичну криву тільки в одній точці, яка називається
-R. Точка -R відображається відносно осі Х в точку R, що дорівнює сумі точок P і Q; закон додавання
точок еліптичної кривої: P + Q = R;
• пряма, що проходить через точки R і -R, є вертикальною прямою, яка не перетинає еліптичну криву в
жодній третій точці; якщо R = (х, -у), то R + (х, у) = О. Точка (х, у) є від'ємним значенням точки R і
позначається -R; отже, за визначенням R + (-R) = О;
• якщо O - нульовий елемент, то справедлива рівність O = -O, а для будь-якої точки P еліптичної кривої
маємо P + O = P;
• щоб скласти точку Р з нею самою, потрібно провести дотичну до кривої в точці Р; закон подвоєння
точки Р: P + P = 2P;
• множення точки Р на ціле додатнє число k визначається як сума k точок Р: kP = P + P + P + ... + P;
• скалярне множення здійснюється за допомогою декількох комбінацій додавання і подвоєння
точок еліптичної кривої. Наприклад, точка 25 P може бути представлена як 25P = (2 (2 (2 (2 P)))) + (2
(2 (2 P))) + P.

5
На рис. 2 наведені приклади деяких арифметичних операцій над трьома точками кривої.

Рис. 2. Приклади деяких арифметичних операцій над точками еліптичної кривої

Як випливає з прикладів на Рис. 2, якщо P і Q - дві точки на кривій, то ми можемо єдиним чином
описати третю точку - точку перетину даної кривої з прямою, проведеної через P і Q (приклад 1 на рис.
2); якщо пряма, яка використовується для додавання точок, є дотичною до кривої в точці, то така точка
рахується двічі (приклад 2); якщо ж пряма паралельна осі ординат, третьою точкою буде точка на
нескінченності (приклад 3 і 4).
Надійність і криптостійкість еліптичної криптографії безпосередньо пов'язані з операцією
множення точки на ціле число: задача обчислення дискретного логарифма на еліптичній кривій, яка
полягає в знаходженні цілого числа х по відомим точкам P і Q = х P, є важкорозв’язуваною.
Якщо Р = (х1, у1) і Q = (х2, у2), то Р + Q = (х3, у3) визначається відповідно до правил:
x3 = ( – х1 – х2) mod p;
у3 = (  (х1 – х3) – у1) mod p, (5)
де  = (у2 – у1)/(х2 – х1), якщо Р ≠ Q, і   х2 + а 1 )/2у1, якщо Р = Q.
З цього слідує, що число  - кутовий коефіцієнт січної, проведеної через точки Р =
(х1, у1) і Q = (х2, у2). При Р = Q січна перетворюється в дотичну, чим і пояснюється
наявність двох формул для обчислення .
Приклад 2. У разі Е23(1, 1) - відповідає вищенаведеному рівнянню у2 = (х3+ х + 1) mod
23 – для Р = (13, 7) маємо Р = (13, -7). Але -7 mod 23 = 16, отже, Р = (13, 16), тобто х=
13, у = 16.
Згадуємо, що значення деякого цілого від’ємного числа (-k) по модулю (р)
обчислюється так:
(-k) mod р = - (k mod р) + p. (6)
Візьмемо більш загальний приклад.
Приклад 3. Розглянемо еліптичну криву Е (рис. 3), яка має рівняння

y2 + y = x3 – x2. (7)
На цій кривій лежать тільки чотири точки, координати яких є цілими числами. Це точки A(0, 0), B(1, –1),
C(1, 0), D(0, –1). На площині існує нескінченно віддалена точка O  E, в якій сходяться всі вертикальні прямі.
Виконаємо операцію додавання точок Р, Q  E (рис. 4). Для цього проведемо пряму лінію через точки Р і Q,
знайдемо третю точку -R перетину цієї прямої з кривою Е. Далі проведемо через точку -R вертикальну пряму до
перетину з кривою Е в точці R, яка буде шуканою сумою: Р + Q = R .
Застосувавши відомі правила до групи точок {A, B, C, D, O}, отримаємо (див. рис. 5):
A + A = B; A + B = C; A + С = D; A + D = O,
або
2  A = B; 3  A = C; 4  A = D; 5  A = O; 6  A = A.
Ще раз відзначимо, що найважливішим параметром еліптичної кривої, що визначає можливість її використання
в криптографії, є кількість точок цієї кривої: #Ep (a, b) = N.

6
Рис. 3. Група з п'яти точок еліптичної Рис. 4. Графічне представлення
кривої Е; додавання точок: Р + Q = R
О - нескінченно віддалена точка

7
б
Рис. 5. Абелева група
({A, B, C, D, O}) на кривій E

Операції над точками еліптичних кривих є груповими, тобто відносяться до операцій в


«аддитивній/ комутативній абелевій групі».

Визначення 2. Адитивною абелевою групою називається множина A з операцією


додавання, яка має такі властивості:
1) a + b = b + a, ∀ a, b ∈ A (коммутативность);
2) (a + b) + c = a + (b + c), ∀ a, b ∈ A (асоціативність);
3) в множині A існує такий елемент O (нуль), що a + O = a, ∀a ∈ A;
4) для будь-якого елемента a ∈ A існує такий елемент -a ∈ A (протилежний елемент), що
a + (-a) = O.
Якщо замість a і b підставити цілі точки кривої Е (всі цілі точки якої разом з точкою О і
утворюють множину А), то ми отримаємо підтвердження коректності усіх розглянутих
нами прикладів з точки зору теорії груп.
Приклад 4. Розглянемо криву E7(2, 6): y2 = x3 + 2  x + 6 (mod 7), тобто
коефіцієнтами рівняння є: а = 2 і b = 6.
Перевіримо виконання умови несингулярності кривої (див. (4)):
(4  23 + 27  62) mod 7 = 3 mod 7 ≠ 0.
Отже, дана крива несінгулярна. Візьмемо випадкову точку на E7(2, 6).
Нехай х = 5, тоді
y2 = (53 + 2  5 + 6) mod 7 = (125 + 10 + 6) mod 7 = 1 mod 7
і у = 1 mod 7 або (з урахуванням виразу (-k) mod р = - (k mod р) + p):
у = –1 mod 7 = 6 mod 7, оскільки(–1)2 = 1.
Знайдено відразу дві точки: (5, 1) і (5, 6).
Для пошуку нових точок проведемо наступні обчислення,
використовуючи формулу (5). Чергову точку знайдемо шляхом обчислення
композиції. Спочатку знайдемо 2 (5, 1): для випадку Р = Q. Для цього
випадку
   1 х 2 + а) / 2  у1 ) mod 7 = ((3  52 + 2)/ 2  1) mod 7 = 0 mod 7
і далі:
x3 = (0 – 2  5) mod 7 = 4 mod 7;
у3 = (0 (5 – 4) – 1) mod 7 = 6 mod 7.
Отримали 2 (5, 1) = (4, 6). Можна переконатися, що отримана точка
лежить на кривій, підставивши її координати в рівняння
y2 = (x3 + 2  x + 6) mod 7.
Знайдемо ще одну точку 3  (5, 1) = (5, 1) + (4, 6):
  (6 – 1)(4 – 5) (mod 7) = –5 mod 7 = 2 mod 7;
x3 = (22 – 5 – 4) mod 7 = 2 mod 7;
у3 = (2 (5 – 2) – 1) mod 7 = 5 mod 7.
Отже, знайдено чотири точки. Ще раз підкреслимо: для
криптографічного використання кривої важливо знати, скільки всього
точок у множині E7(2, 6).
Приклад 5. Нехай р = 23. Розглянемо еліптичну криву Е:
y2 = (x3 + x + 1) mod 23,
тобто Е23(1, 1).
Крива складається з наступних точок: (0, 1); (0, 22); (1, 7); (1, 16); (3, 10); (3, 13); (4, 0); (5,
4); (5, 19); (6, 4); (6, 19); (7, 11); (7, 12); (9, 7); (9, 16); (11, 3); (11, 20); (12, 4); (12, 19); (13,
7); (13, 16); (17, 3); (17, 20); (18, 3); (18, 20); (19, 5); (19, 18), тобто N = 27.
Нехай Р = (3, 10) і Q = (9, 7). Знайдемо Р + Q і 2 Р. Нехай Р + Q = (х3, у3), тоді при
       mod 23   mod 23
маємо:
x3 = (121 – 3 – 9) mod 23 = 109 mod 23  17 mod 23;
у3 = (11(3 + 6) – 10) mod 23 = 89 mod 23  20 mod 23.
Таким чином, Р + Q = (17, 20).
Знайдемо тепер точку 2  Р = Р + Р = (х3, у3) - з формальної точки зору це також
буде третя точка. Для цього випадку
       mod 23   mod 23
і з урахуванням виразу ((-k) mod р = - (k mod р) + p) для обчислення координати у3:
x3 = 36 – 6 = 30 mod 23 = 7 mod 23;
у3 = (6  (3 – 7) – 10) mod 23 = (–34) mod 23 = 12 mod 23.
Таким чином, 2  Р = (7, 12).
При послідовному виконанні додавання k  P = P + P + P + … + P на кожному кроці буде отримуватися точка,
яка також повинна належати Ep (a, b). В силу того що еліптична група містить скінченну множину точок,
настане такий момент, що для деяких результатів обчислень буде виконуватися рівність q  Р = О (див.
Приклад 3, де 5  A = O, тобто тут q = 5) .
Визначення 3. Найменше значення числа q, для якого виконується рівність
q Р = О, називається порядком точки Р.
Визначення 4. Порядок групи точок еліптичної кривої дорівнює числу різних точок ЕК,
включаючи точку О.
Для еліптичної кривої Ер (а, b) порядок m групи точок повинен задовольняти нерівності:

p + 1 – 2  p½ ≤ m ≤ p + 1 + 2  p½ . (8)
В табл. 1 наведені результати послідовного додавання для деяких точок кривої
виду y2 = x3 + 1.
Таблиця 1. Результати виконання операції Р + … + Р для кривої Е5(0, 1)

+ (0, 1) (0, 4) (2, 2) (2, 3) (4, 0)


Р (0, 1) (0, 4) (2, 2) (2, 3) (4, 0)
2Р (0, 4) (0, 1) (0, 4) (0, 1) О
3Р О О (4, 0) (4, 0) (4, 0)
4Р (0, 1) (0, 4) (0, 1) (0, 4) О
5Р (0, 4) (0, 1) (2, 3) (2, 2) (0, 4)
6Р О О О О О
Як видно з таблиці 1, кожна точка характеризується різним значенням порядку: точки (0, 1) і (0, 4) мають
порядок 3, точки (2, 2) і (2, 3) - порядок 6, а точка (4, 0) - порядок 2.
Важливим елементом, який характеризує еліптичну криву, є генеруюча (базисна) точка G, порядок якої (n)
повинен бути простим числом, як і число р. Якщо множити цю точку на числа менші, ніж порядок точки,
кожен раз будуть виходити різні точки кривої.
Визначення 4. Генеруюча (базисна) точка еліптичної кривої - це така точка G на еліптичній кривій, для якої
мінімальне значення n, таке що n G = O, є дуже великим простим числом.
Саме результат множення точки G на велике випадкове число використовуються як відкритий ключ, а
велике випадкове число - як таємний, наприклад при реалізації алгоритму Діффі - Хеллмана або ЕЦП на
еліптичних кривих.
Вибір генеруючої точки обумовлений тим, щоб її порядок q був досить великим: зазвичай 2254 <q <2256.
У табл. 2 наведені результати виконання операції хG для кривої E23 (10, 10) з генеруючою точкою G = Р (5, 1).

Таблиця 2. Результати виконання операції х G для кривої E23 (10, 10) з генеруючою точкою G = Р (5,
1)
х 1 2 3 4 5 6 7 8 9
хG (5,1) (8,21) (11,5) (10,11) (12,8) (7,20) (15,19) (9,1) (9,22)
х 10 11 12 13 14 15 16 17 18
хG (15,4) (7,3) (12,15) (10,12) (11,8) (8,2) (5,22) О (5,1)

Як видно, для обраної генеруючої точки її порядок дорівнює 17, так як 17 є


мінімальним цілим простим числом, для якого виконується рівність n  Р = О.
1.3. Рекомендації щодо вибору параметрів еліптичної кривої
Розглянемо основні рекомендації щодо вибору параметрів еліптичної кривої, призначеної для вирішення
криптографічних задач, а саме задач з вибору коефіцієнтів a, b і модуля р. Основним критерієм вибору є
ймовірність здійснення атак на криптосистему на основі еліптичної кривої.
Розглянута нижче стратегія вважається найбільш надійною з точки зору забезпечення криптостійкості системи.
Вивчимо по кроках процес формування кривої.
Крок 1. Вибираємо випадково просте число р. Його довжина в бітах (t = log p + 1; зрозуміло, що t
повинно бути цілочисельним з округленням у більшу сторону) повинна бути такою, щоб зробити
неможливим застосування загальних методів знаходження логарифмів на кривій. Величина t в
даний час повинна бути не менше 256 бітів.
Крок 2. Вибираємо випадкові числа a і b такі, що

a, b (mod p)  0 и (4  a3 + 27  b2) mod p  0.


Слід звернути увагу на те, що при обчисленні композиції точок параметр b
ніде не фігурує. Тому для підвищення ефективності обчислень рекомендують
випадково вибирати тільки b, а а приймати рівним невеликому цілому числу
(наприклад, а = -3).
Крок 3. Визначаємо число точок N на кривій, рівне #Ep (a, b). Важливо, щоб число
N мало великий простий дільник q, а найкраще щоб саме було простим числом: N =
q. Якщо пошук кривої з N = q займає надто багато часу, то можна допустити N = h q,
де h - невелике число. Ще раз слід підкреслити, що стійкість криптосистеми на
еліптичній кривій визначається не модулем р, а числом елементів q в
підмножині точок кривої. Але якщо множник h - невелике число, то q є величиною
того ж порядку, що і р. Якщо N не відповідає вимогам, що пред'являються, то
необхідно повернутися до кроку 2.
Крок 4. Перевіряємо, чи виконуються нерівності (рk – 1) mod q  0
для всіх k, 0 <k <32. Якщо ні, то повертаємося до кроку 2. Ця перевірка запобігає
можливості деяких видів атак і виключає з розгляду так звані суперсингулярні криві
і криві з N = р - 1.
Крок 5. Перевіряємо, чи виконується нерівність q  р. Якщо ні, то повертаємося до
кроку 2. Для кривих з q = р, які називаються аномальними, існують ефективні
методи обчислення логарифмів, тобто злам шифру.
Крок 6. Необхідна для криптографічних додатків крива вже отримана. Маємо
параметри р, а, b, кількість точок N і розмір підмножини точок q. Щоб отримати
випадкову точку на кривій, беремо випадкове число х <р, обчислюємо е  (x3 + a
 x + b) mod p і намагаємося видобути квадратний корінь y = mod
p. Якщо корінь існує, то отримуємо точку (х, у), в іншому випадку
пробуємо інше число х.
Задача, яку вирішує криптоаналитик при використанні криптосистеми на базі
еліптичних рівнянь, відноситься до задач дискретного логарифмування на
еліптичній кривій і формулюється так: дано точки Р і Q на еліптичній кривій
порядку N (N - число точок на кривій). Необхідно знайти єдине число х, таке що Р = х
 Q. Величина х і є дискретним логарифмом від Q за основою Р.

1.4. Система розподілу криптографічних ключів на основі еліптичної кривої


Як приклад використання еліптичних кривих в криптографії розглянемо систему
розподілу (обміну) таємної ключової інформації. На основі кривих створені і працюють
криптосистеми, що використовують протоколи Ель-Гамаля, RSA і Шнорра (схема
Шнорра використовується в стандарті цифрового підпису в Республіці Білорусь).
Наша система працює подібно до вищеописаного алгоритму Діффі – Хеллмана,
тобто призначена для передачі закритої інформації по відкритому каналу. Ще раз
підкреслимо: стійкість розглянутого алгоритму визначається складністю обчислення
дискретного логарифма для еліптичної кривої Eр (а, b). Дійсно, обчислення точки Q як
результату скалярного множення цілого позитивного х на точку G є досить простим
завданням. З іншого боку, обчислення значення х за координатами точок Q і G є
обчислювально важким завданням. Для великих значень х ця задача практично
нерозв'язна. На цьому факті і заснована розглянута криптографічний система.
Обмін ключами з використанням еліптичних кривих може бути виконаний таким
чином.
Спочатку вибирається просте число р і параметри a і b для еліптичної
кривої. Це задає еліптичну групу точок Ер (a, b). Потім на Ер (a, b).
вибирається генеруюча точка G = (х, у). При цьому важливо, щоб
найменше значення q, при якому виконується умова qG = О, виявилося
дуже великим простим числом. Параметри Ер (a, b) і G криптосистеми
відомимі всім учасникам. Обмін ключами між учасники інформаційного
процесу (А і В) можна провести за наступним алгоритмом.
1. Сторона А вибирає ціле число ka, менше q. Це число буде таємним
ключем сторони А. Потім А генерує відкритий ключ: Ya = ka  G, і відсилає
його стороні В. Відкритий ключ являє собою деяку точку на Ер(a, b).
2. Паралельно сторона В вибирає для себе таємний ключ kb і обчислює
відкритий ключ: Yb = kb  G, і відсилає його стороні А.
3. Сторона А, отримавши відкритий ключ боку В, генерує секретний
ключ Kа = ka  Yb = K, а сторона В відповідно генерує секретний ключ Kb = kb 
Ya= K.
Нескладно встановити, що обидві сторони отримали один і той же
результат, оскільки ka  Yb = ka  (kb  G) = kb  (ka  G) = kb  Ya.
Приклад 6. Нехай р = 211; G = (2, 2); Ер (0, -4), що відповідає кривій у2 = х3 – 4.
Сторони спільно вибирають q = 241. Можна підрахувати, що 241G = О.
Таємним ключем боку А є ka = 121, тому відкритим ключем боку А буде Ya = 121 (2, 2)
= (115, 48).
Таємним ключем боку В буде значення kb = 203, тому відкритим ключем боку В буде
Yb = 203 (2, 2) = (130, 203).
Загальним секретним ключем є одне значення, відповідне точці на еліптичній кривій:
K = 121 (130, 203) = 203 (115, 48) = (161, 69).

1.5 Електронний цифровий підпис на основі еліптичних кривих


Ми детально проаналізували особливості практичного застосування в криптографії еліптичних
кривих, що задаються над полями Галуа. Для ясності згадаємо найважливіші особливості.
Нехай задано просте число p> 3. Тоді еліптичною кривою E, визначеною над простим скінченним
полем Fp, називається множина пар чисел (x, y) (точка з координатами (x, y) належить Fp), які
задовольняють тотожності:
y2 = (x3 + a  x + b) mod p, (9)
де a, b Fp и (4  a + 27  b2) ≠ 0 mod p.
3

Крім того, до еліптичної кривої додається нескінченно віддалена точка О. Таким чином, точки, що
задовольняють рівняння кривої E, і точка О утворюють кінцеву абелеву групу.
Для точок еліптичної кривої визначена операція додавання. Для двох точок, що належать кривій E,
P (xp, yp) і Q (xq, yq), точка R (xr, yr), що є їхньою сумою, також буде лежати на еліптичній кривій.
Графічно подвоєння точки можна отримати, побудувавши дотичну до точки і відобразивши точку
перетину дотичної з еліптичної кривої відносно осі OX. Звідси очевидно, що можна визначити операцію
множення деякої точки еліптичної кривої на ціле число, яка дозволяє визначити точку Q = k P (точка P,
помножена на ціле число k, перетворюється в точку Q).
Скалярне множення здійснюється за допомогою декількох комбінацій додавання і подвоєння
точок еліптичної кривої.
Приклад 7. Деяка точка 25 P може бути представлена як
25  P = (2  (2  (2  (2  P))) + 2  (2  (2  P))) + P.
Саме з операцією множення точки на ціле число безпосередньо пов'язана надійність і
криптостойкость еліптичної криптографії.
Ми вже особливо відзначали, що задача обчислення дискретного логарифма на еліптичній кривій
полягає в знаходженні цілого числа х по відомим точкам P і Q = хP і є важкою.
Крім рівняння, важливим параметром кривої є базисна (генеруюча) точка G, що обирається для
кожної кривої окремо.
Секретним ключем відповідно до технології еліптичних кривих є велике випадкове число х, а
повідомлюваним відкритим ключем –добуток х на базисну (генеруючу) точку G.
Вибір базисної точки повинен бути таким, щоб її порядок був досить великим: 2254 < n < 2256 .
Згадаймо: точка P E називається точкою порядку n, якщо n P = O.
Для того щоб краще зрозуміти практику використання даної технології, проаналізуємо весь
алгоритм.
Приклад 8. Будемо використовувати такі позначення:
H(M)l – множина всіх двійкових векторів довжиною l бітів – множина хеш-функцій підписуваних
повідомлень; l = 256 бітів (або 512 бітів);
V * - множина всіх двійкових векторів довільної скінченної довжини;
p - просте число, p> 3;
M - повідомлення користувача, M ∈ V *;
a, b - коефіцієнти еліптичної кривої;
умови: 2254 < q <
P - точка еліптичної кривої порядку q; в розглянутому стандарті q вибирається з
2256; q  P = O (точка Р відповідає генеруючій точці кривої і є відкритим параметром));
d - ціле число - таємний ключ підпису; 0 <d <q;
Q - точка еліптичної кривої - ключ перевірки підпису:
Q = d P; (10)
ζ - цифровий підпис під повідомленням М.

Використовувана еліптична крива задається співвідношенням (9). Координати точок при х 1 ≠ х2


обчислюються за формулами (5), а при виборі кривої слід керуватися рекомендаціями, які викладеними
вище в цій лекції.
Як бачимо, кожен користувач повинен мати таємний криптографічний ключ (число d) і ключ
перевірки або верифікації підпису, який визначається точкою еліптичної кривої Q з координатами (xq і
yq), що задовольняє виразу (10).
Формування (генерація) ЕЦП. Складається з 6 операцій.
1. Обчислити хеш повідомлення М: h(M); h(M) ∈ H(M)l.
2. Обчислити ціле число t, двійковим поданням якого є h(M), і далі
обчислити
e = t mod q. (11)
Якщо е = 0, то прийняти е = 1.
3. Вибрати випадкове (псевдовипадкове) число k; 0 <k <q.
4. Обчислити точку (координати точки) С кривої Е:
С = k  P, (12)
визначити число r:
r = xc mod q, (13)
де xc - х-координата точки С. Якщо r = 0, повернутися до кроку 3.
5. Обчислити значення s:
s = (r  d + k  e) mod q, (14)
при s = 0 слід повторити крок 3.
6. Визначити двійкове подання чисел r і s, конкатенація яких (r || s) і буде
цифровим підписом ζ під повідомленням М.

Верифікація підпису.
1. Виконати операцію, зворотну по відношенню до кроку 6 генерації ЕЦП:
відновлення чисел r і s.
2. Обчислити хеш отриманого повідомлення М: h(M).
3. Повторити крок 2 режиму генерації ЕЦП: обчислити ціле число t, двійковим
поданням якого є h(M) (формально це значення може призводити до різних
результатів тут і при використанні формули (11)) і далі обчислити
e = t mod q. (15)
Якщо е = 0, то прийняти е = 1.
4. Обчислити
v = (e)–1 mod q. (16)

5. Визначити значення двох чисел:


z1 = (s  v) mod n, z2 = (–r  v) mod q. (17)
Тут корисно звернутися до формули у = (х + a  х + b) mod p.
2 3

6. Обчислити точку С еліптичної кривої:


С = z1  P + z2  Q (18)
і визначити значення числа r:
r = xc mod q. (19)
7. Підпис вірний, якщо r = r.
Отже:
• вихідними даними алгоритму генерації ЕЦП є: повідомлення М, алгоритм і параметри
обчислення хеш-функції повідомлення М, значення таємного ключа відправника d, тип еліптичної
кривої, випадкове число k, за допомогою якого визначається точка С кривої, точки еліптичної
кривої: точка P порядку q і точка Q, яка задовольняє виразу (10);
• вихідними даними алгоритму верифікації ЕЦП є: отримане повідомлення М, електронний
підпис ζ повідомлення, точка P порядку n і точка Q.
Проаналізуємо приклад ЕЦП з конкретними числовими значеннями.

Параметру р присвоєно наступне значення: р > 0,5  1077


або точно
p = 57896044618658097711785492504343953926634992332820282019728792003956564821041;

коефіцієнти еліптичної кривої: а = 7 і b > 0,4  1077 або точно


b = 43308876546767276905765904595650931995942111794451039583252968842033849580414;
порядок групи точок еліптичної кривої: число, більше 0,5 
1077 або точно
57896044618658097711785492504343953927082934583725450622380973592137631069619;
координати точки Р: xp = 2, yp > 4  1076 або точно
yp = 4018974056539037503335449422937059775635739389905545080690979365213431566280;
q = 57896044618658097711785492504343953927082934583725450622380973592137631069619;
таємний ключ відправника повідомлення: d > 0,5  1077 або точно
d = 55441196065363246126355624130324183196576709222340016572108097750006097525544;
ключ Q перевірки підпису - координати точки мають наступні значення: xq > 0,5  1077 або
точно
xq = 57520216126176808443631405023338071176630104906313632182896741342206604859403;

yq > 1,7  1077 або точно


yq = 17614944419213781543809391949654080031942662045363639260709847859438286763994.
Генерація ЕЦП. Нехай після виконання кроків 1-2 відповідно до формули (11) було
отримано наступне числове значення е:
е = 20798893674476452017134061561508270130637142515379653289952617252661468872421;
на кроці 3 вибрано число k:
k = 53854137677348463731403841147996619241504003434302020712960838528893196233395;
при цьому точка С = k  P має координати:
xc = 29700980915817952874371204983938256990422752107994319651632687982059210933395;
yc = 32842535278684663477094665322517084506804721032454543268132854556539274060910;
параметр r = xc mod q (формула (13)) приймає значення:
r = 29700980915817952874371204983938256990422752107994319651632687982059210933395;
параметр s = (r  d + k  e) mod q відповідно рівний:
s = 574973400270084654178925310019147038455227042649098563933718999175515839552.
Цифровим підписом (ζ) буде бінарна послідовність, що складається з конкатенованих
величин (r || s), представлених у відповідній системі числення.

Верифікація підпису.
На вході одержувач підписаного повідомлення має М і ζ як основні компоненти для
верифікації. Після виконання третього кроку отримаємо е (формула (16)):
е = 20798893674476452017134061561508270130637142515379653289952617252661468872421;
як бачимо в процесі передачі підписаного документа його цілісність не порушена (е = е).
Параметр v = (е)–1 mod q (вираз (17)) приймає значення:
v = 17686683605934468677301713824900268562746883080675496715288036572431145718978;
на черговому кроці алгоритму обчислюємо:
z1 = 37699167500901938556841057293512656108841345190491942619304532412743720999759;
і
z2 = 1417199842734347211251591796950076576924665583897286211449993265333367109221;
точка С = z1  P + z2  Q (формула (19)) буде мати координати:
xc = 29700980915817952874371204983938256990422752107994319651632687982059210933395;
yc = 32842535278684663477094665322517084506804721032454543268132854556539274060910;
остаточо обчислюємо r= xc mod q:
r = 29700980915817952874371204983938256990422752107994319651632687982059210933395.

Оскільки r = r, підпис верифікований.


Головним достоїнством ЕЦП на основі еліптичних кривих є те, що вони
забезпечують криптостійкість на значно менших за довжиною ключах, що позитивно
відбивається на часі створення та верифікації ЕЦП. Наприклад, ЕЦП на основі
еліптичних кривих з довжиною ключа 160 бітів мають однакову стійкість з системами
DSA і Ель-Гамаля з довжиною ключа 1024 біта.

Microsoft .NET надає потужну підтримку ECC шляхом реалізації алгоритму Діффі-Хеллмана
на еліптичних кривих (ECDH) засобами криптографії наступного покоління (CNG).
Для розширення функціональності при використанні криптоаналізу існує небагато бібліотек
з відкритим кодом, доступних для ECC в C#. Однією з найбільш використовуваних є Bouncy
Castle.
Bouncy Castle-одна з найважливіших та найвідоміших бібліотек. Вона містить
реалізацію на мові C# криптографічних алгоритмів та протоколів. Вона має значну кількість
корисних функцій, найважливіші з яких такі [7]:
• Криптографія на еліптичних кривих.
• “Підтримка аналізу та створення файлів PKCS-12”.
• “X.509: Підтримка сертифікатів V1 і V3 (генерація та синтаксичний аналіз).
Також CRL та сертифікати V2 на основі атрибутів ”.
• “Алгоритми PBE, підтримувані PbeUtilities”.
• “Алгоритми підписів, що підтримуються SignerUtilities”.
• «Алгоритми симетричних ключів: AES, Blowfish, Camellia, CAST5, CAST6, ChaCha, DES, DESede,
GOST28147, HC-128, HC-256, IDEA, ISAAC, Noekeon, RC2, RC4, RC5-32, RC5-64, RC6, Rijndael, Salsa20, SEED,
Serpent, Skipjack, TEA/XTEA, Threefish, Tnepres, Twofish, VMPC and XSalsa20”.
• «Симетричні ключові режими: CBC, CFB, CTS, GOFB, OFB, OpenPGPCFB, та SIC (або CTR) ”.
• “Симетричні заповнення ключів: ISO10126d2, ISO7816d4, PKCS-5/7, TBC, X.923 та Zero Byte”.
• «Алгоритми асиметричних ключів: ElGamal, DSA, ECDSA, NaccacheStern та RSA».
• «Асиметричні заповнення/кодування ключів: ISO9796d1, OAEP та PKCS -1 ”.
• “Режими блочного шифрування AEAD: CCM, EAX, GCM та OCB” .
• «Дайджести: GOST3411, Keccak, MD2, MD4, MD5, RIPEMD128,
RIPEMD160, RIPEMD256, RIPEMD320, SHA-1, SHA-224, SHA-256,
SHA-384, SHA-512, SHA3, Tiger, and Whirlpool”.
• “XOF: SHAKE” .
• «Механізми підписання: DSA, ECDSA, ECGOST3410, ECNR, ГОСТ3410, ISO9796d2, PSS, RSA, X9.31-1998 ”.
• «Узгодження ключів: Diffie-Hellman, EC-DH, EC-MQV, J-PAKE, SRP-6a ”.
• “MAC: CBCBlockCipher, CFBBlockCipher, CMAC, GMAC, GOST28147, HMac, ISO9797 Alg. 3, Poly1305,
SipHash, SkeinMac,VMPCMAC”.
• “Генератори PBE: PKCS -12 та PKCS -5-схеми 1 та 2” .
• “OpenPGP (RFC 4880)”.
• «Синтаксис криптографічних повідомлень (CMS, RFC 3852), у т.ч. потокового API ».
• “ Онлайн протокол стану сертифіката (OCSP, RFC 2560)”.
• “Протокол позначки часу (TSP, RFC 3161)”.
• “Клієнт/сервер TLS/DTLS до версії 1.2 з підтримкою найпоширеніших шифрів та розширень, а також багатьох
менш поширених. Доступний неблокуючий API ”.

2. Застосунки для пристроїв з суттєво обмеженими обчислювальними ресурсами.


Криптографія мобільних додатків
Криптографія відіграє особливо важливу роль у захисті даних користувача у мобільному середовищі, де
ймовірним сценарієм є зловмисники, які мають фізичний доступ до пристрою користувача. Хоча основні
криптографічні принципи застосовуються незалежно від конкретної ОС, кожна ОС має власну реалізацію цих
принципів та API.
Основні поняття
Метою криптографії мобільних додатків є забезпечення постійної конфіденційності, цілісності даних та
достовірності навіть в умовах атаки. Конфіденційність передбачає забезпечення конфіденційності даних за
допомогою шифрування. Цілісність даних стосується узгодженості даних та виявлення фальсифікації та
модифікації даних. Достовірність гарантує, що дані надходять з надійного джерела.

Алгоритми шифрування мобільних додатків перетворюють дані простого тексту в шифрований текст, що
приховує вихідний вміст. Дані простого тексту можна відновити з тексту шифрування шляхом дешифрування.
Шифрування може бути симетричним (шифрування за допомогою секретного ключа) або асиметричним
(шифрування відкритим ключем). Загалом, операції шифрування не захищають цілісність, але деякі
симетричні режими шифрування також забезпечують цей захист.

Алгоритми шифрування з симетричним ключем мобільних додатків використовують один і той же ключ як
для шифрування, так і для дешифрування. Цей тип шифрування є швидким і підходить для масової обробки
даних. Оскільки кожен, хто має доступ до ключа, може розшифрувати зашифрований вміст, цей метод вимагає
ретельного управління ключами.

Асиметричні алгоритми шифрування мобільних додатків працюють з двома окремими ключами: відкритим
та закритим. Відкритий ключ можна розповсюджувати вільно, а приватний ключ не повинен передаватися
нікому. Повідомлення, зашифроване відкритим ключем, можна розшифрувати лише за допомогою приватного
ключа. Оскільки асиметричне шифрування в кілька разів повільніше, ніж симетричні операції, його зазвичай
використовують лише для шифрування невеликих обсягів даних, таких як симетричні ключі для масового
шифрування.

Хешування мобільних додатків не є формою шифрування, але воно використовує криптографію. Хеш-функції
детерміновано відображають довільні фрагменти даних у значення фіксованої довжини і використовуються
для перевірки цілісності. Обчислити хеш з вхідних (початкових) даних легко, але дуже важко (тобто
неможливо) визначити початкові дані з вихідних даних хешу.

Коди автентифікації повідомлень (MAC) мобільних додатків поєднують інші криптографічні механізми
(наприклад, симетричне шифрування або хешування) з секретними ключами, що забезпечує як цілісність, так і
захист автентичності. Але щоб перевірити MAC, сторони обміну даними повинні поділитися одним секретним
ключем, і будь -яка сторона може створити дійсний MAC. HMAC, найбільш часто використовуваний тип MAC,
використовує хешування як основний криптографічний примітив. Повна назва алгоритму HMAC як правило
включає тип базової хеш-функції (наприклад, HMAC-SHA256 використовує хеш-функцію SHA-256).

Підписи мобільних додатків поєднують асиметричну криптографію (тобто за допомогою пари


відкритого/закритого ключів) з хешуванням для забезпечення цілісності та достовірності шляхом шифрування
хешу повідомлення за допомогою закритого ключа. Однак, на відміну від MAC, підписи також надають
властивість неможливості відмови від передачі або отримання вказаних даних, оскільки приватний ключ є
унікальним для підписувача даних.

Функції виведення ключів (KDF) мобільних додатків отримують секретні ключі з секретного значення
(наприклад, пароля) і використовуються для перетворення ключів в інші формати або для збільшення їх
довжини. KDF подібні до функцій хешування, але мають також інше застосування (наприклад, вони
використовуються як компоненти протоколів багатосторонньої угоди ключів). Хоча функції хешування та
KDF мають бути обчислювально важко оборотні, KDF мають додаткову вимогу, щоб ключі, які вони
виробляють, були достатньо випадкові.

 Відкритий проект забезпечення безпеки веб-додатків- OWASP(Open Web Application Security Project) надає
стандарт безпеки мобільних додатків MASVS (Mobile Application Security Verification Standard) . Цей стандарт
можуть використовувати архітектори і розробники мобільного програмного забезпечення, які прагнуть
розробляти безпечні мобільні додатки, а також тестувальники і інженери з ІБ для забезпечення повноти і
узгодженості результатів тестування. Інформація про стандарт доступна за посиланням: https://owasp.org/www-
project-mobile-security-testing-guide/.

Вимоги безпеки OWASP MASVS.


№ MSTG-ID Опис

Додаток не покладається на симетричну криптографію з жорстко кодованими ключами


1 MSTG-CRYPTO-1
як єдиний метод шифрування

2 MSTG-CRYPTO-2 Додаток використовує перевірені реалізації криптографічних примітивів.

Додаток використовує криптографічні примітиви з параметрами, які відповідають


3 MSTG-CRYPTO-3
найкращим галузевим практикам індустрії.

4 MSTG-CRYPTO-4 Додаток не використовує застарілі і слабкі криптографічні протоколи і алгоритми.

5 MSTG-CRYPTO-5 Додаток не використовує один і той же ключ кілька разів.

Всі випадкові значення генеруються з використанням безпечного генератора


6 MSTG-CRYPTO-6
випадкових чисел.

Керування криптографічними ключами, впровадження життєвого циклу


7 MSTG-ARCH-8 криптографічних ключів. В ідеалі дотримуйтесь вимог стандарту управління ключами,
наприклад NIST SP 800-57.

Визначення небезпечних та/або застарілих криптографічних алгоритмів (MSTG-CRYPTO-4)


Оцінюючи мобільний додаток, ви повинні переконатися, що в ньому не використовуються криптографічні
алгоритми та протоколи, які вже недостатні для сучасних вимог безпеки і оновіть криптографічні алгоритми
відповідно до галузевих стандартів. Важливо періодично перевіряти поточні найкращі практики застосування
криптографічних алгоритмів та відповідно коригувати конфігурації. Алгоритми з відомими недоліками слід
замінити більш безпечними альтернативами.
Переконайтеся, що ваші криптографічні алгоритми актуальні та відповідають галузевим стандартам. Вразливі
алгоритми включають застарілі блокові шифри (такі як DES та 3DES), потокові шифри (такі як RC4),
хеш -функції (такі як MD5 та SHA1) та зламані генератори випадкових чисел (такі як Dual_EC_DRBG та
SHA1PRNG). Навіть якщо застарілі блокові шифри мають сертифікат NIST, вони повинні видалятися з
програми та сервера. Сертифікація не замінює періодичну перевірку надійності алгоритму.
Перевірте вихідний код програми, і не використовуйте такі слабкі криптографічні алгоритми: DES, 3DES, RC2,
RC4, BLOWFISH, MD4, MD5, SHA1.
Назви криптографічних API залежать від конкретної мобільної платформи. Переконайтесь, що довжина
ключів відповідає галузевим стандартам і забезпечує захист протягом достатньої кількості часу. Порівняння
різних довжин ключів та їх захисту з урахуванням закону Мура доступне в Інтернеті.
Для мобільних додатків рекомендуються такі алгоритми:
1. Алгоритми конфіденційності: AES-GCM-256 або ChaCha20-Poly1305
2. Алгоритми цілісності: SHA-256, SHA-384, SHA-512, Blake2, сімейство SHA-3
3. Алгоритми цифрового підпису: RSA (3072 біт і вище), ECDSA з NIST P-384
4. Aлгоритми встановлення ключiв: RSA (3072 біти і вище), DH (3072 біти або вище), ECDH з NIST P-384
5. Крім того, для зберігання ключів шифрування, виконання криптографічних операцій та інших слід завжди
використовувати захищене обладнання (якщо воно є).

Для отримання додаткової інформації про вибір алгоритму та найкращі практики див. наступні ресурси:
 "Commercial National Security Algorithm Suite and Quantum Computing FAQ"
 NIST recommendations (2019)
 BSI recommendations (2019)

Криптографічні API Android базуються на Java Cryptography Architecture (JCA). JCA відокремлює
інтерфейси та реалізацію, що дозволяє включити кілька провайдерів безпеки зі своїми наборами
криптографічних алгоритмів. Більшість інтерфейсів і класів JCA визначені в пакетах java.security.* Та
javax.crypto.*. Крім того, в Android є конкретні пакети android.security.* та android.security.keystore.*.
Системи Keystore/KeyChain надають API для зберігання та використання ключів (API KeyChain використовує
систему KeyStore). Ці системи дозволяють керувати повним життєвим циклом криптографічних ключів
(генерація ключа, використання ключа, зберігання ключа, архівування ключа, видалення ключа). Але
працююча система залежить від того, як розробник програми її реалізував. Для аналізу вам слід зосередитися
на функціях, які використовуються розробником програми. Вам слід ідентифікувати та перевірити наступні
функції: генерація ключів, генерація випадкових чисел, обернення ключів.
Додатки з сучасним рівнем API вимагають таких змін:
• Для Android 7.0 (рівень API 24 і вище): не вказувати провайдера безпеки Crypto, а завжди використовувати
патчі провайдера послуг безпеки.
• Для Android 8.1 (рівень API 27 і вище) потрібно виконати такі вимоги:
- замінити використання Bouncy Castle на Conscrypt, відомий як AndroidOpenSSL, який має нові реалізації:
AlgorithmParameters: GCM, KeyGenerator: AES/DESEDE/HMACMD5/HMACSHA1/HMACSHA224/
HMACSHA256/HMACSHA384/HMACSHA512, SecretKeyFactory:DESEDE, and
Signature:NONEWITHECDSA.
- використовувати клас GCMParameterSpec.class замість класу IvParameterSpec.class для GCM.
- замінити сокети з OpenSSLSocketImpl на ConscryptFileDescriptorSocket, та ConscryptEngineSocket.
- SSLSession з нульовими параметрами дає NullPointerException.
- треба мати достатньо великі масиви як вхідні байти для генерації ключа, інакше викликається виняток
InvalidKeySpecException.
- Якщо читання з сокета переривається, викликається виняток SocketException.
• Для Android 9 (рівень API 28) і вище потрібно виконати такі вимоги:
- ви отримуєте попередження, якщо все ще вказуєте провайдера безпеки Crypto методом getInstance в API
нижче 28. В API 28 для Android 9 (рівень) або вище ви отримуєте помилку.
- виклик видаленого провайдера безпеки Crypto дає виняток NoSuchProviderException.
• Для Android 10 (рівень API 29) документація розробника містить усі зміни безпеки мережі.
Визначте всі випадки, де використовується криптографія, а саме:
• класи Cipher, Mac, MessageDigest, Signature
• інтерфейси Key, PrivateKey, PublicKey, SecretKey
• функції getInstance, generatedKey
• винятки KeyStoreException, CertificateException, NoSuchAlgorithmException
• класи, які використовують пакети java.security.*, Javax.crypto.*, Android.security.* та
android.security.keystore.*.
Для всіх ідентифікованих екземплярів визначте призначення криптографії та її тип:
• для шифрування/дешифрування - це забезпечує конфіденційність даних.
• підписування/перевірки - це забезпечує цілісність даних (а також підзвітність у деяких випадках).
• для обслуговування - захищає ключ під час роботи (наприклад, імпорт у KeyStore).
Крім того, слід визначити бізнес - призначення використання ідентифікованих екземплярів криптографії
(тобто для захисту конфіденційності даних, для підтвердження підпису файлу з пристрою X, який належить Y).
Необхідно переконатися, що:
• ключ використовується за призначенням при створенні (це стосується ключів KeyStore, у яких можуть бути
визначені функції KeyProperties)
• для асиметричних ключів приватний ключ використовується виключно для підписання, а відкритий -
виключно для шифрування.
• симетричні ключі не використовуються повторно для різних цілей. Слід створити новий симетричний ключ,
якщо він використовується в іншому контексті.
• криптографія використовується відповідно до комерційних цілей.

Криптографічні API iOS


Розглянемо криптографічні API для iOS. Apple надає бібліотеки, які містять реалізації найпоширеніших
криптографічних алгоритмів, інформацію про використання стандартних бібліотек для ініціалізації,
застосування криптографічних примітивів, аналізу вихідного коду.
CryptoKit
Apple CryptoKit був випущений з iOS 13 і побудований на базі криптографічної бібліотеки Apple corecrypto.
Фреймворк Swift забезпечує інтерфейс API, має ефективне управління пам'яттю, підтримує загальні методи.
CryptoKit містить безпечні алгоритми хешування, криптографії з симетричним ключем та криптографії з
відкритим ключем. Фреймворк також може використовувати апаратний менеджер ключів із Secure Enclave.
Apple CryptoKit містить такі алгоритми:
1. Хеші - MD5 (небезпечний модуль) - SHA1 (небезпечний модуль) - SHA -2 256 -бітний дайджест - SHA -2 384
– бітний дайджест - SHA-2 512-розрядний дайджест.
2. Симетричний ключ -Коди автентифікації повідомлень (HMAC) -Автентифіковане шифрування -AES -GCM -
ChaCha20 -Poly1305.
3. Відкритий ключ - ключ - Curve25519- NIST P -256 - NIST P -384 - NIST P -512
Приклади:
1. Створення та випуск симетричного ключа:
let encryptionKey = SymmetricKey(size: .bits256)
2. Обчислення дайджесту SHA-2 512-біт:
let rawString = "OWASP MTSG"
let rawData = Data(rawString.utf8)
let hash = SHA512.hash(data: rawData) // Compute the digest
let textHash = String(describing: hash)
print(textHash) // Print hash text
Більше даних про Apple CryptoKit є в:
• https://developer.apple.com/documentation/cryptokit
• https://developer.apple.com/documentation/cryptokit/performing_common_cryptographic_operations
• https://developer.apple.com/videos/play/wwdc2019/709
• https://www.hackingwithswift.com/example-code/cryptokit/how-to-calculate-the-sha-hash-of-a-string-or-data-instance

Бібліотеки CommonCrypto, SecKeyEncrypt та Wrapper


Найбільш часто використовуваний клас в iOS для криптографічних операцій - CommonCrypto. Функціональні
можливості, пропоновані об’єктом CommonCrypto, видно з вихідного коду заголовочних файлів:
• Commoncryptor.h надає параметри для симетричних криптографічних операцій.
• CommonDigest.h містить параметри алгоритмів хешування.
• CommonHMAC.h надає параметри для підтримуваних операцій HMAC.
• CommonKeyDerivation.h містить параметри підтримуваних функцій KDF.
• CommonSymmetricKeywrap.h надає функцію, яка використовується для обернення симетричного ключа
ключем шифрування ключа.
Типові бібліотеки, які використовуються, наприклад: IDZSwiftCommonCrypto, Heimdall, SwiftyRSA,
RNCryptor, Arcane.
Є також сторонні бібліотеки, такі як:
• CJOSE: З розвитком JWE та відсутністю громадської підтримки AES GCM інші бібліотеки знайшли свій
шлях, наприклад, CJOSE. CJOSE як і раніше вимагає обгортання більш високого рівня забезпечити реалізацію
C/C ++.
• CryptoSwift: бібліотека в Swift, яка є на GitHub. Бібліотека підтримує різні хеш-функції, MAC-функції, CRC-
функції, симетричні шифри та інші. Це не оболонка, а повністю реалізована версія кожного з шифрів. Важливо
перевірити ефективну реалізацію функції.
• OpenSSL: OpenSSL- це бібліотека інструментів, що використовується для TLS, написана на C. Більшість її
криптографічних функцій можна використовувати для виконання різних необхідних криптографічних дій,
таких як створення (H) MAC, підписів, симетричних та асиметричних шифрів, хешування, тощо. Існують різні
оболонки, такі як OpenSSL та MIHCrypto.
• LibSodium: Sodium-це сучасна, проста у використанні бібліотека програмного забезпечення для шифрування,
дешифрування, підписів, хешування паролів тощо. Це портативна, крос-сумісна, інсталяційна, упакована
бібліотека, із сумісним API та розширеним API, для зручності використання. Докладніше див. документацію
LibSodiums. Існують деякі бібліотеки-оболонки, такі як Swift-sodium, NAChloride та libsodium-ios.
• Tink: Нова криптографічна бібліотека Google. Джерела можна знайти у сховищі Tinks GitHub.
• Themis: бібліотека Crypto для зберігання та обміну повідомленнями для Swift, Obj-C, Android/Java, С ++, JS,
Python, Ruby, PHP, Go. Themis використовує libcrypto як двигун LibreSSL/OpenSSL. Він підтримує Objective-C
та Swift для генерації ключів, безпеки повідомлень (наприклад, шифрування та підписання повідомлень),
безпечного зберігання та безпечного налаштування сеансу. Для більш детальної інформації дивіться їхню вікі.
• Інші: Є багато інших бібліотек, таких як CocoaSecurity, Objective-C-RSA та aerogear-ios-crypto. Деякі з них
більше не обслуговуються і, можливо, ніколи не були перевірені на безпеку. Рекомендується використовувати
підтримувані бібліотеки.
• Зроби сам (DIY): Все більша кількість розробників створює власну реалізацію шифру або криптографічної
функції. Ця практика вкрай не рекомендується і її слід ретельно перевіряти експертом з криптографії.
Для більш детального визначення криптографічних параметрів шляхом запуску програм, слід звернутися до
документації Mobile security testing guide. Режим доступу: https://owasp.org/www-project-mobile-security-
testing-guide/
Висновки
Розглянуто, як працювати з криптографією на еліптичних кривих та як реалізувати практичні рішення
для генерації ключів та шифрування повідомлень.
Література
[1] Lenstra Elliptic-Curve Cryptography. Available online: https://en.wikipedia.org/wiki/Lenstra_elliptic-
curve_factorization.
[2] Bouncy Castle. Available online: www.bouncycastle.org/.
КОНТРОЛЬНІ ПИТАННЯ

1. Запишіть загальний вид рівняння еліптичної кривої.


2. Продемонструйте графічно порядок складання двох точок еліптичної кривої.
3. Що таке «точка О»?
4. Запишіть формально і представте графічно «закон подвоєння точки» еліптичної
кривої.
5. Чим визначається криптостійкість еліптичної криптографії?
6. Що таке «генеруюча точка» еліптичної кривої?
7. Сформулюйте задачу дискретного логарифмування над еліптичними кривими.
8. Чим визначається криптостійкість ЕЦП на основі еліптичних кривих?
9. Яку ключову інформацію використовують відправник і отримувач підписаного
повідомлення на основі еліптичної кривої?
10. У чому, на Вашу думку, полягають переваги схеми ЕЦП на ЕК в порівнянні з
традиційними? В чому полягають їх недоліки?
11. Які рекомендовані алгоритми для мобільних додатків Вам відомі?
12. Які застарілі алгоритми для мобільних додатків вже небезпечно
використовувати?

You might also like