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.2 MySQL Enterprise Encryption の使用方法と例

アプリケーションで 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);

鍵文字列の値は、SETSELECT、または INSERT を使用することで実行時に作成し、変数やテーブルに格納できます。

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

ファイルに格納されている鍵文字列の値は、FILE 権限を持つユーザーが LOAD_FILE() 関数を使用することで読み取ることができます。

ダイジェストと署名の文字列は、同様に処理できます。

キー生成操作による CPU 使用率の制限

create_asymmetric_priv_key() および create_dh_parameters() 暗号化関数はキー長パラメータを取り、これらの関数に必要な CPU リソースの量はキーの長さが増加するにつれて増加します。 一部のインストールでは、アプリケーションが過度に長いキーを頻繁に生成する場合、これによって CPU 使用率が許容できなくなることがあります。

OpenSSL では、すべてのキーに 1,024 ビットの最小キー長が課されます。 OpenSSL では、create_asymmetric_priv_key() では DSA キーおよび RSA キーに対してそれぞれ 10,000 ビットおよび 16,384 ビットの最大キー長、および create_dh_parameters() では 10,000 ビットの最大キー長も課されます。 これらの最大値が大きすぎる場合は、MySQL サーバー管理者がキー生成の最大長を低く設定できるようにするために、3 つの環境変数を使用できます。これにより、CPU 使用率を制限できます:

  • MYSQL_OPENSSL_UDF_DSA_BITS_THRESHOLD: create_asymmetric_priv_key() の DSA キーの最大長 (ビット単位)。 この変数の最小値と最大値は 1,024 と 10,000 です。

  • MYSQL_OPENSSL_UDF_RSA_BITS_THRESHOLD: create_asymmetric_priv_key() の RSA キーの最大長 (ビット単位)。 この変数の最小値と最大値は 1,024 と 16,384 です。

  • MYSQL_OPENSSL_UDF_DH_BITS_THRESHOLD: create_dh_parameters() の最大キー長 (ビット単位)。 この変数の最小値と最大値は 1,024 と 10,000 です。

これらの環境変数のいずれかを使用するには、サーバーを起動するプロセスの環境に設定します。 設定されている場合、それらの値は OpenSSL によって課される最大キー長よりも優先されます。 たとえば、DSA に 4,096 ビット、create_asymmetric_priv_key() に RSA キーの最大キー長を設定するには、次の変数を設定します:

export MYSQL_OPENSSL_UDF_DSA_BITS_THRESHOLD=4096
export MYSQL_OPENSSL_UDF_RSA_BITS_THRESHOLD=4096

この例では Bourne シェル構文を使用します。 ほかのシェルの構文は異なる場合があります。