アプリケーションで Enterprise Encryption を使用するには、実行する演算に適した関数を呼び出します。このセクションでは、一部の典型的なタスクを実行する方法を示します。
タスク: RSA 暗号化を使用して秘密鍵と公開鍵のペアを作成します。
-- Encryption algorithm; can be 'DSA' or 'DH' instead
SET @algo = 'RSA';
-- Minimum 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);
鍵文字列の値は、SET
、SELECT
、または
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()
関数を使用することで読み取ることができます。
ダイジェストと署名の文字列は、同様に処理できます。