暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[ACDU 翻译] 6.6.2 MySQL 企业加密使用及示例

原创 由迪 2021-09-26
479

要在应用程序中使用 MySQL Enterprise Encryption,请调用适合您希望执行的操作的函数。本节演示如何执行一些具有代表性的任务:

使用 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);

可以在运行时使用创建的密钥串的值,并存储到一个变量或表 SETSELECTINSERT

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权限的用户 可以使用该函数读取存储在文件中的键字符串值 。

摘要和签名字符串可以类似地处理。

通过密钥生成操作限制 CPU 使用率

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 服务器管理员能够为密钥生成设置较低的最大长度,从而限制 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 的语法可能不同。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论