Шифрование данных с помощью Google Tink
Tink — это библиотека шифрования от Google, альтернатива AWS Encryption. Библиотека помогает сосредоточиться на задаче шифрования и расшифровки данных, не отвлекаясь на выбор правильного алгоритма и параметров шифрования.
Поддерживаются Java и Go версии клиентов для Tink, позволяющие шифровать и расшифровывать данные на ключах KMS Yandex Cloud. Данные шифруются по схеме envelope encryption (объем открытого текста не ограничен).
Добавление зависимости
Перед началом работы необходимо добавить зависимости.
Добавьте зависимости с помощью Apache Maven:
<dependency>
<groupId>com.yandex.cloud</groupId>
<artifactId>kms-provider-tink</artifactId>
<version>2.6</version>
</dependency>
Выполните команду:
go get github.com/yandex-cloud/kms-clients-go/yckmstink
Шифрование и расшифровка
В коде используются следующие переменные:
endpoint
–api.cloud.yandex.net:443
.credentialProvider
илиcredentials
– определяет способ аутентификации, подробнее читайте в разделе Аутентификация в SDK Yandex Cloud.keyId
– идентификатор ключа KMS.plaintext
– открытый текст.ciphertext
– шифртекст.aad
– AAD-контекст.
Создайте Aead-объект и используйте методы encrypt и decrypt для шифрования и расшифровки данных:
AeadConfig.register();
KmsClients.add(new YcKmsClient(credentialProvider).withEndpoint(endpoint));
String keyUri = "yc-kms://" + keyId;
Aead kmsAead = KmsClients.get(keyUri).getAead(keyUri);
Aead aead = new KmsEnvelopeAead(AeadKeyTemplates.AES256_GCM, kmsAead);
...
byte[] ciphertext = aead.encrypt(plaintext, aad);
...
byte[] plaintext = aead.decrypt(ciphertext, aad);
Создайте aead-объект и используйте методы encrypt и decrypt для шифрования и расшифровки данных:
sdk, err := ycsdk.Build(context, ycsdk.Config{
Endpoint: endpoint,
Credentials: credentials,
})
if err != nil {...}
kmsAead := yckmstink.NewYCAEAD(keyId, sdk)
aead := aead.NewKMSEnvelopeAEAD(*aead.AES256GCMKeyTemplate(), kmsAead)
...
ciphertext, err := aead.Encrypt(plaintext, aad)
if err != nil {...}
...
plaintext, err := aead.Decrypt(ciphertext, aad)
if err != nil {...}