12.19.4 MySQL 企业加密功能说明

MySQL 企业加密功能具有以下一般 Feature:

其中一些函数采用加密算法参数。下 table 按功能总结了受支持的算法。

table12.25 按功能支持的算法

Function Supported Algorithms
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

Note

尽管您可以使用 RSA,DSA 或 DH 加密算法中的任何一种来创建密钥,但是带有密钥参数的其他函数可能只接受某些类型的密钥。例如,ASYMMETRIC_ENCRYPT()ASYMMETRIC_DECRYPT()仅接受 RSA 密钥。

以下描述描述了 MySQL 企业加密函数的调用 Sequences。有关其他示例和讨论,请参见第 12.19.2 节“ MySQL 企业加密的用法和示例”

ASYMMETRIC_DECRYPT(算法,crypt_str,key_str)

使用给定的算法和密钥字符串解密加密的字符串,并以二进制字符串的形式返回结果纯文本。如果解密失败,则结果为NULL

支持的* algorithm *值:'RSA'

有关用法示例,请参见ASYMMETRIC_ENCRYPT()的描述。

ASYMMETRIC_DERIVE(pub_key_str, priv_key_str)

使用一方的私钥和另一方的公钥派生对称密钥,并将返回的密钥作为二进制字符串返回。如果密钥派生失败,则结果为NULL

假设您有两对公钥和私钥:

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(算法,str,key_str)

使用给定的算法和密钥字符串对字符串进行加密,然后将生成的密文作为二进制字符串返回。如果加密失败,则结果为NULL

支持的* 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);

Suppose that:

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(算法,digest_str,priv_key_str,digest_type)

使用私钥字符串对摘要字符串进行签名,并将签名作为二进制字符串返回。如果签名失败,则结果为NULL

支持的* algorithm *值:'RSA''DSA'

支持的* digest_type *值:'SHA224''SHA256''SHA384''SHA512'

有关用法示例,请参见ASYMMETRIC_VERIFY()的描述。

ASYMMETRIC_VERIFY(算法,digest_str,sig_str,pub_key_str,digest_type)

验证签名字符串是否与摘要字符串匹配,并返回 1 或 0 以指示验证是成功还是失败。

支持的* 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 *值:最小密钥长度(以位为单位)为 1,024.最大密钥长度取决于算法:RSA 为 16,384,DSA 为 10,000.这些密钥长度限制是 OpenSSL 施加的约束。服务器 Management 员可以通过设置环境变量来限制最大密钥长度。参见第 12.19.2 节“ MySQL 企业加密的用法和示例”

对于 DH 密钥,请传递共享的 DH 机密而不是密钥长度。要创建机密,请将密钥长度传递给CREATE_DH_PARAMETERS()

本示例创建一个 2,048 位 DSA 私钥,然后从该私钥派生一个公钥:

SET @priv = CREATE_ASYMMETRIC_PRIV_KEY('DSA', 2048);
SET @pub = CREATE_ASYMMETRIC_PUB_KEY('DSA', @priv);

有关显示 DH 密钥生成的示例,请参见ASYMMETRIC_DERIVE()的描述。

选择密钥长度和加密算法时的一些一般注意事项:

CREATE_ASYMMETRIC_PUB_KEY(algorithm, priv_key_str)

使用给定的算法从给定的私钥派生公钥,并以 PEM 格式的二进制字符串形式返回该密钥。如果密钥派生失败,则结果为NULL

支持的* algorithm *值:'RSA''DSA''DH'

有关用法示例,请参见CREATE_ASYMMETRIC_PRIV_KEY()的描述。

CREATE_DH_PARAMETERS(key_len)

创建用于生成 DH 私钥/公钥对的共享密钥,并返回可以传递给CREATE_ASYMMETRIC_PRIV_KEY()的二进制字符串。如果 Secret 生成失败,则结果为 null。

支持的* key_len *值:最小和最大密钥长度(以位为单位)为 1,024 和 10,000.这些密钥长度限制是 OpenSSL 施加的约束。服务器 Management 员可以通过设置环境变量来限制最大密钥长度。参见第 12.19.2 节“ MySQL 企业加密的用法和示例”

有关显示如何使用返回值生成对称密钥的示例,请参见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()

首页