MySQL企业加密功能描述
表 MySQL企业加密功能
名称 | 描述 |
---|---|
ASYMMETRIC_DECRYPT() | 使用私钥或公钥解密密文 |
ASYMMETRIC_DERIVE() | 从非对称密钥派生对称密钥 |
ASYMMETRIC_ENCRYPT() | 使用私钥或公钥加密明文 |
ASYMMETRIC_SIGN() | 从摘要生成签名 |
ASYMMETRIC_VERIFY() | 验证签名与摘要匹配 |
CREATE_ASYMMETRIC_PRIV_KEY() | 创建私钥 |
CREATE_ASYMMETRIC_PUB_KEY() | 创建公钥 |
CREATE_DH_PARAMETERS() | 生成共享的DH机密 |
CREATE_DIGEST() | 从字符串生成摘要 |
MySQL企业加密功能具有以下一般特征:
- 对于类型错误或参数数量错误的参数,每个函数都会返回错误。
- 如果参数不适合允许函数执行所请求的操作,则返回
NULL
或酌情返回 0。例如,如果某个函数不支持指定的算法,密钥长度太短或太长,或者预期是PEM格式的密钥字符串的字符串不是有效密钥,就会发生这种情况。(OpenSSL施加了自己的密钥长度限制,服务器管理员可以通过设置环境变量来对最大密钥长度施加其他限制。请参见“ MySQL企业加密的用法和示例”。) - 底层的SSL库负责随机性初始化。
其中一些功能采用加密算法参数。下表按功能总结了受支持的算法。
表按功能支持的算法
功能 | 支持的算法 |
---|---|
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 |
注意尽管您可以使用RSA,DSA或DH加密算法中的任何一种来创建密钥,但是带有密钥参数的其他函数可能只接受某些类型的密钥。例如,
ASYMMETRIC_ENCRYPT()
并且ASYMMETRIC_DECRYPT()
只接受RSA密钥。
以下描述描述了MySQL Enterprise Encryption函数的调用顺序。有关其他示例和讨论,请参见“ MySQL企业加密用法和示例”。
ASYMMETRIC_DECRYPT(algorithm,crypt_str,key_str)
使用给定的算法和密钥字符串对加密的字符串进行解密,然后将生成的明文作为二进制字符串返回。如果解密失败,则结果为
NULL
。key_str
必须是PEM格式的有效密钥字符串。为了成功解密,它必须是与ASYMMETRIC_ENCRYPT()
用于生成加密字符串的私钥或公钥字符串相对应的公钥或私钥字符串。algorithm
表示用于创建密钥的加密算法。支持的
algorithm
值:'RSA'
有关用法示例,请参见的说明
ASYMMETRIC_ENCRYPT()
。ASYMMETRIC_DERIVE(pub_key_str,priv_key_str)
使用一方的私钥和另一方的公钥派生对称密钥,并将返回的密钥作为二进制字符串返回。如果密钥派生失败,则结果为
NULL
。pub_key_str
并且priv_key_str
必须是PEM格式的有效密钥字符串。必须使用DH算法创建它们。假设您有两对公钥和私钥:
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(algorithm,str,key_str)
使用给定的算法和密钥字符串对字符串进行加密,然后将生成的密文作为二进制字符串返回。如果加密失败,则结果为
NULL
。str
长度不能大于key_str
长度- 11,以字节为单位key_str
必须是PEM格式的有效密钥字符串。algorithm
表示用于创建密钥的加密算法。支持的
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 keySET @ciphertext = ASYMMETRIC_ENCRYPT('RSA', 'The quick brown fox', @priv);SET @plaintext = ASYMMETRIC_DECRYPT('RSA', @ciphertext, @pub); -- Encrypt using public key, decrypt using private keySET @ciphertext = ASYMMETRIC_ENCRYPT('RSA', 'The quick brown fox', @pub);SET @plaintext = ASYMMETRIC_DECRYPT('RSA', @ciphertext, @priv);假设:
SET @s = astring to be encryptedSET @priv = a valid private RSAkey string in PEMformat SET @pub = the corresponding public RSAkey string in PEMformat 然后,这些身份关系成立:
ASYMMETRIC_DECRYPT('RSA', ASYMMETRIC_ENCRYPT('RSA', @s, @priv), @pub) = @s ASYMMETRIC_DECRYPT('RSA', ASYMMETRIC_ENCRYPT('RSA', @s, @pub), @priv) = @s
ASYMMETRIC_SIGN(algorithm,digest_str,priv_key_str,digest_type)
使用私钥字符串对摘要字符串进行签名,并将签名作为二进制字符串返回。如果签名失败,则结果为
NULL
。digest_str
是摘要字符串。可以通过调用生成它CREATE_DIGEST()
。digest_type
指示用于生成摘要字符串的摘要算法。priv_key_str
是用于对摘要字符串进行签名的私钥字符串。它必须是PEM格式的有效密钥字符串。algorithm
表示用于创建密钥的加密算法。支持的
algorithm
值:'RSA'
,'DSA'
支持的
digest_type
值:'SHA224'
,'SHA256'
,'SHA384'
,'SHA512'
有关用法示例,请参见的说明
ASYMMETRIC_VERIFY()
。ASYMMETRIC_VERIFY(
algorithm
,digest_str
,sig_str
,pub_key_str
,digest_type
)验证签名字符串是否与摘要字符串匹配,并返回1或0以指示验证是成功还是失败。
digest_str
是摘要字符串。可以通过调用生成它CREATE_DIGEST()
。digest_type
指示用于生成摘要字符串的摘要算法。sig_str
是签名字符串。可以通过调用生成它ASYMMETRIC_SIGN()
。pub_key_str
是签名者的公钥字符串。它对应于传递给ASYMMETRIC_SIGN()
生成签名字符串的私钥,并且必须是PEM格式的有效密钥字符串。algorithm
表示用于创建密钥的加密算法。支持的
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 pairSET @priv = CREATE_ASYMMETRIC_PRIV_KEY(@algo, 1024);SET @pub = CREATE_ASYMMETRIC_PUB_KEY(@algo, @priv); -- Generate digest from stringSET @dig = CREATE_DIGEST(@dig_type, 'The quick brown fox'); -- Generate signature for digest and verify signature against digestSET @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施加的约束。服务器管理员可以通过设置环境变量来限制最大密钥长度。请参见“ 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()
。选择密钥长度和加密算法时的一些一般注意事项:
- 专用密钥和公用密钥的加密强度随密钥大小的增加而增加,但是密钥生成的时间也随之增加。
- DH密钥的生成比RSA或RSA密钥花费的时间长得多。
- 非对称加密功能比对称功能慢。如果性能是一个重要因素,并且要经常使用这些功能,那么最好使用对称加密。例如,考虑使用
AES_ENCRYPT()
和AES_DECRYPT()
。
CREATE_ASYMMETRIC_PUB_KEY(algorithm,priv_key_str)
使用给定的算法从给定的私钥派生公钥,并以PEM格式的二进制字符串形式返回该密钥。如果密钥派生失败,则结果为
NULL
。priv_key_str
必须是PEM格式的有效密钥字符串。algorithm
表示用于创建密钥的加密算法。支持的
algorithm
值:'RSA'
,'DSA'
,'DH'
有关用法示例,请参见的说明
CREATE_ASYMMETRIC_PRIV_KEY()
。CREATE_DH_PARAMETERS(key_len)
创建用于生成DH私钥/公钥对的共享机密,并返回可以传递给的二进制字符串
CREATE_ASYMMETRIC_PRIV_KEY()
。如果秘密生成失败,则结果为null。支持的
key_len
值:最小和最大密钥长度(以位为单位)为1,024和10,000。这些密钥长度限制是OpenSSL施加的约束。服务器管理员可以通过设置环境变量来限制最大密钥长度。请参见“ 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', Thequick brown fox');所得的摘要字符串适合与
ASYMMETRIC_SIGN()
和一起使用ASYMMETRIC_VERIFY()
。