The deal with OpenSSL

Sep 16, 2016 21:52

У OpenSSL багато критиків, і уже багато форків. Раніше мені якось не доводилось стикатися з цією бібліотекою, але останній рік я працюю з нею майже щоденно, точніше з криптографічною її частиною. Тож є кілька думок з цього приводу.
1. У OpenSSL офігенна архітектура у тому що стосується криптографії (EVP_-stuff, BIO_-stuff).
2. У OpenSSL гівняна документація. Точніше у них дофіга документації на функції, але майже немає прикладів їх використання. Доводиться багато гуглити і шукати по stackoverflow про те як саме користуватись їх функціями.
3. У роботі з OpenSSL варто мати версію зібрану зі зневаджувальною інформацією і не треба боятися лізти у джерельні коди - там усе більш-менш доступно.
4. Варто розуміти як саме працює RSA і алгоритми на еліптичних кривих. Так, наприклад, я тільки вчора узнав що цифровий підпис зроблений за допомогою ECDSA кожного разу різний для одно і того ж набору даних. Причина у тому що у процесі підпису один із параметрів обирається випадково і саме його випадковість захищає від підбору приватного ключа за підписом. Існує RFC 6979 який описує алгоритм обирання цього параметру для детермінованого підпису, але він наразі не імплементований у OpenSSL. Це суттєво зменшує можливості до тестування коду що працює з ECDSA.
5. Варто знати що таке ASN.1 і як з ним працювати. Наприклад, я тільки сьогодні узнав що DER вимагає мінімально можливого кодування цілих чисел, і тому підпис може мати різний розмір - у мене він коливався від 69 до 72 байт для SHA256 digest і кривої prime256v1. При чому EVP_DigestVerifyFinal повертав коректну довжину підпису тільки після фактичного підпису.
6. У OpenSSL погано з повідомленнями про помилки. Фактично, жодне з тих що я отримав мені не допомогло.

криптографія, робота, програмування

Previous post Next post
Up