openssl. RSA. Все могло быть проще?
От: MikelSV http://www.centerix.ru
Дата: 25.08.14 16:39
Оценка:
Познакомился сегодня с openssl и в частности с RSA. Вот такое впечатление: http://mikelsv.livejournal.com/14057.html

Каково ваше мнение об адекватности openssl? Есть ли способ более проще с ней работать? И может быть вам встречались примеры? На мои вопросы как примеров использования гугл выдавал в основном маны.

Разве это не всемирно известная библиотека, которой пользуется безумное множество людей? И каждый пишет кучу функций вместо одной? Или я снова не прочитал документацию и все намного проще?
Римское правило. Тот, кто говорит, что Это не может быть сделано, никогда не должен мешать тому, кто Это делает.
Осень, ну вы поняли.
Зачем еще один код? А человек?
rsa openssl
Re: openssl. RSA. Все могло быть проще?
От: sizeof_void Россия  
Дата: 25.08.14 16:53
Оценка:
Здравствуйте, MikelSV, Вы писали:

MSV>Познакомился сегодня с openssl и в частности с RSA. Вот такое впечатление: http://mikelsv.livejournal.com/14057.html


MSV>Каково ваше мнение об адекватности openssl? Есть ли способ более проще с ней работать? И может быть вам встречались примеры? На мои вопросы как примеров использования гугл выдавал в основном маны.


MSV>Разве это не всемирно известная библиотека, которой пользуется безумное множество людей? И каждый пишет кучу функций вместо одной? Или я снова не прочитал документацию и все намного проще?


Я немного с OpenSSL работал ("экспериментировал") и мой вывод такой:
Эта библиотека, скорее, сложна (в силу отсутствия комментов) тому, кто слабо знает криптуху, чем тому, кто слабо знает С++.
Да она же, вроде как на чистом С, а не на плюсах написана. И интерфейс там процедурный тоже, если не ошибаюсь.
"May the Force be with us all!" (c)
Re: openssl. RSA. Все могло быть проще?
От: okman Беларусь https://searchinform.ru/
Дата: 25.08.14 18:51
Оценка:
Здравствуйте, MikelSV, Вы писали:

MSV>Каково ваше мнение об адекватности openssl?


Вполне нормальная библиотека.
Может быть, где-то и корявая, но я видел и гораздо более кошмарные программные интерфейсы.
Такие, что только плеваться и можно.

MSV>Есть ли способ более проще с ней работать?


Написать свои обертки в стиле C++ и использовать во всех проектах с OpenSSL.

MSV>Разве это не всемирно известная библиотека, которой пользуется безумное множество людей? И каждый пишет кучу функций вместо одной? Или я снова не прочитал документацию и все намного проще?


Ну не знаю.
Приходилось работать с OpenSSL, например, в задачах шифрования-дешифрования трафика на лету, с
генерацией сертификатов и т.п. Например, полный код генерации SSL-сертификата, с заполнением
всех свойств, комментариями и проверкой ошибок, занял где-то 200 строк.
Разумеется, после вдумчивого чтения документации.

Да, я тоже "скучаю" по простым open/close, но сильно сомневаюсь, что у C-шной библиотеки,
охватывающей такое разнообразие криптографических функций и протоколов, вообще возможен
простой и красивый интерфейс. Недостижимый идеал !
Re: openssl. RSA. Все могло быть проще?
От: smeeld  
Дата: 25.08.14 19:32
Оценка: +1
Здравствуйте, MikelSV, Вы писали:

Если нужно только RSA криптование, без протоколов сеансов и хендшайков, то проще здесь
Re: openssl. RSA. Все могло быть проще?
От: oziro Нигерия  
Дата: 27.08.14 12:44
Оценка:
Здравствуйте, MikelSV, Вы писали:
MSV>Каково ваше мнение об адекватности openssl?

Исторически сложившийся сложный и громоздкий продукт. С кучей опций и вариантов использования, неправильно применив которые, можно существенно понизить безопасность.

>Есть ли способ более проще с ней работать?


Нет. Самый нормальный способ: выбрать стратегию (типы шифров, алгоритмы, размеры ключей, параметры и тп), документировать ее, и сделать обертки над openssl.

А еще, есть NaCl, libsodium — высокоуровнеая и дуракоустойчивая либа для криптографии. Разбирась с ней, хорошо понимаешь современные основы криптографии.
Re[2]: openssl. RSA. Все могло быть проще?
От: ro_man  
Дата: 28.08.14 05:59
Оценка:
Здравствуйте, smeeld, Вы писали:

+1 за libgcrypt.
Правда, у меня возникли некоторые сложности при конвертации сгенерированных ключей в массив двоичных данных — соответствующая функция в порте библиотеки на целевую платформе (Raspbian) не реализована. Пришлось колдовать с форматированным выводом в строку и последующим ее разбором.
Re: openssl. RSA. Все могло быть проще?
От: SkyDance Земля  
Дата: 28.08.14 06:25
Оценка:
MSV>Каково ваше мнение об адекватности openssl?

Для open source библиотеки с такой историей — более чем.

MSV>Есть ли способ более проще с ней работать?


Нет. Это изделие не для слабых духом. И да, маны — тоже не лучший источник информации. Наиболее правильный путь — залезть с головой в код. Там все не так сложно, как выглядит снаружи.

MSV>Разве это не всемирно известная библиотека, которой пользуется безумное множество людей? И каждый пишет кучу функций вместо одной?


Да, всемирно известная. Да, многие пользуются. Но в основном базовым функционалом — не для crypto, а для собственно SSL. Если вам нужно только шифрование, есть и другие варианты.

MSV>Или я снова не прочитал документацию и все намного проще?


Скорее всего, вы не разобрались. Там у openssl внутри всех этих BIO — счетчики ссылок (reference counters). Особождается BIO по вызову BIO_free, когда счётчик падает до нуля. Если вы пишете на С++, все становится на порядок проще при использовании unique_ptr (shared_ptr для совсем старых компиляторов).

Пример (выдран из тестов, поэтому никакой нормальной работы с ошибками):

    // BIO_new_mem_buf is not const aware, but it does not modify the buffer.
    std::unique_ptr<BIO, int (*)(BIO*)> pkbio(
        BIO_new_mem_buf(const_cast<char*>(_source.c_str()), -1), BIO_free);

    // BIO_new_mem_buf is not const aware, but it does not modify the buffer.
    std::unique_ptr<BIO, int (*)(BIO*)> certbio(
        BIO_new_mem_buf(const_cast<char*>(_source.c_str()), -1), BIO_free);

    // Private key
    std::unique_ptr<EVP_PKEY, void (*) (EVP_PKEY*) > pk(
        PEM_read_bio_PrivateKey(&*pkbio, NULL, NULL, NULL), EVP_PKEY_free);
    if (!pk)
        throw std::system_error(ERR_get_error(), ssl_category(), "failed to read private key");

    std::unique_ptr<X509, void (*) (X509*)> cert(
        PEM_read_bio_X509_AUX(&*certbio, NULL, NULL, NULL), X509_free);
    if (!cert)
        throw std::system_error(ERR_get_error(), ssl_category(), "failed to read certificate");

    if (SSL_CTX_use_PrivateKey(context_, &*pk) != 1)
        throw std::system_error(ERR_get_error(), ssl_category(), "failed to assign private key");
    if (SSL_CTX_use_certificate(context_, &*cert) != 1)
        throw std::system_error(ERR_get_error(), ssl_category(), "failed to assign certificate");


Именно ваш случай я тоже могу подробнее посмотреть, но лучше оставлю вам в качестве домашнего задания. Ибо ваш случай простой, а там в openssl есть и более реальные замуты
Re: openssl. RSA. Все могло быть проще?
От: Sanik Россия http://sergeysthoughts.blogspot.com/
Дата: 28.08.14 06:33
Оценка:
Здравствуйте, MikelSV, Вы писали:

MSV>Познакомился сегодня с openssl и в частности с RSA. Вот такое впечатление: http://mikelsv.livejournal.com/14057.html


Могло бы быть проще, например Botan
Но к OpenSSL тоже со временем привыкаешь
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.