対称鍵によるデータの暗号化と復号

このページでは、Cloud Key Management Service(Cloud KMS)を使用して次の対称鍵操作を行う方法について説明します。

  • Cloud KMS 鍵を使用して、テキストまたはバイナリのコンテンツ(平文)を暗号化します。
  • Cloud KMS 鍵により暗号化された暗号テキストを復号します。

非対称鍵を使用して暗号化を行う場合は、非対称鍵によるデータの暗号化と復号をご覧ください。未加工の対称暗号化については、未加工の対称暗号化をご覧ください。

始める前に

  1. キーリングを作成し、鍵を作成します。

  2. 暗号化メソッドと復号メソッドを呼び出すユーザーに、鍵に対する cloudkms.cryptoKeyVersions.useToEncrypt 権限と cloudkms.cryptoKeyVersions.useToDecrypt 権限があることを確認してください。

    暗号化または復号をユーザーに許可する方法の 1 つは、ユーザーをその鍵の roles/cloudkms.cryptoKeyEncrypterroles/cloudkms.cryptoKeyDecrypter、または roles/cloudkms.cryptoKeyEncrypterDecrypter IAM 役割に追加することです。roles/cloudkms.admin ロールでは、これらの 2 つの権限は付与されません。詳細については、権限と役割をご覧ください。

暗号化

gcloud

コマンドラインで Cloud KMS を使用するには、まず Google Cloud CLI の最新バージョンをインストールまたはアップグレードします

gcloud kms encrypt \
    --key KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION  \
    --plaintext-file FILE_TO_ENCRYPT \
    --ciphertext-file ENCRYPTED_OUTPUT

以下を置き換えます。

  • KEY_NAME: 暗号化に使用する鍵の名前。
  • KEY_RING: 鍵を含むキーリングの名前
  • LOCATION: キーリングを含む Cloud KMS のロケーション。
  • FILE_TO_ENCRYPT: 暗号化するファイルへのパス。
  • ENCRYPTED_OUTPUT: 暗号化された出力を保存するパス。

すべてのフラグと有効な値については、--help フラグを指定してコマンドを実行してください。

C#

このコードを実行するには、まず C# 開発環境を設定し、Cloud KMS C# SDK をインストールします。


using Google.Cloud.Kms.V1;
using Google.Protobuf;
using System.Text;

public class EncryptSymmetricSample
{
    public byte[] EncryptSymmetric(
      string projectId = "my-project", string locationId = "us-east1", string keyRingId = "my-key-ring", string keyId = "my-key",
      string message = "Sample message")
    {
        // Create the client.
        KeyManagementServiceClient client = KeyManagementServiceClient.Create();

        // Build the key name.
        CryptoKeyName keyName = new CryptoKeyName(projectId, locationId, keyRingId, keyId);

        // Convert the message into bytes. Cryptographic plaintexts and
        // ciphertexts are always byte arrays.
        byte[] plaintext = Encoding.UTF8.GetBytes(message);

        // Call the API.
        EncryptResponse result = client.Encrypt(keyName, ByteString.CopyFrom(plaintext));

        // Return the ciphertext.
        return result.Ciphertext.ToByteArray();
    }
}

Go

このコードを実行するには、まず Go 開発環境を設定し、Cloud KMS Go SDK をインストールします。

import (
	"context"
	"fmt"
	"hash/crc32"
	"io"

	kms "cloud.google.com/go/kms/apiv1"
	"cloud.google.com/go/kms/apiv1/kmspb"
	"google.golang.org/protobuf/types/known/wrapperspb"
)

// encryptSymmetric encrypts the input plaintext with the specified symmetric
// Cloud KMS key.
func encryptSymmetric(w io.Writer, name string