6.6.4 Описания функций шифрования MySQL Enterprise Encryption
Функции шифрования MySQL Enterprise Encryption обладают следующими общими характеристиками:
При неправильном типе аргументов или неверном количестве аргументов каждая функция возвращает ошибку.
Если аргументы не подходят для выполнения запрошенной операции, функция возвращает
NULLили 0, в зависимости от случая. Это происходит, например, если функция не поддерживает указанный алгоритм, длина ключа слишком короткая или длинная, или строка, ожидаемая как строка ключа в формате PEM, не является допустимым ключом. (OpenSSL накладывает собственные ограничения на длину ключа, а администраторы сервера могут наложить дополнительные ограничения на максимальную длину ключа, задав переменные окружения. См. Раздел 6.6.2, “Использование и примеры шифрования MySQL Enterprise Encryption”.)Базовая библиотека SSL позаботится об инициализации случайных чисел.
Несколько функций принимают аргумент алгоритма шифрования. В следующей таблице обобщены поддерживаемые алгоритмы каждой функцией.
Таблица 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(). -
Создаёт общий секрет для генерации пары ключей 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.