要在应用程序中使用 MySQL Enterprise Encryption,请调用适合您希望执行的操作的函数。本节演示如何执行一些代表性任务:
-- 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()
密钥长度参数,这些函数所需的 CPU 资源量随着密钥长度的增加而增加。对于某些安装,如果应用程序频繁生成过长的密钥,这可能会导致不可接受的 CPU 使用率。
OpenSSL 为所有密钥规定了 1,024 位的最小密钥长度。OpenSSL 还为 DSA 和 RSA 密钥分别规定了 10,000 位和 16,384 位
create_asymmetric_priv_key()
的最大密钥长度,以及 10,000 位的最大密钥长度
create_dh_parameters()
。如果这些最大值太高,从 MySQL 5.6.35 开始可以使用三个环境变量,使 MySQL 服务器管理员能够为密钥生成设置较低的最大长度,从而限制 CPU 使用率:
MYSQL_OPENSSL_UDF_DSA_BITS_THRESHOLD
: 的最大 DSA 密钥长度(以位为单位)create_asymmetric_priv_key()
。此变量的最小值和最大值为 1,024 和 10,000。MYSQL_OPENSSL_UDF_RSA_BITS_THRESHOLD
: 的最大 RSA 密钥长度(以位为单位)create_asymmetric_priv_key()
。此变量的最小值和最大值为 1,024 和 16,384。MYSQL_OPENSSL_UDF_DH_BITS_THRESHOLD
: 的最大密钥长度(以位为单位)create_dh_parameters()
。此变量的最小值和最大值为 1,024 和 10,000。
要使用这些环境变量中的任何一个,请在启动服务器的进程的环境中设置它们。如果设置,它们的值优先于 OpenSSL 强加的最大密钥长度。例如,要将 的 DSA 和 RSA 密钥的最大密钥长度设置为 4,096 位
create_asymmetric_priv_key()
,请设置以下变量:
export MYSQL_OPENSSL_UDF_DSA_BITS_THRESHOLD=4096
export MYSQL_OPENSSL_UDF_RSA_BITS_THRESHOLD=4096
该示例使用 Bourne shell 语法。其他 shell 的语法可能不同。