Как поддерживать согласованный ключ шифрования в шифровании на уровне поля на стороне клиента MongoDB?

Я использую шифрование на уровне поля на стороне клиента MongoDB для шифрования и расшифровки данных. Однако я заметил, что каждый раз, когда я запускаю программу, примитивный двоичный ключ меняется. Это затрудняет получение ранее зашифрованных данных, поскольку я не могу расшифровать их с помощью нового ключа.

Есть ли способ поддерживать согласованный ключ шифрования для шифрования на уровне полей на стороне клиента в MongoDB? Если да, то как я могу это сделать?

https://www.mongodb.com/docs/manual/core/csfle/fundamentals/manual-encryption/#std-label-csfle-fundamentals-manual-encryption

https://go.dev/play/p/6W8e0OiPV2L

Я пытаюсь внедрить шифрование на уровне поля на стороне клиента в моем проекте сообщества MongoDB, чтобы зашифровать определенные поля в моих документах перед их сохранением в базе данных, а затем расшифровать их, когда я извлекаю их из базы данных.

Я следил за документацией MongoDB и смог успешно зашифровать и расшифровать данные во время первого выполнения моей программы. Однако я заметил, что ключ продолжает меняться каждый раз, когда я снова запускаю программу, и я хочу, чтобы ключ оставался неподвижным.

Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
1
0
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эти строки должны быть удалены:

// Drop the Key Vault Collection in case you created this collection
// in a previous run of this application.
if err = Client.Database(keyVaultDb).Collection(keyVaultColl).Drop(context.TODO()); err != nil {
    log.Fatalf("Collection.Drop error: %v", err)
}

А следующие строки нужны только тогда, когда ключ еще не существует:

dataKeyID, err := clientEnc.CreateDataKey(context.TODO(), provider, dataKeyOpts)
if err != nil {
    log.Fatalf("CreateDataKey error: %v", err)
}

Возможно, сначала выполните вызов clientEnc.GetKeyByAltName, чтобы проверить, существует ли ключ.

Говоря «изменение примитивного двоичного ключа», я думаю, вы имели в виду изменения ключа шифрования данных (DEK). Это вызвано удалением коллекции, в которой хранится DEK.

Смотрите Ключи и хранилища ключей:

Мастер-ключ клиента (CMK) — это ключ, который вы используете для шифрования ваших ключей шифрования данных (DEK)....

Ключ шифрования данных (DEK) — это ключ, который вы используете для шифрования полей в ваших документах MongoDB. Вы храните свой ключ шифрования данных в своей коллекции Key Vault в зашифрованном виде с помощью CMK....

Если вы удалите ключ шифрования данных (DEK), все поля, зашифрованные с помощью этого DEK, навсегда станут нечитаемыми.

Если вы удалите CMK, все поля, зашифрованные с помощью DEK, зашифрованных с помощью этого CMK, станут навсегда нечитаемыми.

Другие вопросы по теме