Documentation Home
MySQL 8.0 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 36.1Mb
PDF (A4) - 36.2Mb


MySQL 8.0 リファレンスマニュアル  /  ...  /  MySQL Enterprise Encryption ユーザー定義関数の説明

このページは機械翻訳したものです。

6.6.4 MySQL Enterprise Encryption ユーザー定義関数の説明

MySQL Enterprise Encryption 関数には、次の一般的な特性があります:

  • 引数の型が不正な場合や引数の数が間違っている場合は、各関数でエラーが返されます。

  • 要求された演算を実行することを関数に許可するのに引数が適していない場合は、必要に応じて NULL または 0 が返されます。 これは、指定されたアルゴリズムが関数でサポートされていない場合、鍵の長さが短すぎたり長すぎたりする場合、PEM 書式の鍵文字列として要求される文字列が有効な鍵でない場合などに発生します。 (OpenSSL では独自のキー長制限が課され、サーバー管理者は環境変数を設定して最大キー長に追加の制限を課すことができます。 セクション6.6.2「MySQL Enterprise Encryption の使用方法と例」を参照してください。)

  • ベースとなる SSL ライブラリでは、ランダム度の初期化が処理されます。

関数の一部には、暗号化アルゴリズムの引数が指定されます。 次の表には、サポートされているアルゴリズムのサマリーを関数別に示します。

表 6.40 関数でサポートされているアルゴリズム

関数 サポートされているアルゴリズム
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 関数のコール順序について説明します。 追加の例と説明については、セクション6.6.2「MySQL 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 値: 最小の鍵の長さは 1,024 ビットです。 最大の鍵の長さはアルゴリズムによって異なり、RSA の場合は 16,384、DSA の場合は 10,000 です。 これらのキー長制限は、OpenSSL によって課される制約です。 サーバー管理者は、環境変数を設定することで、最大キー長に追加の制限を課すことができます。 セクション6.6.2「MySQL Enterprise Encryption の使用方法と例」を参照してください。

    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 によって課される制約です。 サーバー管理者は、環境変数を設定することで、最大キー長に追加の制限を課すことができます。 セクション6.6.2「MySQL Enterprise Encryption の使用方法と例」を参照してください。

    対称キーの生成に戻り値を使用する方法を示す例は、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() での使用に適しています。