Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 59 additions & 2 deletions ru/kms/operations/symmetric-encryption.md
Original file line number Diff line number Diff line change
Expand Up @@ -137,9 +137,9 @@
* `--source-ciphertext-file` — входной файл с шифртекстом.

```bash
yc kms symmetric-crypto reencrypt \
yc kms symmetric-crypto re-encrypt \
--id <идентификатор_ключа> \
--ciphertext-file ciphertext-file
--ciphertext-file ciphertext-file \
--source-key-id <идентификатор_исходного_ключа> \
--source-ciphertext-file source-ciphertext-file
```
Expand All @@ -150,6 +150,63 @@

{% endlist %}

## Сгенерируйте ключ шифрования данных {#generate-data-key}

У метода `encrypt` есть ограничение на размер данных — 32 КБ. Большие объемы шифруют по схеме [envelope encryption](../concepts/envelope.md): данные шифруются локально ключом шифрования данных (DEK), а сам DEK шифруется ключом {{ kms-short-name }} и хранится рядом с шифртекстом.

{{ kms-short-name }} умеет сгенерировать DEK и сразу вернуть его в двух видах: в открытом и в зашифрованном ключом {{ kms-short-name }}. Открытый DEK используют для локального шифрования и уничтожают сразу после, зашифрованный сохраняют вместе с данными.

{% list tabs group=instructions %}

- CLI {#cli}

{% include [cli-install](../../_includes/cli-install.md) %}

{% include [default-catalogue](../../_includes/default-catalogue.md) %}

1. Посмотрите описание команды CLI для генерации ключа шифрования данных:

```bash
yc kms symmetric-crypto generate-data-key --help
```

1. Сгенерируйте ключ:

```bash
yc kms symmetric-crypto generate-data-key \
--id <идентификатор_ключа> \
--data-key-spec AES_256 \
--data-key-plaintext-file data-key-plaintext-file \
--data-key-ciphertext-file data-key-ciphertext-file
```

Где:

* `--id` — идентификатор [ключа KMS](../concepts/key.md), которым будет зашифрован DEK. Вместо него можно указать `--name` с именем ключа.
* `--version-id` — (опционально) [версия](../concepts/version.md) ключа KMS. По умолчанию используется основная.
* `--data-key-spec` — алгоритм генерируемого DEK: `AES_128`, `AES_192` или `AES_256`.
* `--data-key-plaintext-file` — выходной файл с открытым DEK.
* `--data-key-ciphertext-file` — выходной файл с зашифрованным DEK.
* `--aad-context-file` — (опционально) входной файл с [AAD-контекстом](../concepts/symmetric-encryption.md#add-context).
* `--skip-plaintext` — (опционально) не записывать открытый DEK. По умолчанию он возвращается.

{% note warning %}

Не сохраняйте открытый DEK надолго. Расшифровывайте его только на время шифрования или расшифрования данных и уничтожайте сразу после. Подробнее в разделе [{#T}](../concepts/envelope.md#specify).

{% endnote %}

- API {#api}

Чтобы сгенерировать ключ шифрования данных, воспользуйтесь методом REST API [generateDataKey](../../kms/api-ref/SymmetricCrypto/generateDataKey.md) для ресурса [SymmetricCrypto](../../kms/api-ref/SymmetricCrypto/index.md) или вызовом gRPC API [SymmetricCryptoService/GenerateDataKey](../../kms/api-ref/grpc/SymmetricCrypto/generateDataKey.md) и передайте в запросе:

* идентификатор ключа {{ kms-short-name }} в параметре `keyId`;
* алгоритм генерируемого ключа в параметре `dataKeySpec`;
* (опционально) AAD-контекст в параметре `aadContext`;
* (опционально) `skipPlaintext` со значением `true`, чтобы в ответе не было открытого ключа.

{% endlist %}

#### Полезные ссылки {#see-also}

* [Интерфейс командной строки CLI](../../cli)
Expand Down