Enterprise Encryption の関数には、次のような一般的な特性があります。
引数の型が不正な場合や引数の数が間違っている場合は、各関数でエラーが返されます。
要求された演算を実行することを関数に許可するのに引数が適していない場合は、必要に応じて
NULL
または 0 が返されます。これは、指定されたアルゴリズムが関数でサポートされていない場合、鍵の長さが短すぎたり長すぎたりする場合、PEM 書式の鍵文字列として要求される文字列が有効な鍵でない場合などに発生します。ベースとなる SSL ライブラリでは、ランダム度の初期化が処理されます。
関数の一部には、暗号化アルゴリズムの引数が指定されます。次の表には、サポートされているアルゴリズムのサマリーを関数別に示します。
表 12.22 関数でサポートされているアルゴリズム
関数 | サポートされているアルゴリズム |
---|---|
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 |
RSA、DSA、または DH
のいずれかの暗号化アルゴリズムを使用すれば鍵を作成できますが、鍵引数が指定されるその他の関数では、特定のタイプの鍵のみが許可される可能性があります。たとえば、ASYMMETRIC_ENCRYPT()
および ASYMMETRIC_DECRYPT()
では RSA 鍵のみが許可されます。
次の説明では、Enterprise Encryption 関数を呼び出す手順を示します。追加の例と説明については、セクション12.17.2「Enterprise Encryption の使用法と例」を参照してください。
-
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 アルゴリズムを使用して作成する必要があります。公開鍵と秘密鍵の 2 つのペアを持っていると仮定します。
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);
さらに、1 つのペアから秘密鍵を使用し、もう 1 つのペアから公開鍵を使用して、対称鍵文字列を作成すると仮定します。その後、この対称鍵の ID 関係が次のように保持されます。
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 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);
次のように仮定します。
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
その後、これらの ID 関係が次のように保持されます。
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 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
値: 最小の鍵の長さは 1024 ビットです。最大の鍵の長さはアルゴリズムによって異なり、RSA の場合は 16,384、DSA の場合は 10,000 です。これらの長さは、OpenSSL によって課された制約です。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()
の説明を参照してください。 -
DH 秘密鍵と公開鍵のペアを生成するための共有シークレットを作成し、
CREATE_ASYMMETRIC_PRIV_KEY()
に渡すことができるバイナリ文字列を返します。シークレットの生成に失敗した場合は、結果が NULL になります。サポートされている
key_len
値: 最小および最大の鍵の長さは、1024 ビットおよび 10,000 ビットです。これらの長さは、OpenSSL によって課された制約です。対称鍵を生成するための戻り値を使用する方法を示す例については、
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()
との使用に適しています。