Spec-Zone.ru › MySQL 5.7

6.6.2 Использование и примеры шифрования MySQL Enterprise

Для использования шифрования MySQL Enterprise в приложениях вызывайте функции, соответствующие операциям, которые вы хотите выполнить. Этот раздел демонстрирует, как выполнить некоторые типичные задачи:

  • Создать пару открытый/закрытый ключ с использованием RSA-шифрования

  • Использовать закрытый ключ для шифрования данных и открытый ключ для их дешифрования

  • Сгенерировать дайджест из строки

  • Использовать дайджест с парой ключей

  • Создать симметричный ключ

  • Ограничить использование процессора операциями генерации ключей

Создать пару открытый/закрытый ключ с использованием 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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/enterprise-encryption-usage.html

Spec-Zone.ru

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