6.6.2 Использование и примеры шифрования MySQL Enterprise
Для использования шифрования MySQL Enterprise в приложениях вызывайте функции, соответствующие операциям, которые вы хотите выполнить. Этот раздел демонстрирует, как выполнить некоторые типичные задачи:
Создать пару открытый/закрытый ключ с использованием RSA-шифрования
-- Encryption algorithm; can be 'DSA' or 'DH' instead
SET @algo = 'RSA';
-- Key length in bits; make larger for stronger keys
SET @key_len = 1024;
-- Create private key
SET @priv = create_asymmetric_priv_key(@algo, @key_len);
-- Derive corresponding public key from private key, using same algorithm
SET @pub = create_asymmetric_pub_key(@algo, @priv);
Теперь вы можете использовать пару ключей для шифрования и дешифрования данных, подписи и проверки данных или генерации симметричных ключей.
Использовать закрытый ключ для шифрования данных и открытый ключ для их дешифрования
Для этого требуются ключи пары RSA.
SET @ciphertext = asymmetric_encrypt(@algo, 'My secret text', @priv);
SET @plaintext = asymmetric_decrypt(@algo, @ciphertext, @pub);
Аналогично, вы можете шифровать с помощью открытого ключа и дешифровать с помощью закрытого ключа.
SET @ciphertext = asymmetric_encrypt(@algo, 'My secret text', @pub);
SET @plaintext = asymmetric_decrypt(@algo, @ciphertext, @priv);
В любом случае, алгоритм, указанный для функций шифрования и дешифрования, должен соответствовать алгоритму, использованному для генерации ключей.
Сгенерировать дайджест из строки
-- Digest type; can be 'SHA256', 'SHA384', or 'SHA512' instead
SET @dig_type = 'SHA224';
-- Generate digest string
SET @dig = create_digest(@dig_type, 'My text to digest');
Использовать дайджест с парой ключей
Пара ключей может использоваться для подписи данных, а затем для проверки того, что подпись соответствует дайджесту.
-- Encryption algorithm; could be 'DSA' instead; keys must
-- have been created using same algorithm
SET @algo = 'RSA';
-- Generate signature for digest and verify signature against digest
SET @sig = asymmetric_sign(@algo, @dig, @priv, @dig_type);
-- Verify signature against digest
SET @verf = asymmetric_verify(@algo, @dig, @sig, @pub, @dig_type);
Создать симметричный ключ
Для этого требуются ключи DH открытый/закрытый, созданные с использованием общего симметричного секрета. Создайте секрет, передав длину ключа в create_dh_parameters(), а затем передайте секрет как «длину ключа» в create_asymmetric_priv_key().
-- Generate DH shared symmetric secret
SET @dhp = create_dh_parameters(1024);
-- Generate DH key pairs
SET @algo = 'DH';
SET @priv1 = create_asymmetric_priv_key(@algo, @dhp);
SET @pub1 = create_asymmetric_pub_key(@algo, @priv1);
SET @priv2 = create_asymmetric_priv_key(@algo, @dhp);
SET @pub2 = create_asymmetric_pub_key(@algo, @priv2);
-- Generate symmetric key using public key of first party,
-- private key of second party
SET @sym1 = asymmetric_derive(@pub1, @priv2);
-- Or use public key of second party, private key of first party
SET @sym2 = asymmetric_derive(@pub2, @priv1);
Значения строк ключей могут быть созданы во время выполнения и сохранены в переменной или таблице с помощью SET, SELECT или INSERT:
SET @priv1 = create_asymmetric_priv_key('RSA', 1024);
SELECT create_asymmetric_priv_key('RSA', 1024) INTO @priv2;
INSERT INTO t (key_col) VALUES(create_asymmetric_priv_key('RSA', 1024));
Значения строк ключей, сохранённые в файлах, могут быть прочитаны с помощью функции LOAD_FILE() пользователями, имеющими привилегию FILE.
Дайджесты и строки подписей могут обрабатываться аналогичным образом.
Ограничить использование процессора операциями генерации ключей
Функции шифрования create_asymmetric_priv_key() и create_dh_parameters() принимают параметр длины ключа, и количество процессорных ресурсов, необходимых этим функциям, увеличивается по мере увеличения длины ключа. В некоторых установках это может привести к неприемлемому использованию процессора, если приложения часто генерируют чрезмерно длинные ключи.
OpenSSL накладывает минимальную длину ключа в 1024 бита для всех ключей. OpenSSL также накладывает максимальную длину ключа в 10 000 бит для ключей DSA и 16 384 бит для ключей RSA соответственно для create_asymmetric_priv_key(), и максимальную длину ключа в 10 000 бит для create_dh_parameters(). Если эти максимальные значения слишком высоки, доступны три переменные среды с версии MySQL 5.7.17, чтобы предоставить администраторам сервера MySQL возможность устанавливать более низкие максимальные значения для генерации ключей и тем самым ограничить использование процессора:
MYSQL_OPENSSL_UDF_DSA_BITS_THRESHOLD: Максимальная длина ключа DSA в битах дляcreate_asymmetric_priv_key(). Минимальное и максимальное значения для этой переменной составляют 1024 и 10 000.MYSQL_OPENSSL_UDF_RSA_BITS_THRESHOLD: Максимальная длина ключа RSA в битах дляcreate_asymmetric_priv_key(). Минимальное и максимальное значения для этой переменной составляют 1024 и 16 384.MYSQL_OPENSSL_UDF_DH_BITS_THRESHOLD: Максимальная длина ключа в битах дляcreate_dh_parameters(). Минимальное и максимальное значения для этой переменной составляют 1024 и 10 000.
Для использования любой из этих переменных среды установите их в среде процесса, запускающего сервер. Если они установлены, их значения имеют приоритет над максимальной длиной ключа, наложенной OpenSSL. Например, для установки максимальной длины ключа в 4096 бит для ключей DSA и RSA для create_asymmetric_priv_key(), установите эти переменные:
export MYSQL_OPENSSL_UDF_DSA_BITS_THRESHOLD=4096
export MYSQL_OPENSSL_UDF_RSA_BITS_THRESHOLD=4096
Пример использует синтаксис Bourne shell. Синтаксис для других оболочек может отличаться.
© 2025 Oracle
Licensed under the GPLv2 License.