Spec-Zone.ru › Ruby 2.3

модуль OpenSSL::PKey

Асимметричные алгоритмы с открытым ключом

Асимметричные алгоритмы с открытым ключом решают проблему установления и обмена секретными ключами для шифрования/расшифровки сообщений. Ключ в таком алгоритме состоит из двух частей: открытого ключа, который может быть распространён среди других, и закрытого ключа, который должен оставаться секретным.

Сообщения, зашифрованные открытым ключом, могут быть расшифрованы только получателями, обладающими соответствующим закрытым ключом. Поскольку асимметричные алгоритмы значительно медленнее, чем симметричные алгоритмы (см. OpenSSL::Cipher), они часто используются для установления симметричного ключа между двумя сторонами, обладающими открытым ключом друг друга.

Асимметричные алгоритмы предлагают много полезных функций, которые используются в различных областях. Очень распространённое применение — создание и проверка цифровых подписей. Для подписания документа подписывающий обычно использует алгоритм хэширования (см. OpenSSL::Digest) для вычисления хэша документа, который затем шифруется (т. е. подписывается) с использованием закрытого ключа. Любой, обладающий открытым ключом, может проверить подпись, вычислив хэш исходного документа самостоятельно, расшифровав подпись с использованием открытого ключа подписывающего и сравнив результат с вычисленным ранее хэшем. Подпись действительна только в том случае, если расшифрованная подпись равна этому хэшу.

Модуль PKey поддерживает три популярных алгоритма с открытым/закрытым ключом:

  • RSA (OpenSSL::PKey::RSA)

  • DSA (OpenSSL::PKey::DSA)

  • Криптография эллиптических кривых (OpenSSL::PKey::EC)

Каждая из этих реализаций фактически является подклассом абстрактного класса PKey, который предоставляет интерфейс для поддержки цифровых подписей в виде OpenSSL::PKey::PKey#sign и OpenSSL::PKey::PKey#verify.

Обмен ключами Диффи-Хеллмана

Наконец, PKey также содержит OpenSSL::PKey::DH, реализацию протокола обмена ключами Диффи-Хеллмана, основанную на дискретных логарифмах в конечных полях, на том же основании, на котором построен DSA. Протокол Диффи-Хеллмана может использоваться для обмена (симметричными) ключами по небезопасным каналам без предварительного совместного знания между участвующими сторонами. Поскольку безопасность DH требует относительно длинных «открытых ключей» (т. е. части, которая открыто передаётся между участниками), DH обычно довольно медленный. Если для вас первостепенны безопасность или скорость, OpenSSL::PKey::EC предлагает другую реализацию протокола Диффи-Хеллмана.

уведомить rdoc о mOSSL и mPKey

уведомить rdoc о mOSSL и mPKey

уведомить rdoc о mOSSL и mPKey

Константы

DEFAULT_TMP_DH_CALLBACK

Публичные методы класса

OpenSSL::PKey.read(строка [, пароль ] ) → PKey Показать исходный код
OpenSSL::PKey.read(файл [, пароль ]) → PKey
static VALUE
ossl_pkey_new_from_data(int argc, VALUE *argv, VALUE self)
{
     EVP_PKEY *pkey;
     BIO *bio;
     VALUE data, pass;
     char *passwd = NULL;

     rb_scan_args(argc, argv, "11", &data, &pass);

     bio = ossl_obj2bio(&data);
     if (!(pkey = d2i_PrivateKey_bio(bio, NULL))) {
        OSSL_BIO_reset(bio);
        if (!NIL_P(pass)) {
            passwd = StringValuePtr(pass);
        }
        if (!(pkey = PEM_read_bio_PrivateKey(bio, NULL, ossl_pem_passwd_cb, passwd))) {
            OSSL_BIO_reset(bio);
            if (!(pkey = d2i_PUBKEY_bio(bio, NULL))) {
                OSSL_BIO_reset(bio);
                if (!NIL_P(pass)) {
                    passwd = StringValuePtr(pass);
                }
                pkey = PEM_read_bio_PUBKEY(bio, NULL, ossl_pem_passwd_cb, passwd);
            }
        }
    }

    BIO_free(bio);
    if (!pkey)
        ossl_raise(rb_eArgError, "Could not parse PKey");
    return ossl_pkey_new(pkey);
}

Параметры

  • string — это закодированная в DER или PEM строка, содержащая произвольный закрытый

или открытый ключ.

  • file — это экземпляр File, содержащий закодированный в DER или PEM

произвольный закрытый или открытый ключ.

  • pwd — это необязательный пароль в случае, если string или file — это зашифрованный

PEM-ресурс.

Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API