Professional Documents
Culture Documents
Лекція 6 - 06 - 10 - 2021 - БІС
Лекція 6 - 06 - 10 - 2021 - БІС
БІС
Алгоритми на еліптичних кривих. Застосунки для пристроїв з суттєво
обмеженими обчислювальними ресурсами.
План.
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/
Як видно, щоб отримати еквівалентну силу 256 -бітному симетричному ключу, стандартний асиметричний
алгоритм мав би використовувати величезний ключ у 15360 біт. Ключі такого розміру, як правило, непрактичні
1
через необхідну обчислювальну потужність, а отже, малу швидкість виконання операцій. Однак з алгоритмами
еліптичної кривої еквівалентна довжина ключа становить 512 біт, що є цілком практичним.
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
2
Рис.0. Алгоритм обміну ключами Діффі-Хеллмана-це метод безпечного встановлення спільної таємниці між
двома сторонами (Аліса та Боб).
Еліптична крива Діффі – Хеллмана (ECDH) дозволяє двом сторонам, кожна з яких має пару відкрито-
приватних ключів з еліптичною кривою, встановити спільний секрет. Цей спільний секрет може бути
безпосередньо використаний як ключ або для отримання іншого ключа. Ключ або похідний ключ можна
використовувати для шифрування подальших повідомлень за допомогою шифру симетричного ключа. Це
варіант протоколу Діффі-Хеллмана з використанням криптографії з еліптичною кривою.
Для кращого розуміння криптографії еліптичної кривої дуже важливо зрозуміти основи обчислень на
еліптичних кривих. Еліптична крива - це плоска алгебраїчна крива, визначена рівнянням виду
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). Рівняння еліптичної
кривої над полем першого типу можна привести до вигляду
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) означає, що ми застосовуємо рівняння кривої
виду
Як видно з рис.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, якщо 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
p + 1 – 2 p½ ≤ m ≤ p + 1 + 2 p½ . (8)
В табл. 1 наведені результати послідовного додавання для деяких точок кривої
виду y2 = x3 + 1.
Таблиця 1. Результати виконання операції Р + … + Р для кривої Е5(0, 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)
Крім того, до еліптичної кривої додається нескінченно віддалена точка О. Таким чином, точки, що
задовольняють рівняння кривої 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)
ζ - цифровий підпис під повідомленням М.
Верифікація підпису.
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)
Верифікація підпису.
На вході одержувач підписаного повідомлення має М і ζ як основні компоненти для
верифікації. Після виконання третього кроку отримаємо е (формула (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.
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 ”.
Алгоритми шифрування мобільних додатків перетворюють дані простого тексту в шифрований текст, що
приховує вихідний вміст. Дані простого тексту можна відновити з тексту шифрування шляхом дешифрування.
Шифрування може бути симетричним (шифрування за допомогою секретного ключа) або асиметричним
(шифрування відкритим ключем). Загалом, операції шифрування не захищають цілісність, але деякі
симетричні режими шифрування також забезпечують цей захист.
Алгоритми шифрування з симетричним ключем мобільних додатків використовують один і той же ключ як
для шифрування, так і для дешифрування. Цей тип шифрування є швидким і підходить для масової обробки
даних. Оскільки кожен, хто має доступ до ключа, може розшифрувати зашифрований вміст, цей метод вимагає
ретельного управління ключами.
Асиметричні алгоритми шифрування мобільних додатків працюють з двома окремими ключами: відкритим
та закритим. Відкритий ключ можна розповсюджувати вільно, а приватний ключ не повинен передаватися
нікому. Повідомлення, зашифроване відкритим ключем, можна розшифрувати лише за допомогою приватного
ключа. Оскільки асиметричне шифрування в кілька разів повільніше, ніж симетричні операції, його зазвичай
використовують лише для шифрування невеликих обсягів даних, таких як симетричні ключі для масового
шифрування.
Хешування мобільних додатків не є формою шифрування, але воно використовує криптографію. Хеш-функції
детерміновано відображають довільні фрагменти даних у значення фіксованої довжини і використовуються
для перевірки цілісності. Обчислити хеш з вхідних (початкових) даних легко, але дуже важко (тобто
неможливо) визначити початкові дані з вихідних даних хешу.
Коди автентифікації повідомлень (MAC) мобільних додатків поєднують інші криптографічні механізми
(наприклад, симетричне шифрування або хешування) з секретними ключами, що забезпечує як цілісність, так і
захист автентичності. Але щоб перевірити MAC, сторони обміну даними повинні поділитися одним секретним
ключем, і будь -яка сторона може створити дійсний MAC. HMAC, найбільш часто використовуваний тип MAC,
використовує хешування як основний криптографічний примітив. Повна назва алгоритму HMAC як правило
включає тип базової хеш-функції (наприклад, HMAC-SHA256 використовує хеш-функцію SHA-256).
Функції виведення ключів (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/.
Для отримання додаткової інформації про вибір алгоритму та найкращі практики див. наступні ресурси:
"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)
• для асиметричних ключів приватний ключ використовується виключно для підписання, а відкритий -
виключно для шифрування.
• симетричні ключі не використовуються повторно для різних цілей. Слід створити новий симетричний ключ,
якщо він використовується в іншому контексті.
• криптографія використовується відповідно до комерційних цілей.