Spec-Zone.ru › MySQL 5.7

6.6.4 Описания функций шифрования MySQL Enterprise Encryption

Функции шифрования MySQL Enterprise Encryption обладают следующими общими характеристиками:

  • При неправильном типе аргументов или неверном количестве аргументов каждая функция возвращает ошибку.

  • Если аргументы не подходят для выполнения запрошенной операции, функция возвращает NULL или 0, в зависимости от случая. Это происходит, например, если функция не поддерживает указанный алгоритм, длина ключа слишком короткая или длинная, или строка, ожидаемая как строка ключа в формате PEM, не является допустимым ключом. (OpenSSL накладывает собственные ограничения на длину ключа, а администраторы сервера могут наложить дополнительные ограничения на максимальную длину ключа, задав переменные окружения. См. Раздел 6.6.2, “Использование и примеры шифрования MySQL Enterprise Encryption”.)

  • Базовая библиотека SSL позаботится об инициализации случайных чисел.

Несколько функций принимают аргумент алгоритма шифрования. В следующей таблице обобщены поддерживаемые алгоритмы каждой функцией.

Таблица 6.37 Поддерживаемые алгоритмы по функциям

Таблица 6.37 Поддерживаемые алгоритмы по функциям
Функция Поддерживаемые алгоритмы
asymmetric_decrypt() RSA
asymmetric_derive() DH
asymmetric_encrypt() RSA
asymmetric_sign() RSA, DSA
asymmetric_verify() RSA, DSA
create_asymmetric_priv_key() RSA, DSA, DH
create_asymmetric_pub_key() RSA, DSA, DH
create_dh_parameters() DH

Примечание

Несмотря на то, что вы можете создавать ключи с использованием любого из алгоритмов шифрования RSA, DSA или DH, другие функции, принимающие аргумент ключа, могут принимать только определенные типы ключей. Например, asymmetric_encrypt() и asymmetric_decrypt() принимают только ключи RSA.

В следующих описаниях показаны последовательности вызовов функций шифрования MySQL Enterprise Encryption. Дополнительные примеры и обсуждения см. в Разделе 6.6.2, “Использование и примеры шифрования MySQL Enterprise Encryption”.

  • asymmetric_decrypt(algorithm, crypt_str, key_str)

    Расшифровывает зашифрованную строку с помощью указанного алгоритма и ключа, возвращая полученный открытый текст в виде двоичной строки. В случае неудачи результат — NULL.

    key_str должен быть валидным строковым ключом в формате PEM. Для успешной дешифровки он должен быть строковым значением открытого или закрытого ключа, соответствующим закрытому или открытому ключу, используемому с asymmetric_encrypt() для создания зашифрованной строки. algorithm указывает алгоритм шифрования, используемый для создания ключа.

    Поддерживаемые значения algorithm: 'RSA'

    Пример использования см. в описании asymmetric_encrypt().

  • asymmetric_derive(pub_key_str, priv_key_str)

    Вычисляет симметричный ключ, используя закрытый ключ одной стороны и открытый ключ другой, и возвращает полученный ключ в виде двоичной строки. В случае неудачи результат — NULL.

    pub_key_str и priv_key_str должны быть валидными строками ключей в формате PEM. Они должны быть созданы с использованием алгоритма DH.

    Предположим, у вас есть две пары открытых и закрытых ключей:

    SET @dhp = create_dh_parameters(1024);
    SET @priv1 = create_asymmetric_priv_key('DH', @dhp);
    SET @pub1 = create_asymmetric_pub_key('DH', @priv1);
    SET @priv2 = create_asymmetric_priv_key('DH', @dhp);
    SET @pub2 = create_asymmetric_pub_key('DH', @priv2);
    

    Предположим далее, что вы используете закрытый ключ из одной пары и открытый ключ из другой пары для создания симметричной строки ключа. Тогда это соотношение симметричного ключа и идентичности имеет место:

    asymmetric_derive(@pub1, @priv2) = asymmetric_derive(@pub2, @priv1)
    
  • asymmetric_encrypt(algorithm, str, key_str)

    Шифрует строку с использованием указанного алгоритма и строки ключа и возвращает зашифрованный текст в виде двоичной строки. В случае неудачи результат — NULL.

    Длина str не может быть больше длины key_str − 11 байт.

    key_str должен быть валидным строковым ключом в формате PEM. algorithm указывает алгоритм шифрования, используемый для создания ключа.

    Поддерживаемые значения algorithm: 'RSA'

    Для шифрования строки передайте строку закрытого или открытого ключа в функцию asymmetric_encrypt(). Для восстановления исходной нешифрованной строки передайте зашифрованную строку в функцию asymmetric_decrypt() вместе со строкой открытого или закрытого ключа, соответствующего закрытому или открытому ключу, используемому для шифрования.

    -- Generate private/public key pair
    SET @priv = create_asymmetric_priv_key('RSA', 1024);
    SET @pub = create_asymmetric_pub_key('RSA', @priv);
    
    -- Encrypt using private key, decrypt using public key
    SET @ciphertext = asymmetric_encrypt('RSA', 'The quick brown fox', @priv);
    SET @plaintext = asymmetric_decrypt('RSA', @ciphertext, @pub);
    
    -- Encrypt using public key, decrypt using private key
    SET @ciphertext = asymmetric_encrypt('RSA', 'The quick brown fox', @pub);
    SET @plaintext = asymmetric_decrypt('RSA', @ciphertext, @priv);
    

    Предположим, что:

    SET @s = a string to be encrypted
    SET @priv = a valid private RSA key string in PEM format
    SET @pub = the corresponding public RSA key string in PEM format
    

    Тогда имеют место следующие соотношения идентичности:

    asymmetric_decrypt('RSA', asymmetric_encrypt('RSA', @s, @priv), @pub) = @s
    asymmetric_decrypt('RSA', asymmetric_encrypt('RSA', @s, @pub), @priv) = @s
    
  • asymmetric_sign(algorithm, digest_str, priv_key_str, digest_type)

    Подписывает строку дайджеста с использованием строки закрытого ключа и возвращает подпись в виде двоичной строки. В случае неудачи результат — NULL.

    digest_str — это строка дайджеста. Она может быть сгенерирована вызовом create_digest(). digest_type указывает алгоритм дайджеста, используемый для генерации строки дайджеста.

    priv_key_str — это строка закрытого ключа, используемая для подписи строки дайджеста. Она должна быть валидной строкой ключа в формате PEM. algorithm указывает алгоритм шифрования, используемый для создания ключа.

    Поддерживаемые значения algorithm: 'RSA', 'DSA'

    Поддерживаемые значения digest_type: 'SHA224', 'SHA256', 'SHA384', 'SHA512'

    Пример использования см. в описании asymmetric_verify().

  • asymmetric_verify(algorithm, digest_str, sig_str, pub_key_str, digest_type)

    Проверяет, соответствует ли строка подписи строке дайджеста, и возвращает 1 или 0, чтобы указать, была ли проверка успешной или неудачной.

    digest_str — это строка дайджеста. Она может быть сгенерирована вызовом create_digest(). digest_type указывает алгоритм дайджеста, используемый для генерации строки дайджеста.

    sig_str — это строка подписи. Она может быть сгенерирована вызовом asymmetric_sign().

    pub_key_str — это строка открытого ключа подписывающего лица. Она соответствует закрытому ключу, переданному функции asymmetric_sign() для генерации строки подписи, и должна быть валидной строкой ключа в формате PEM. algorithm указывает алгоритм шифрования, используемый для создания ключа.

    Поддерживаемые значения algorithm: 'RSA', 'DSA'

    Поддерживаемые значения digest_type: 'SHA224', 'SHA256', 'SHA384', 'SHA512'

    -- Set the encryption algorithm and digest type
    SET @algo = 'RSA';
    SET @dig_type = 'SHA224';
    
    -- Create private/public key pair
    SET @priv = create_asymmetric_priv_key(@algo, 1024);
    SET @pub = create_asymmetric_pub_key(@algo, @priv);
    
    -- Generate digest from string
    SET @dig = create_digest(@dig_type, 'The quick brown fox');
    
    -- Generate signature for digest and verify signature against digest
    SET @sig = asymmetric_sign(@algo, @dig, @priv, @dig_type);
    SET @verf = asymmetric_verify(@algo, @dig, @sig, @pub, @dig_type);
    
  • create_asymmetric_priv_key(algorithm, {key_len|dh_secret})

    Создаёт закрытый ключ с использованием указанного алгоритма и длины ключа или секрета DH и возвращает ключ в виде двоичной строки в формате PEM. В случае неудачи результат — NULL.

    Поддерживаемые значения algorithm: 'RSA', 'DSA', 'DH'

    Поддерживаемые значения key_len: Минимальная длина ключа в битах — 1024. Максимальная длина ключа зависит от алгоритма: 16384 для RSA и 10000 для DSA. Эти ограничения на длину ключа накладываются OpenSSL. Администраторы сервера могут наложить дополнительные ограничения на максимальную длину ключа, установив переменные среды. См. Раздел 6.6.2, “MySQL Enterprise Encryption Usage and Examples”.

    Для ключей DH передайте общий секрет DH вместо длины ключа. Для создания секрета передайте длину ключа в функцию create_dh_parameters().

    Этот пример создаёт закрытый ключ DSA длиной 2048 бит, затем вычисляет открытый ключ из закрытого ключа:

    SET @priv = create_asymmetric_priv_key('DSA', 2048);
    SET @pub = create_asymmetric_pub_key('DSA', @priv);
    

    Пример генерации ключей DH см. в описании asymmetric_derive().

    Некоторые общие рекомендации по выбору длины ключей и алгоритмов шифрования:

    • Устойчивость шифрования для закрытых и открытых ключей увеличивается с размером ключа, но время генерации ключа также увеличивается.

    • Генерация ключей DH занимает гораздо больше времени, чем RSA или RSA-ключей.

    • Функции асимметричного шифрования медленнее симметричных функций. Если производительность важна и функции будут использоваться очень часто, лучше использовать симметричное шифрование. Например, рассмотрите использование AES_ENCRYPT() и AES_DECRYPT().

  • create_asymmetric_pub_key(algorithm, priv_key_str)

    Вычисляет открытый ключ из данного закрытого ключа с использованием указанного алгоритма и возвращает ключ в виде двоичной строки в формате PEM. В случае неудачи результат — NULL.

    priv_key_str должен быть валидной строкой ключа в формате PEM. algorithm указывает алгоритм шифрования, используемый для создания ключа.

    Поддерживаемые значения algorithm: 'RSA', 'DSA', 'DH'

    Пример использования см. в описании create_asymmetric_priv_key().

  • create_dh_parameters(key_len)

    Создаёт общий секрет для генерации пары ключей DH (закрытый/открытый) и возвращает двоичную строку, которая может быть передана в create_asymmetric_priv_key(). В случае неудачи результат — null.

    Поддерживаемые значения key_len: Минимальная и максимальная длина ключа в битах — 1024 и 10000. Эти ограничения на длину ключа накладываются OpenSSL. Администраторы сервера могут наложить дополнительные ограничения на максимальную длину ключа, установив переменные среды. См. Раздел 6.6.2, “MySQL Enterprise Encryption Usage and Examples”.

    Пример использования возвращаемого значения для генерации симметричных ключей см. в описании asymmetric_derive().

    SET @dhp = create_dh_parameters(1024);
    
  • create_digest(digest_type, str)

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

    Поддерживаемые значения digest_type: 'SHA224', 'SHA256', 'SHA384', 'SHA512'

    SET @dig = create_digest('SHA512', The quick brown fox');
    

    Результирующая строка дайджеста подходит для использования с asymmetric_sign() и asymmetric_verify().

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/enterprise-encryption-functions.html

Spec-Zone.ru

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