Spec-Zone.ru › Ruby 2.2

модуль 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.

Обмен ключами Diffie-Hellman

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

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

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

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

Методы публичного класса

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